SpringMVC 入門案例
阿新 • • 發佈:2018-11-08
SpringMVC的元件
前端控制器(DispatcherServlet)
本質上是一個Servlet,相當於一箇中轉站,所有的訪問都會走到這個Servlet中,再根據配置進行中轉到相應的Handler(Controller)中進行處理,獲取到資料和檢視後,在使用相應檢視做出響應。
處理器對映器(HandlerMapping)
本質上就是一段對映關係,將訪問路徑和對應的Handler(Controller)儲存為對映關係,在需要時供前端控制器查閱。
處理器介面卡(HandlerAdapter)
本質上是一個介面卡,可以根據要求找到對應的Handler(Controller)來執行。前端控制器通過處理器對映器找到對應的Handler資訊之後,將請求響應和對應的Handler資訊交由處理器介面卡處理,處理器介面卡找到真正handler執行後,將結果即model和view返回給前端控制器
檢視解析器(ViewResolver)
本質上也是一種對映關係,可以將檢視名稱對映到真正的檢視地址。前端控制器呼叫處理器適配完成後得到model和view,將view資訊傳給檢視解析器得到真正的view。
圖解
SpringMVC入門案例
建立web專案,並匯入SpringMVC相關開發包
配置前段控制器
本質上是一個servlet,在當前web專案中配置該servlet
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
生成SpringMVC的核心配置檔案
SpringMVC會自動去尋找 [前端控制前ServletName]-servlet.xml
建立這個檔案,這個檔案本身其實就是Spring的配置檔案,所以匯入Spring相關的約束資訊,包括 beans、context、mvc
<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> </beans>
建立控制器,編寫程式碼
想要開發一個控制器,寫一個類實現Controller介面,在其中的handlerRequest中編寫程式碼處理請求,並將處理好的資料和目標檢視封裝到ModelAndView中返回
package cn.tedu.springmvc.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 Hello implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { // 1.建立 modelandview 物件 ModelAndView mav = new ModelAndView(); // 2.封裝資料 mav.addObject("msg1","hello,world"); mav.addObject("msg2", "hello,springmvc"); // 3.封裝檢視 mav.setViewName("hello"); //4.返回ModelAndVeiw return mav; } }
配置處理器對映器中的路徑和處理器的對映關係
<!-- 配置處理器對映器的路徑和控制器的對映關係 --> <bean name="/hello.action" class="cn.tedu.springmvc.controller.Hello"></bean>
配置檢視解析器
通過在檢視名稱中加入字首(prefix)和字尾(suffix),得到真正的檢視地址。
<!-- 配置檢視解析器中 檢視名稱 和 真正檢視頁面的對映關係 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF"></property> <property name="suffix" value=".jsp"></property> </bean>
開發檢視
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> </head> <body> welcome! <hr> <p>${msg1}</p> <p>${msg2}</p> <%=new Date() %> </body> </html>
釋出應用,通過瀏覽器訪問
原始碼
原始碼
package cn.tedu.springmvc.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 Hello implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { // 1.建立 modelandview 物件 ModelAndView mav = new ModelAndView(); // 2.封裝資料 mav.addObject("msg1","hello,world"); mav.addObject("msg2", "hello,springmvc"); // 3.封裝檢視 mav.setViewName("hello"); //4.返回ModelAndVeiw return mav; } }Hello.java
<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 配置處理器對映器的路徑和控制器的對映關係 --> <bean name="/hello.action" class="cn.tedu.springmvc.controller.Hello"></bean> <!-- 配置檢視解析器中 檢視名稱 和 真正檢視頁面的對映關係 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>springmvc-servlet.xml
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> </head> <body> welcome! <hr> <p>${msg1}</p> <p>${msg2}</p> <%=new Date() %> </body> </html>hello.jsp
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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:/springmvc-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> </web-app>web.xml