Spring MVC入門<一>

核心類與接口: css

 

先來了解一下,幾個重要的接口與類。如今不知道他們是幹什麼的不要緊,先混個臉熟,爲之後認識他們打個基礎。 web

 

DispatcherServlet   -- 前置控制器 spring

 

HandlerMapping接口 -- 處理請求的映射 mvc

HandlerMapping接口的實現類: app

SimpleUrlHandlerMapping  經過配置文件,把一個URL映射到Controller 框架

DefaultAnnotationHandlerMapping  經過註解,把一個URL映射到Controller類上 jsp

 

HandlerAdapter接口 -- 處理請求的映射 url

AnnotationMethodHandlerAdapter類,經過註解,把一個URL映射到Controller類的方法上 spa

 

Controller接口 -- 控制器 orm

因爲咱們使用了@Controller註解,添加了@Controller註解註解的類就能夠擔任控制器(Action)的職責,

因此咱們並無用到這個接口。

 

 

 

HandlerInterceptor 接口--攔截器

無圖,咱們本身實現這個接口,來完成攔截的器的工做。

 

 

ViewResolver接口的實現類

UrlBasedViewResolver類 經過配置文件,把一個視圖名交給到一個View來處理

InternalResourceViewResolver類,比上面的類,加入了JSTL的支持

 

View接口

JstlView類

 

LocalResolver接口

 

HandlerExceptionResolver接口 --異常處理

SimpleMappingExceptionResolver實現類

 

 

ModelAndView類

無圖。

 

DispatcherServlet說明

 

使用Spring MVC,配置DispatcherServlet是第一步。

DispatcherServlet是一個Servlet,因此能夠配置多個DispatcherServlet。

DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規則要自已定義,把攔截下來的請求,依據某某規則分發到目標Controller(咱們寫的Action)來處理。

 

「某某規則」:是根據你使用了哪一個HandlerMapping接口的實現類的不一樣而不一樣。

 

先來看第一個例子:

Xml代碼   收藏代碼
  1. <web-app>  
  2.     <servlet>  
  3.         <servlet-name>example</servlet-name>  
  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.         <load-on-startup>1</load-on-startup>  
  6.     </servlet>  
  7.     <servlet-mapping>  
  8.         <servlet-name>example</servlet-name>  
  9.         <url-pattern>*.form</url-pattern>  
  10.     </servlet-mapping>  
  11. </web-app>  

 <load-on-startup>1</load-on-startup>是啓動順序,讓這個Servlet隨Servletp容器一塊兒啓動。

 <url-pattern>*.form</url-pattern> 會攔截*.form結尾的請求。

 

 <servlet-name>example</servlet-name>這個Servlet的名字是example,能夠有多個DispatcherServlet,是經過名字來區分的。每個DispatcherServlet有本身的WebApplicationContext上下文對象。同時保存的ServletContext中和Request對象中,關於key,之後說明。

 

在DispatcherServlet的初始化過程當中,框架會在web應用的 WEB-INF文件夾下尋找名爲[servlet-name]-servlet.xml 的配置文件,生成文件中定義的bean。

 

 

第二個例子:

Xml代碼   收藏代碼
  1. <servlet>  
  2.     <servlet-name>springMVC</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>contextConfigLocation</param-name>  
  6.         <param-value>classpath*:/springMVC.xml</param-value>  
  7.     </init-param>  
  8.     <load-on-startup>1</load-on-startup>  
  9. </servlet>  
  10. <servlet-mapping>  
  11.     <servlet-name>springMVC</servlet-name>  
  12.     <url-pattern>/</url-pattern>  
  13. </servlet-mapping>  

指明瞭配置文件的文件名,不使用默認配置文件名,而使用springMVC.xml配置文件。

其中<param-value>**.xml</param-value> 這裏可使用多種寫法
一、不寫,使用默認值:/WEB-INF/<servlet-name>-servlet.xml
二、<param-value>/WEB-INF/classes/springMVC.xml</param-value>
三、<param-value>classpath*:springMVC-mvc.xml</param-value>
四、多個值用逗號分隔

 


Servlet攔截匹配規則能夠自已定義,攔截哪一種URL合適? 
當映射爲@RequestMapping("/user/add")時,爲例:


一、攔截*.do、*.htm, 例如:/user/add.do

這是最傳統的方式,最簡單也最實用。不會致使靜態文件(jpg,js,css)被攔截。

 

二、攔截/,例如:/user/add

能夠實現如今很流行的REST風格。不少互聯網類型的應用很喜歡這種風格的URL。

弊端:會致使靜態文件(jpg,js,css)被攔截後不能正常顯示。想實現REST風格,事情就是麻煩一些。後面有解決辦法還算簡單。

 

三、攔截/*,這是一個錯誤的方式,請求能夠走到Action中,但轉到jsp時再次被攔截,不能訪問到jsp。

相關文章
相關標籤/搜索