我想将Cutome servlet仅用于没有.jsp,jss,css和图片扩展等扩展名的网址。
我试过这样但没用。
Web.xml:
<filter>
<filter-name>ControllerFilter</filter-name>
<filter-class>tut.controller.ControllerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ControllerFilter</filter-name>
<servlet-name>ControllerServlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>ControllerServlet</servlet-name>
<servlet-class>tut.controller.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>FileServlet</servlet-name>
<servlet-class>tut.controller.FileServlet</servlet-class>
</servlet>
过滤:
String requestedUri = ((HttpServletRequest)request).getRequestURI();
System.out.println("requestedUri:"+requestedUri);
if(requestedUri.matches(".*[css|jpg|png|gif|js|jsp]*")){
//How to configure the default calling here
return;
}
else
{
// ControllerServlet for other requests
chain.doFilter(request, response);
}
答案 0 :(得分:1)
尝试使用$
表示正则表达式中的一行结尾
requestedUri.matches(".*[css|jpg|png|gif|js|jsp]$")
如果匹配,则遵循链,否则将请求转发到所需的Servlet,JSP或HTML。
if (uri.matches(".*[css|jpg|png|gif|js|jsp]$")) {
filterChain.doFilter(req, res);
}else{
// forward the request to Servlet/JSP/HTML
req.getRequestDispatcher("path").forward(req, resp);
}
的web.xml:
使用/
作为过滤器的url模式来检查所有请求,然后根据uri将它转发到过滤器本身的Servlet / JSP / HTML。
<filter-mapping>
<filter-name>ControllerFilter</filter-name>
<servlet-name>/</servlet-name>
</filter-mapping>
答案 1 :(得分:0)
我认为Filter不是一个实现你想要的好机制。如果Filter收到了不需要的扩展请求,那么处理此问题为时已晚。
您可以在Filter中修改您的请求和响应,以进行预处理或后处理,但这可能不是您正在寻找的。您希望这些扩展不会被路由到servlet ,而是由静态内容处理程序处理。
要执行您想要的操作,您需要将静态内容放在一个不在可以匹配Servlet路径的路径下的文件夹中,否则您的servlet将获得静态内容的请求,此时您需要对你的servlet中的内部请求做些什么。