• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      springMVC入門

       Ethan的博客 2011-07-11

      springMVC入門

      分類: spring系列 3054人閱讀 評論(17) 收藏 舉報

      看過請留個言,轉載請注明出處,尊重作者勞動成果,謝謝!

      作為一個J2EE的開發者,我們基本上是開發基于WEB的應用系統。事實上,工作流,狀態管理以及驗證都是需要解決的重要功能。而HTTP協議的無狀態性決定了這些功能都不容易實現。SpringWEB框架就是來幫助我們解決這些問題的。使用Spring,我們可以讓WEB框架自動將傳遞進來的請求參數填充到模型對象中,同時提供驗證和錯誤處理。還可以管理用戶在WEB表單中創建的對象的狀態。在了解SpringMVC之前,我們先來復習下MVC.

      MVC從邏輯上把應用分為模型組件,視圖組件和控制器組件。其中控制器組件又可以細分為:前端控制器組件和后端控制器組件。

       

      我們來看一下MVC的基本工作流程:

       

      首先是客戶端(通常是瀏覽器)發出一個請求。第一個接受這個請求的組件一般是一個前端控制器。它將不同的請求交給不同的后端控制器來處理,而在后端控制器里面又可以調用相應的模型對象來處理具體的業務邏輯,最后再返回一個特定的視圖響應給客戶端。

       

      怎么理解MVC呢? 我們舉一個現實的例子,前段時間地震太可怕了,全國人民都在上下一心抗震救災。我們敬愛的溫總理給武警司令下命令讓他完成抗震救災的艱巨任務,于是武警司 令就根據各地情況派遣不同類型的特種兵到不同的地區去,然后特種兵使用大大小小的工具完成了任務,最后上交給司令一份統計圖表,司令再上交給溫總理。我們 就來分析一下,這符不符合MVC的設計模式。這里呢,溫總理就是客戶端,武警司令就是前端控制器,特種兵就是后端控制器,特種兵所使用的工具就是模型,最后上交的統計圖表就是視圖。

       

      現在大家應該可以理解MVC的設計思想了。拿我們比較熟悉的struts框架來說,前端控制器就是ActionServlet,后端控制器就是Action.請求的URL和后端控制器的映射關系在struts-config.xml上的<action-mappings>里面配置,模型對象就是我們平常寫的DAO/DTO,返回的視圖類型一般就是jsp了。

       

      那么,在spring MVC中又是怎樣的呢?,我們先按上面對號入座地說一下。第一個接受這個請求的前端控制器叫DispatcherServlet,后端控制器叫Controller。負責處理請求URL和后端控制器映射的叫HandMapping,它有多種類型,比較靈活,也是在一個xml文件上進行配置。負責業務邏輯處理的模型對象一般也是我們平常寫的DAO/DTO組件。只是它最后的返回更靈活,Controller返回一個ModelAndView對象給DispatcherServletModelAndView可以攜帶一個視圖對象,也可以攜帶一個視圖對象的邏輯名。如果攜帶的是一個視圖對象的邏輯名,那DispatcherServlet需要一個ViewResolver來查找用于渲染回應的視圖對象。最后,DispatcherServlet將請求分派給ModelAndView對象指定的視圖對象。視圖對象負責渲染返回給客戶的回應。

       

             我們學習知識,一樣要注意運用類比遷移的方法。有人說,我學會了struts,但學不會springMVC。這是說不過去的。因為二者的思想完全一致。所以,我們只需要學習它們不一樣的地方就可以啦。好,我們現在先跑一個最簡單的例子,讓大家對構建SpringMVC的基本步驟有個直觀的認識。大家要邊跑邊跟struts做比較。

      (1)建立動態web工程,導入springjar包。

       

      (2)配置DispatcherServlet

       

      DispatcherServletSpringMVC的核心,將下面Servlet的注冊信息登記在web.xml中。一定要記住:Servlet跟伴侶一樣,要結婚,先得注冊登記!

      <servlet>

        <servlet-name>test</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

       </servlet>

       

       <servlet-mapping>

        <servlet-name>test</servlet-name>

        <url-pattern>*.do</url-pattern>

       </servlet-mapping>

       

      (3)編寫Controller,做核心配置文件,并配置urlController的映射

       

      package com.wepull.test;

       

      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{

          public ModelAndView handleRequest(HttpServletRequest request,

                    HttpServletResponse response) throws Exception {

                   request.setAttribute("hello", "welcome to spring!");

                   return new ModelAndView("welcome");

                  }

      }

      我們知道Struts有個XML格式的核心配置文件,springMVC當然也有,在WEB-INF下新建一XML文件:test-servlet.xml.注意,這里的test取決于servlet的名字.DispatcherServlet載入后,它將試圖從這個文件中載入應用上下文。

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd">

      <beans>

          <!--缺省映射處理器,不需要明確聲明,但聲明后就非常清楚使用的是哪個映射處理器  -->   <bean id="beanNameUrlMapping"

          class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

          </bean>

          <!-- 這里的name屬性有兩個職責,既定義Bean的名字,也定義需要這個控制器處理的URL樣式 -->

          <bean name="/hello.do"

             class="com.wepull.test.HelloController">

          </bean>

      </beans>

      上面可能有人奇怪,為什么不用id屬性,而設置name屬性。這里是因為URL中含有XML id屬性非法字符——特別是斜杠(/;

       

      (4)配置一個視圖解析器將控制器與JSP結合起來。

       

      將解析器的配置片段加到上面的test-servlet.xml中。

      <bean id="viewResolver"

          class="org.springframework.web.servlet.view.InternalResourceViewResolver">

             <property name="prefix" value="/WEB-INF/jsp/" />

             <property name="suffix" value=".jsp" />

      </bean>

      InternalResourceViewResolverModelAndView返回的視圖名前加上prefix屬性配置的前綴,再在最后加上suffix屬性配置的后綴。由于HelloController返回的ModelAndView中視圖名為welcome,所以InternalResourceViewResolver將在/WEB-INF/jsp/welcome.jsp處查找視圖。

       

      (5)編寫呈現給用戶的jsp文件。

       

      /WEB-INF/jsp/welcome.jsp

      <%@ page contentType="text/html; charset=UTF-8"%>

      <%@ page isELIgnored="false" %>

      <%@ taglib prefix="c" uri="http://java./jsp/jstl/core"%>

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">

      <html xmlns="http://www./1999/xhtml">

       <head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <title>Hello World!</title>

       </head>

       <body>

        <h2>

         ${hello}

        </h2>

       </body>

      </html>

       

      完成后啟動服務器,在瀏覽器地址欄上輸入http://locahost:8080/projectName/hello.do       就可以訪問了。

             對照一下,我們發現SpringMVCStruts大同小異。只是有兩處映射,SpringMVC做的相對靈活。哪兩處呢?

      (1) url和動作(后端控制器)的映射。

      springMVC里有個映射處理器(HandlerMapping)的概念。它實際上是一個處理器映射Bean,用來將一個控制器指定到一個URL上。Spring提供了三種有用的HandlerMapping的實現:

      —— BeanNameUrlHandlerMapping

             根據控制器的名字將控制器映射到URL

      —— SimpleUrlHandlerMapping

             用上下文配置文件中定義的屬性集合將控制器映射到URL

      —— CommonsPathMapHandlerMapping

             使用控制器代碼中的元數據將控制器映射到URL  

      (2) 邏輯視圖名和視圖對象的映射。

      springMVC里還有個視圖解析器(ViewResolver)的概念。它決定了ModelAndView對象的邏輯視圖名如何解析成一個用于將結果渲染給用戶的視圖Bean..Spring有四種ViewResolver實現:

      —— InternalResourceViewResolver

             將邏輯視圖名解析成一個用模板文件(JSPVelocity模板)渲染的視圖對象

      —— BeanNameViewResolver

             將邏輯視圖名解析成一個DispatcherServlet應用上下文中的視圖Bean

      —— ResourceBundleViewResolver

             將邏輯視圖名解析成一個ResourceBundler中的視圖對象

      —— XmlViewResolver

             從一個XML文件中解析視圖Bean,這個文件是從DispatcherServlet應用上下文中分離出來的。

             好啦,今天就算是SpringMVC的一個入門。建議大家將StrutsSpringMVC對照著學習,那樣效果會更好。與人分享,集思廣益。希望大家都能夠學習快樂,工作順心。下次再見。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 精品久久久久久无码国产| 人妻系列无码专区无码中出| 老熟妇性色老熟妇性| 忘忧草在线社区www中国中文| 日本熟妇XXXX潮喷视频| 欧美性大战久久久久XXX| 四虎国产精品永久在线| 熟妇人妻不卡中文字幕| 亚洲成av人片在www鸭子| 好男人好资源WWW社区| 色噜噜狠狠狠综合曰曰曰| 亚洲色大成网站WWW久久| 亚洲国产精品福利片在线观看| 亚洲精品国产中文字幕| 国产成人亚洲综合| 377P欧洲日本亚洲大胆| 日韩精品久久久肉伦网站| 成人免费AA片在线观看| 亚洲日韩欧洲无码AV夜夜摸| 真实国产老熟女无套中出| 久热这里只有精品12| 亚洲精品成人久久久| 亚洲欧美综合人成在线| 欧美人妻一区二区三区| AV最新高清无码专区| 久久人与动人物a级毛片| 欧美亚洲国产一区二区三区| 国产乱子伦视频在线播放| 天天躁日日躁狠狠躁婷婷| 午夜在线观看免费观看 视频| 116美女极品a级毛片| 久久6久久66热这里只是精品| 人妻少妇456在线视频| 丰满爆乳一区二区三区| 熟妇人妻一区二区三区四区| 午夜不卡欧美AAAAAA在线观看| 亚洲精品麻豆一区二区| 少妇久久久久久久久久| AV在线亚洲欧洲日产一区二区 | AV激情亚洲男人的天堂| 久久五十路丰满熟女中出|