首先web.xml配置
<!-- spring-mvc --> <servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
url-pattern 配置/即可,如果配置/*的話會出問提,連返回視圖jsp也會攔截,具體原因請看翻看源碼
問提:這樣配置的話,大家都會忽略一個問題,就是a/b/c可以訪問,但是a/b/c.do;a/b/c.mm;a/b/c.zz都可以訪問a/b/c的controller,在不修改源碼源碼的情況下,我們來
解決這個問題,雖然都是攔截了/這樣的請求,但是我們只讓a/b/c這樣的請求進入controller,帶有【.】的後綴的不讓他進入,直接去404頁面
解決辦法:
web.xml加入filte
1 <!-- 對url進行簡單的過濾 --> 2 <filter> 3 <filter-name>servletRequest</filter-name> 4 <filter-class>cn.tomcat.quickstart.common.filter.ServletRequestFilter</filter-class> 5 </filter> 6 <filter-mapping> 7 <filter-name>servletRequest</filter-name> 8 <url-pattern>/*</url-pattern> 9 </filter-mapping>
ServletRequestFilter.java
1 import java.io.IOException; 2 3 import javax.servlet.FilterChain; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 8 import org.springframework.web.filter.OncePerRequestFilter; 9 10 /** 11 * 12 * 對進來的url進行處理,放在filter最前面,springmvc <url-pattern>/</url-pattern> 13 * 默認攔截所有請求,ex:a/b/c.do,a/b/c.html,a/b/c.action,a/b/c 14 * 去掉帶後綴的訪問,模仿restful風格,只接受a/b/c的請求 15 * 16 */ 17 public class ServletRequestFilter extends OncePerRequestFilter { 18 19 @Override 20 protected void doFilterInternal(HttpServletRequest request, 21 HttpServletResponse response, FilterChain filterChain) 22 throws ServletException, IOException { 23 String requestPath = request.getServletPath(); 24 //不用擔心會把靜態文件給攔截了,例如*.js,*.css類似於這樣的,在web.xml做處理了 25 //所有請求帶有後綴【.】的直接去404,不接受這樣的請求 26 if(requestPath.lastIndexOf(".")!=-1){ 27 request.getRequestDispatcher("/WEB-INF/pages/error/404.jsp").forward(request, response); 28 }else{ 29 filterChain.doFilter(request, response); 30 } 31 } 32 33 }
帶有.結尾的直接go 404,哈哈,也許你會問要是這樣靜態文件不是也會被過濾掉了嗎?類似於*.js,*.css,.....N多這樣類型的文件
請去看上一篇文章,已經解決這個問題了,同樣吧靜態文件交給了servlet來處理,根本不用進入springMVC的servlet
連接:http://www.cnblogs.com/ijuzi/p/5669260.html
哈哈,網上找了很多,但是很不幸沒找到解決方案,有大神有更好的方案麻煩請告訴我哦哦哦哦哦哦,我好改正