Spring Mvc Web 配置攔截規則與訪問靜態資源 (三)


攔截規則配置

1. *.do

<!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
        
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

默認的 url-pattern 為 "/",改成 *.do 后,就沒有默認首頁面了,所以還得添加默認訪問頁:

<welcome-file-list>
        <welcome-file>home.do</welcome-file>
    </welcome-file-list>

打開 home.jsp 所對應的 RequestMapping 注入方法處,一般homeController.java,修改攔截 value 值為 home 或 home.do,本來為 "/";

@RequestMapping(value = "home.do", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
        
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        
        String formattedDate = dateFormat.format(date);
        
        model.addAttribute("serverTime", formattedDate );
        
        return "home";
    }

2. /*, 把 *.do 改為 "/*"

這種方式,與 "/" 應該差不多,訪問 /home 時, 可以訪問到頁面,但無法解析頁面內部的 動態代碼;

3. *.html, *.htm,這個的規則跟 *.do 差不多;

如何訪問靜態資源

*.do, *.htm, *.html 這樣的規則,都能正常的訪問靜態資源,但不管在什么情況下,放靜態資源放入到 WEB-INF 下, 好像都沒法訪問到的。百度一下, 也根本沒有把靜態資源放入到 WEB-INF 的查詢結果。

現在只一種情況會攔截靜態資源: jpg, gif, css, js 等,就是 "/";

1. 激活Tomcat的defaultServlet來處理靜態文件:

在web.xml的 DispatcherServlet 前輸入下面的內容;

<!-- 靜態資源 -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

每個后綴獨立配置;這樣就能正常的訪問靜態資源了;

不同的servlet 容器或服務器,處理這些靜態資源的名稱不一樣:

Tomcat, Jetty, JBoss, and GlassFish  默認 Servlet的名字 -- "default"
Google App Engine 默認 Servlet的名字 -- "_ah_default"
Resin 默認 Servlet的名字 -- "resin-file"
WebLogic 默認 Servlet的名字  -- "FileServlet"
WebSphere  默認 Servlet的名字 -- "SimpleFileServlet" 

2. 從 spring 3.0.4 提供 <resources /> 或 <mvc:resource />

<mvc:resources mapping="/img/**" location="/imaegs/" />

那頁面上的靜態資源就可以這樣訪問,比如圖片: 

<img src="http://127.0.0.1:8080/proj/img/abc.jpg" alt="" />

mapping是寫在頁面上的靜態資源前綴,location 是指向的文件夾位置;

3. 第三種就是使用 <default-servlet-handler /> 或 <mvc:default-servlet-handler />

    Spring 會把一些找不到 controller 的請求,放給默認的 servlet 容器來處理;從而能正常訪問靜態資源;

4. 如果 *.do 這樣的攔截規則,配置上面的 servlet 處理資源 default 方式跟 resources配置 , 都是沒有效果的,但都能以原文件夾路徑正常訪問!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM