搭建SSM框架之SpringMVC
一、SpringWebMVC概述:
SpringWebMVC簡稱SpringMVC
SpringMVC就是Spring框架提供的一個模塊,通過實現MVC模式來很好地將數據、業務與展現進行分離,SpringMVC框架的目的是要簡化我們日常的Web開發。
二、SpringMVC框架的核心組件:
1.DispatcherServlet: 前端控制器,用來過濾客戶端發送過來,想要進行邏輯處理的請求。
2.Controller/Headler: 控制器/處理器。開發人員自定義,用來處理用戶請求的,並且處理完成之後返回給用戶指定視圖的對象。
3.HandlerMapping: 處理器映射器。DispatcherServlet接收到客戶端請求的URL之後,根據一定的匹配規則,再把請求轉發給對應的Handler,這個匹配規則由HandlerMapping決定。
4.HandlerAdaptor:處理器適配器。處理器適配器用來適配每一個要執行的Handler對象。通過HandlerAdapter可以支持任意的類作為處理器。
5.ViewResolver:視圖解析器。Handler返回的是邏輯視圖名,需要有一個解析器能夠將邏輯視圖名轉換成實際的物理視圖。而且Spring的可擴展性決定了視圖可以由很多種,所以需要不同的視圖解析器,解析不同的視圖。但是一般由jsp充當視圖的情況居多
SpringMVC框架提供一個核心的Servlet對象(DispatcherServlet,前端控制器)來對服務器接收到的請求進行解析,當這個請求被DispatcherServlet獲取到之後,DispatherServlet需要根據HandlerMapping對象的映射關系,將這個請求轉交給真正能夠處理客戶端請求的Controller控制器(我們要寫的就是這個東西,相當於之前的servlet)來處理。Controller處理完成後返回ModelAndView對象,也就是模型和視圖的結合體。ViewResolver視圖解析器根據ModelAndView中的邏輯視圖名找到真正的物理視圖,同時使用ModelAndView中模型裏面的數據對視圖進行渲染。最後把準備好的視圖展現給用戶
3.SpringMVC框架在項目中的搭建
第一步:構建Web項目
第二步:導入所需jar包
第三步:配置前端控制器DispatcherServlet
第四步:編寫Controller控制器(也稱為Handler處理器)
第五步:配置處理器映射器(可省去,有默認配置)
第六步:配置處理器適配器(可省去,有默認配置)
第七步:配置視圖解析器(可省去,有默認配置,但是前綴和後綴都為"")
第八步:配置控制器/處理器
例子:
所需要的jar包:
配置前端控制器:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>springmvc</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- springweb提供的編碼過濾器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置springmvc中的前端控制器 --> <!-- 指定需要讀取的springmvc配置文件 --> <!-- 如果不指定,前端控制器也會自動讀取一個固定位置、固定名字的配置文件: --> <!-- /WEB-INF/[servlet-name]-servlet.xml --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-web-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
編寫Controller控制器:
package com.briup.web.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("HelloController handleRequest().."); //和之前一樣處理請求 //最後就不是跳轉頁面了,而是返回一個ModelAndView對象 //ModelAndView對象中包含了模型中的數據,也包含了邏輯視圖名 ModelAndView mv = new ModelAndView(); //設置模板中的數據 mv.addObject("name", "tom"); //設置邏輯視圖名 mv.setViewName("hello"); return mv; } }
配置處理器映射器
配置處理器適配器
配置視圖解析器
配置控制器/處理器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 配置映射器 --> <!-- 作用:告訴前端控制器,什麽樣的url對應什麽樣的Controller --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 配置適配器 --> <!-- 作用:告訴前端控制器,需要調用Controller中的哪個方法 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 配置視圖解析器 --> <!-- 作用:告訴前端控制器,怎樣把邏輯視圖名轉換為具體的視圖路徑 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 設置視圖中對jstl標簽庫的支持 --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 設置邏輯視圖名的前綴 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 設置邏輯視圖名的後綴 --> <property name="suffix" value=".jsp"/> </bean> <!-- 配置控制器/處理器 --> <bean name="/hello.action" class="com.briup.web.controller.HelloController"></bean> </beans>
搭建SSM框架之SpringMVC