我对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页面。如果所有请求都转发过滤,我该怎么做?或者,可能是,我不理解原则。
答案 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>