1. 程式人生 > >springMVC學習二 原始springMVC環境搭建

springMVC學習二 原始springMVC環境搭建

key 關系 work XML 配置文件信息 enc 返回 print image

第一步:導入jar包

技術分享圖片

第二步:配置DispatcherServlet

  DispatcherServlet本質是一個Servlet,在spring-webmvc包中,在servlet2.5之前 springMVC配置文件的默認命名規則為xxx-serlvet.xml,xxx是為DispatcherServlet起的servlet的名稱,也就是<servlet-name>標簽中的值,並且默認情況下,xxx-servlet.xml文件的位置是WEB-INF目錄下,不過從servlet2.5之後可以通過servlet的初始化參數進行配置,也就是通過<init-param>標簽來配置,

【註意:在spring與dynamic web project工程進行整合事,有一個spring的配置文件加載位置的配置,是通過web應用工程的配置信息,也就是<context-param>標簽來配置】

org.springframework.web.servlet.DispatcherServlet的繼承關系圖

技術分享圖片

配置文件信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <servlet> <!-- DispatcherServlet本質是一個Servlet,在spring-webmvc包下,在servlet2.5之前 springMVC配置文件的默認命名規則為xxx-serlvet.xml,xxx是為DispatcherServlet起的servlet的名稱, 也就是<servlet-name>標簽中的值,並且默認情況下,xxx-servlet.xml文件的位置是WEB-INF目錄下 不過從servlet2.5之後可以通過servlet的初始化參數進行配置,也就是通過<init-param>標簽來配置, 【註意:在spring與dynamic web project工程進行整合事,有一個spring的配置文件加載位置的配置, 是通過web應用工程的配置信息,也就是<context-param>標簽來配置】 org.springframework.web.servlet.DispatcherServlet
--> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 修改springMVC配置文件的路徑和名稱 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 自啟動配置,表示在tomcat一啟動,就加載該Servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

第三步;配置SpringMVC配置文件

springMVC配置文件中要配置,

(1)處理器handler,也就是controller,處理器部門是需要程序員自己編寫代碼,繼承一個Controller接口,或者采用Controller與RequestMapping註解,處理器是處理器適配器(HandlerAdapter)調用的,

(2)處理器映射器HanderMapping,本質是一個對一個Map容器進行封裝,把key是請求路徑,value是處理器,就是把請求路徑和處理器做了一個對應,處理器映射器是DispatcherServlet調用的,調用完之後會返回一個HanderExecutionChain,另外一種說法是HandlerMapping 將會把請求映射為HandlerExecutionChain 對象,HanderExecutionChain會封裝一個Handler 處理器(頁面控制器)對象、多個HandlerInterceptor 攔截器

(3)處理器適配器HanderAdapter,也是由DispaterServlet進行調用,HandlerAdapter 將會把處理器包裝為適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持很多類型的處理器; 【如果不配置處理器映射器,會采用默認的,可以不用配置】

(4)視圖解析器:也是又DsipatcherServlet進行調用,把ModelAndView進行解析,返回Veiw給DispaterServlet。【如果不配置,采用默認的】

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd"> 
    
    <!-- 註冊  處理器,也就是controller -->
    <bean id="handler" class="com.xxxx.controller.DemoController"></bean>
    
    
    <!-- 註冊HandlerMapping  處理器映射器
        會根據url請求解析出應該調用哪一個 處理器,但是調用並不是處理器映射器調用
     -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">
            <map>
                <!-- key解析出來的請求的邏輯名
                    value-ref代表要調用的控制器
                 -->
                <entry key="demo" value-ref="handler" ></entry>
            </map>
        </property>
    </bean>
    <!-- 註冊  處理器適配器,處理器適配器會調用  處理器 
        處理器適配器可以不用配置,會走默認值
    -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

    <!-- 在spring容器中 ,註冊視圖解析器
        同樣視圖解析器也可以不用配置,也會走默認值
        InternalResourceViewResolver的父類中有兩個屬性:prefix,suffix  代表前綴和後綴
        ModelAndView modelAndView =new ModelAndView("main");
        前綴和後綴會對ModelAndView中的參數進行拼接,拼接成"/main.jsp",
        一般請情況下,我們會使用默認的視圖解析器,但是有時候我們會在WebContent下建立一個page目錄用來存放
        jsp文件,此時在寫ModelAndView modelAndView =new ModelAndView("main.jsp");是,需要前面加上
        page/main.jsp,為了省略page/一般會把prefix配置成page/
        
        在返回ModelAndView時,默認會走請求轉發,在InternalResourceViewResolver父類UrlBasedViewResolver
        中有
        public static final String REDIRECT_URL_PREFIX = "redirect:";
        public static final String FORWARD_URL_PREFIX = "forward:";
        可以通過配置讓其走重定向
        
     -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

第四步:編寫處理器,也就是controller

public class DemoController implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("執行了springmvc的控制器");
        //具備視圖和傳值的功能
        ModelAndView modelAndView =new ModelAndView("main");
        
        return modelAndView;
    }

}

第五步:運行

讓項目跑在tomcat中,然後通過:http://localhost:8080/springmvc01/demo進行訪問,會執行DemoController中的handleRequest()這個方法。

註意訪問路徑中的demo,這個值就是在springmvc配置文件中,處理器映射器的中urlMap中的一個key

 

springMVC學習二 原始springMVC環境搭建