理解web.xml中的url模式

时间:2017-05-10 00:01:49

标签: java xml servlets

我对web.xml的这些部分感到很困惑:

<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.labwork.filter.Filter</filter-class>
</filter>

<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这是真正的问题。例如,我有几个Servlet和静态html页面。所有请求都通过过滤器。可能是,我想从过滤器转发到servlet / html页面。如果所有请求都转发过滤,我该怎么做?或者,可能是,我不理解原则。

2 个答案:

答案 0 :(得分:1)

根据我们在评论部分中的对话,您希望过滤除少数几个页面之外的所有请求。

假设您想要免除login.html过滤,您可以做的是获取请求URI并检查该字符串是否包含login.html,如下所示:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {                
    String path = ((HttpServletRequest) request).getRequestURI();
    if (path.contains("login.html")) //login page                                                
        chain.doFilter(request, response); //proceed to the page
    } else {            
        //conditions here
    }
}

我必须说明这不是标准做法。如果您正在执行此操作,那么您应该检查您的设计选择。

答案 1 :(得分:1)

如果要指定应将请求转发到哪个servlet / html,可以在web.xml中添加<servlet-name><servlet-mapping>部分。

例如:

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>examples.Login</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

OR

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <jsp-file>/login.html</jsp-file>
</servlet>

<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>