springMVC學習二 原始springMVC環境搭建
第一步:導入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環境搭建