国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

SpringMVC介紹

2019-11-14 15:40:55
字體:
來源:轉載
供稿:網(wǎng)友

一、SPRing Web MVC簡介
     Spring Web MVC是一種基于java的實現(xiàn)了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基于請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發(fā),Spring Web MVC也是要簡化我們日常Web開發(fā)的。
二、Spring Web MVC優(yōu)勢
1、清晰的角色劃分:前端控制器(DispatcherServlet)、請求到處理器映射(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器(   Validator)、命令對象(Command  請求參數(shù)綁定到的對象就叫命令對象)、表單對象(Form Object 提供給表單展示和提交到的對象就叫表單對象)。
2、分工明確,而且擴展點相當靈活,可以很容易擴展,雖然幾乎不需要;
3、由于命令對象就是一個POJO,無需繼承框架特定API,可以使用命令對象直接作為業(yè)務對象;
4、和Spring 其他框架無縫集成,是其它Web框架所不具備的;
5、可適配,通過HandlerAdapter可以支持任意的類作為處理器;
6、可定制性,HandlerMapping、ViewResolver等能夠非常簡單的定制;
7、功能強大的數(shù)據(jù)驗證、格式化、綁定機制;
8、利用Spring提供的Mock對象能夠非常簡單的進行Web層單元測試;
9、本地化、主題的解析的支持,使我們更容易進行國際化和主題的切換。
10、強大的jsp標簽庫,使JSP編寫更容易。
三、Spring Web MVC處理請求的流程

1用戶發(fā)送請求給前端控制器(DispatcherServlet) 2前端控制器講請求委托給頁面控制器/處理器 3處理器調用業(yè)務對象處理請求,業(yè)務對象處理完成請求后返回模型數(shù)據(jù)給處理器 4處理器將得到的ModelAndView(模型數(shù)據(jù)和試圖邏輯名)返回給前端控制器 5前端控制器將模型數(shù)據(jù)傳給視圖并渲染視圖 6前端控制器收回控制權,并將視圖響應給用戶
四、Hello World入門
1、前端控制器的配置
在web.xml中添加如下配置:

Java代碼 復制代碼 收藏代碼
  1. <servlet>    
  2.     <servlet-name>chapter2</servlet-name>    
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
  4.     <load-on-startup>1</load-on-startup>    
  5. </servlet>    
  6. <servlet-mapping>    
  7.     <servlet-name>chapter2</servlet-name>    
  8.     <url-pattern>/</url-pattern>    
  9. </servlet-mapping>    
<servlet>      <servlet-name>chapter2</servlet-name>      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>      <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>      <servlet-name>chapter2</servlet-name>      <url-pattern>/</url-pattern>  </servlet-mapping>  

load-on-startup:表示啟動容器時初始化該Servlet; url-pattern:表示哪些請求交給Spring Web MVC處理, “/” 是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。 自此請求已交給Spring Web MVC框架處理,因此我們需要配置Spring的配置文件,默認DispatcherServlet會加載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例為WEB-INF/ chapter2-servlet.xml。
2、Spring配置文件中配置HandlerMapping、HandlerAdapter 具體配置在WEB-INF/ chapter2-servlet.xml文件中

Java代碼 復制代碼 收藏代碼
  1. <!-- HandlerMapping -->    
  2. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>    
  3.      
  4. <!-- HandlerAdapter -->    
  5. <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>   
<!-- HandlerMapping -->  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>     <!-- HandlerAdapter -->  <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 

BeanNameUrlHandlerMapping:表示將請求的URL和Bean名字映射,如URL為 “上下文/hello”,則Spring配置文件必須有一個名字為“/hello”的Bean,上下文默認忽略。 SimpleControllerHandlerAdapter:表示所有實現(xiàn)了org.springframework.web.servlet.mvc.Controller接口的Bean可以作為Spring Web MVC中的處理器。如果需要其他類型的處理器可以通過實現(xiàn)HadlerAdapter來解決。
3、在Spring配置文件中配置ViewResolver
具體配置在WEB-INF/ chapter2-servlet.xml文件中:

Java代碼 復制代碼 收藏代碼
  1. <!-- ViewResolver -->    
  2. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    
  3.     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>    
  4.     <property name="prefix" value="/WEB-INF/jsp/"/>    
  5.     <property name="suffix" value=".jsp"/>    
  6. </bean>    
<!-- ViewResolver -->  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>      <property name="prefix" value="/WEB-INF/jsp/"/>      <property name="suffix" value=".jsp"/>  </bean>  

InternalResourceViewResolver:用于支持Servlet、JSP視圖解析;     viewClass:JstlView表示JSP模板頁面需要使用JSTL標簽庫,classpath中必須包含jstl的相關jar包;     prefix和suffix:查找視圖頁面的前綴和后綴(前綴[邏輯視圖名]后綴),比如傳進來的邏輯視圖名為hello,則該該jsp視圖頁面應該存放在“WEB-INF/jsp/hello.jsp”;
4、開發(fā)處理器/頁面控制器

Java代碼 復制代碼 收藏代碼
  1. package cn.javass.chapter2.web.controller;    
  2. import javax.servlet.http.HttpServletRequest;    
  3. import javax.servlet.http.HttpServletResponse;    
  4. import org.springframework.web.servlet.ModelAndView;    
  5. import org.springframework.web.servlet.mvc.Controller;    
  6. public class HelloWorldController implements Controller {    
  7.     @Override    
  8.     public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {    
  9.        //1、收集參數(shù)、驗證參數(shù)    
  10.        //2、綁定參數(shù)到命令對象    
  11.        //3、將命令對象傳入業(yè)務對象進行業(yè)務處理    
  12.        //4、選擇下一個頁面    
  13.        ModelAndView mv = new ModelAndView();    
  14.        //添加模型數(shù)據(jù) 可以是任意的POJO對象    
  15.        mv.addObject("message", "Hello World!");    
  16.        //設置邏輯視圖名,視圖解析器會根據(jù)該名字解析到具體的視圖頁面    
  17.        mv.setViewName("hello");    
  18.        return mv;    
  19.     }    
  20. }    
package cn.javass.chapter2.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 HelloWorldController implements Controller {      @Override      public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {         //1、收集參數(shù)、驗證參數(shù)         //2、綁定參數(shù)到命令對象         //3、將命令對象傳入業(yè)務對象進行業(yè)務處理         //4、選擇下一個頁面         ModelAndView mv = new ModelAndView();         //添加模型數(shù)據(jù) 可以是任意的POJO對象         mv.addObject("message", "Hello World!");         //設置邏輯視圖名,視圖解析器會根據(jù)該名字解析到具體的視圖頁面         mv.setViewName("hello");         return mv;      }  }  

org.springframework.web.servlet.mvc.Controller:頁面控制器/處理器必須實現(xiàn)Controller接口,注意別選錯了;后邊我們會學習其他的處理器實現(xiàn)方式; public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能處理方法,實現(xiàn)相應的功能處理,比如收集參數(shù)、驗證參數(shù)、綁定參數(shù)到命令對象、將命令對象傳入業(yè)務對象進行業(yè)務處理、最后返回ModelAndView對象; ModelAndView:包含了視圖要實現(xiàn)的模型數(shù)據(jù)和邏輯視圖名;“mv.addObject("message", "Hello World!"); ”表示添加模型數(shù)據(jù),此處可以是任意POJO對象;“mv.setViewName("hello");”表示設置邏輯視圖名為“hello”,視圖解析器會將其解析為具體的視圖,如前邊的視圖解析器InternalResourceVi。wResolver會將其解析為“WEB-INF/jsp/hello.jsp”。
我們需要將其添加到Spring配置文件(WEB-INF/chapter2-servlet.xml),讓其接受Spring IoC容器管理:

Java代碼 復制代碼 收藏代碼
  1. <!-- 處理器 -->    
  2. <bean name="/hello" class="cn.javass.chapter2.web.controller.HelloWorldController"/>    
<!-- 處理器 -->  <bean name="/hello" class="cn.javass.chapter2.web.controller.HelloWorldController"/>  

name="/hello":前邊配置的BeanNameUrlHandlerMapping,表示如過請求的URL為 “上下文/hello”,則將會交給該Bean進行處理。
5、開發(fā)視圖頁面 創(chuàng)建 /WEB-INF/jsp/hello.jsp視圖頁面:

Java代碼 復制代碼 收藏代碼
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>    
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">    
  3. <html>    
  4. <head>    
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    
  6. <title>Hello World</title>    
  7. </head>    
  8. <body>    
  9. ${message}    
  10. </body>    
  11. </html>    
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  <title>Hello World</title>  </head>  <body>  ${message}  </body>  </html>  

${message}:表示顯示由HelloWorldController處理器傳過來的模型數(shù)據(jù)。
通過請求:http://localhost:9080/springmvc-chapter2/hello,如果頁面輸出“Hello World! ”就表明我們成功了!
五、Spring MVC核心開發(fā)步驟:

1、  DispatcherServlet在web.xml中的部署描述,從而攔截請求到Spring Web MVC

2、  HandlerMapping的配置,從而將請求映射到處理器

3、  HandlerAdapter的配置,從而支持多種類型的處理器

4、  ViewResolver的配置,從而將邏輯視圖名解析為具體視圖技術

5、處理器(頁面控制器)的配置,從而進行功能處理


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 都兰县| 南开区| 黄平县| 青州市| 台中县| 楚雄市| 寿宁县| 宾川县| 温泉县| 凤台县| 湖州市| 紫金县| 康马县| 铜川市| 夏河县| 林西县| 玉环县| 松原市| 醴陵市| 武城县| 舟山市| 巨鹿县| 遂宁市| 吉林省| 福贡县| 姜堰市| 枝江市| 朝阳区| 沁阳市| 田东县| 庆安县| 祁阳县| 万全县| 任丘市| 即墨市| 台州市| 出国| 全南县| 左云县| 屏东市| 衡山县|