程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> springmvc restful配置有一個小小的坑坑,springmvcrestful

springmvc restful配置有一個小小的坑坑,springmvcrestful

編輯:JAVA綜合教程

springmvc restful配置有一個小小的坑坑,springmvcrestful


首先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

哈哈,網上找了很多,但是很不幸沒找到解決方案,有大神有更好的方案麻煩請告訴我哦哦哦哦哦哦,我好改正

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved