SpringMVC簡介:SpringMVC也叫Spring Web mvc,屬於表現層的框架。Spring MVC是Spring框架的一部分,是在Spring3.0後發佈的css
Spring結構圖html
SpringMVC請求流程圖前端
SpringMVC請求流程圖語述:java
request-------->DispatcherServler(中央調度器/前端控制器)-----> HandlerMapping(處理器映射器)------>返回一個執行鏈----->將執行鏈轉交給HandlerAdaptor(處理器適配器)----->調度Handler(處理器)-----> ModelAndView----->先將結果交給HandlerAdaptor,而後再由HandlerAdaptor轉交給 DispatcherServler--------->DispatcherServler調度ViewResolver(視圖解析器)---->交給DispatcherServler-------> 尋找View---->View作出響應(response)web
SpringMVC的第一個入門案例spring
用戶提交一個請求,服務器端處理器在接收到這個請求後,給出一條歡迎信息,在頁面中顯示。編程
第一步:導入jar包spring-mvc
在原有Springjar包基礎上添加2個jar包緩存
spring-webmvc-4.2.0.RELEASE.jar 做用:對Spring mvc的實現服務器
spring-context-support-4.2.0.RELEASE.jar 做用:包含支持UI模板,郵件服務,緩存Cache等方面的類
分析配置步驟:
1.在web.xml中配置前端控制器
2.處理器映射器(HandlerMapping)
3.處理器適配器 (HandlerAdaptor)
4.處理器
5.視圖解析器(ViewResolver)
註冊中央調度器
關於urlpattern的說法:
最好配成*.do
不能配成/* 沒法訪問*.jsp等動態資源
最好也不要配成/ 沒法訪問靜態資源
不得不配成/ Restful編程 rest
問題:/*配法出現404問題
解釋:Ⅰ:不能配置爲/*
DispatcherServlet會將向動態頁面請求,即向jsp頁面的跳轉請求也當作是一個普通的Controller請求。
中央調度器會調用處理器映射器爲其查找相應的處理器。固然是找不到的。jsp頁面會報404錯誤 結論:/*會攔截動態資源
Ⅱ:方案一:使用Tomcat默認的Servlet解決
不得不配成/ 解釋:上圖中:紅色標註第三中配置
方案二:使用MVC的default-servlet-handler
會將對靜態資源的訪問請求經過HandlerMapping映射到默認Servlet請求處理器DefaultServletRequestHandler對象。而該處理器調用了Tomcat的DefaultServlet來處理靜態資源的訪問請求。固然須要引入mvc約束
方式三:使用MVC的resource解決
在Spring3.0.4以後,Spring定義了專門用於處理靜態資源請求的處理器ResourceHttpRequestHandler。而且添加了<mvc:resources/>標籤,專門用於解決靜態資源沒法訪問問題。
Location:靜態資源所在目錄 mapping: 對資源的請求 注意:須要Tomcat7支持
<?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"> <display-name></display-name> <!-- 1. 配置中央調度器(前端控制器) --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 3.1指定配置文件applicationContext.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <!-- 3.2Tomcat啓動的時候,Service對象已經到內存 下面該數字要大於等於1,0或者是負數,跟沒設置是同樣的 --> <load-on-startup>1</load-on-startup> </servlet> <!-- 第一種,能夠查看圖片 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!--第二種配置 和applicationContext.xml中的<mvc:default-servlet-handler/> 結合使用--> <!--<servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> --> <!-- 第三種配置 <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.JPG</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
定製處理器:
package cn.happy.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; //一個類怎麼就能成爲一個Controller public class YController implements Controller{//處理器 //handleRequest 處理請求 //ModelAndView 返回值類型 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mv=new ModelAndView(); mv.addObject("msg", "明天放假一天"); //處理一道 //mv.setViewName("WEB-INF/jsp/index.jsp"); mv.setViewName("index"); return mv; } }
jsp頁面搭建:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> </head> <body> 第一個Springmvc程序 <!-- 頁面上如何獲取 --> <img alt="girl" src="images/18.jpg" width="300px" height="300px"> ${msg } </body> </html>
大配置中:註冊處理器和視圖解析器
訪問頁面:
配置式開發--BeanNameUrlHandlerMapping
配置式開發--SimpleUrlHandlerMapping
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- 配置處理器映射器 --> <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> </bean> --> <!-- 註冊處理器映射器 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello.do">firstController</prop> <prop key="/say.do">firstController</prop> </props> </property> </bean> <!-- 註冊處理映射器 --> <!-- <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> <map> <entry key="/hello.do"> <value>firstController</value> </entry> <entry key="/say.do"> <value>firstController</value> </entry> </map> </property> </bean> --> <bean id="firstController" class="cn.happy.controller.YController"></bean> <!-- 處理/請求路徑下靜態資源沒法訪問的問題 --> <!-- <mvc:default-servlet-handler/> --> <!-- 方案四:TOmcat7的支持 --> <!-- <mvc:resources location="/images/" mapping="/images/**"></mvc:resources> --> <!-- 註冊處理器 請求地址--> <!-- 該配置須要和 Controller中的mv.setViewName全路徑--> <bean id="/hello.do" class="cn.happy.controller.YController"></bean> <!-- 視圖解析器 ViewResolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前綴 jstl struts2 --> <property name="prefix" value="/WEB-INF/jsp/"></property> <!--後綴 --> <property name="suffix" value=".jsp"></property> </bean> </beans>