Spring-MVC理解之二:前置控制器


一、前置控制器配置與講解  

  上篇中理解了IOC容器的初始化時機,並理解了webApplicationContext和SevletContext和servlet的param等的概念和關系。

  現在記錄,如何配置前置控制器:

    <servlet>
        <servlet-name>MainServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring/applicationContext-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MainServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

  對於url-pattern配置成*.do等形式的前置控制器配置,不記錄了,只記錄REST風格的配置。

  <url-pattern>/</url-pattern>這種方式的配置,那么tomcat會把所有訪問該應用的請求都分配給org.springframework.web.servlet.DispatcherServlet來進行處理。

package com.brolanda.educloud.core.login.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping(value="/login")
public class LoginController {
    @RequestMapping(value="/validate",method=RequestMethod.GET)
    public String validateUser(){
        return "home/home";
    }
}

我們在系統內創建一個controller,並配置對應的url請求路徑,其中在Controller上配置的@RequestMapping(value="/login"),是說http://ip:port/app/login的request都轉到這個控制器上,然后在validateUser方法上配置的 @RequestMapping(value="/validate",method=RequestMethod.GET),是告訴前置控制器,http://ip:port/app/login/validta的request請求都轉向LoginController 的validateUser()方法進行處理。

二、靜態資源配置

  ok,到此,理解了前置控制器對請求的轉發,與使用注解的方式標注Controller。那么問題來了,所有的請求都會轉給前置控制器,而前置控制器的工作原理就是針對每個請求找到相應的Controller進行處理,並返回消息。那么,針對靜態資源的請求,前置控制器就只好報異常了,因為它確實找不到。

  所以,我們需要告訴靜態資源的請求如何處理,有兩種方式:

方式一:使用容器的默認處理器。

<mvc:default-servlet-handler />

此配置告訴DispatcherServlet,對於找不到Controller的請求,就把它交給tomcat的默認處理器就行處理,而tomcat的默認處理器會把請求的資源返回給客戶端。

方式二:在前置控制器的配置文件中指明靜態資源的請求路徑,該路徑下的請求一律直接返回資源即可。

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

此配置告訴DispatcherServlet,任何http://ip:port/app/resources/**的請求都將其定位到/resources/目錄下,並尋找對應的目錄文件,作為資源文件返回給客戶端。

  其中,兩個*,它表示映射resources/下所有的URL,包括子路徑(即接多個/)。

例如:

1. 訪問,瀏覽器顯示webapp/resources/test.png

2. 訪問,瀏覽器顯示webapp/resources/scripts/test.js

3. 訪問,瀏覽器顯示webapp/resources/css/2012/test.css

  三種訪問url,如果只配一個*就只第一個能訪問,現在配置兩個*那么1、2、3均可訪問。

 

三、視圖配置

  controller可以返回很多類型的信息,目前我用到的就是json、和jsp,那么,如果返回的jsp,我們需要如何配置呢?

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="jspViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/resources/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

  prefix是前綴信息,suffix是后綴信息

  controller處理完之后,返回了login,那么會返回客戶端http://ip:port/app/resources/jsp/login.jsp頁面信息。

 

至此,spring-mvc基礎配置完成

 


免責聲明!

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



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