小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

springMVC入門(mén)

 Ethan的博客 2011-07-11

springMVC入門(mén)

分類(lèi): spring系列 3054人閱讀 評(píng)論(17) 收藏 舉報(bào)

看過(guò)請(qǐng)留個(gè)言,轉(zhuǎn)載請(qǐng)注明出處,尊重作者勞動(dòng)成果,謝謝!

作為一個(gè)J2EE的開(kāi)發(fā)者,我們基本上是開(kāi)發(fā)基于WEB的應(yīng)用系統(tǒng)。事實(shí)上,工作流,狀態(tài)管理以及驗(yàn)證都是需要解決的重要功能。而HTTP協(xié)議的無(wú)狀態(tài)性決定了這些功能都不容易實(shí)現(xiàn)。SpringWEB框架就是來(lái)幫助我們解決這些問(wèn)題的。使用Spring,我們可以讓WEB框架自動(dòng)將傳遞進(jìn)來(lái)的請(qǐng)求參數(shù)填充到模型對(duì)象中,同時(shí)提供驗(yàn)證和錯(cuò)誤處理。還可以管理用戶(hù)在WEB表單中創(chuàng)建的對(duì)象的狀態(tài)。在了解SpringMVC之前,我們先來(lái)復(fù)習(xí)下MVC.

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

 

我們來(lái)看一下MVC的基本工作流程:

 

首先是客戶(hù)端(通常是瀏覽器)發(fā)出一個(gè)請(qǐng)求。第一個(gè)接受這個(gè)請(qǐng)求的組件一般是一個(gè)前端控制器。它將不同的請(qǐng)求交給不同的后端控制器來(lái)處理,而在后端控制器里面又可以調(diào)用相應(yīng)的模型對(duì)象來(lái)處理具體的業(yè)務(wù)邏輯,最后再返回一個(gè)特定的視圖響應(yīng)給客戶(hù)端。

 

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

 

現(xiàn)在大家應(yīng)該可以理解MVC的設(shè)計(jì)思想了。拿我們比較熟悉的struts框架來(lái)說(shuō),前端控制器就是ActionServlet,后端控制器就是Action.請(qǐng)求的URL和后端控制器的映射關(guān)系在struts-config.xml上的<action-mappings>里面配置,模型對(duì)象就是我們平常寫(xiě)的DAO/DTO,返回的視圖類(lèi)型一般就是jsp了。

 

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

 

       我們學(xué)習(xí)知識(shí),一樣要注意運(yùn)用類(lèi)比遷移的方法。有人說(shuō),我學(xué)會(huì)了struts,但學(xué)不會(huì)springMVC。這是說(shuō)不過(guò)去的。因?yàn)槎叩乃枷胪耆恢?。所以,我們只需要學(xué)習(xí)它們不一樣的地方就可以啦。好,我們現(xiàn)在先跑一個(gè)最簡(jiǎn)單的例子,讓大家對(duì)構(gòu)建SpringMVC的基本步驟有個(gè)直觀的認(rèn)識(shí)。大家要邊跑邊跟struts做比較。

(1)建立動(dòng)態(tài)web工程,導(dǎo)入springjar包。

 

(2)配置DispatcherServlet

 

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

<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)編寫(xiě)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有個(gè)XML格式的核心配置文件,springMVC當(dāng)然也有,在WEB-INF下新建一XML文件:test-servlet.xml.注意,這里的test取決于servlet的名字.當(dāng)DispatcherServlet載入后,它將試圖從這個(gè)文件中載入應(yīng)用上下文。

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

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

<beans>

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

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

    </bean>

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

    <bean name="/hello.do"

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

    </bean>

</beans>

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

 

(4)配置一個(gè)視圖解析器將控制器與JSP結(jié)合起來(lái)。

 

將解析器的配置片段加到上面的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)編寫(xiě)呈現(xiàn)給用戶(hù)的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>

 

完成后啟動(dòng)服務(wù)器,在瀏覽器地址欄上輸入http://locahost:8080/projectName/hello.do       就可以訪問(wèn)了。

       對(duì)照一下,我們發(fā)現(xiàn)SpringMVCStruts大同小異。只是有兩處映射,SpringMVC做的相對(duì)靈活。哪兩處呢?

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

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

—— BeanNameUrlHandlerMapping

       根據(jù)控制器的名字將控制器映射到URL

—— SimpleUrlHandlerMapping

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

—— CommonsPathMapHandlerMapping

       使用控制器代碼中的元數(shù)據(jù)將控制器映射到URL  

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

springMVC里還有個(gè)視圖解析器(ViewResolver)的概念。它決定了ModelAndView對(duì)象的邏輯視圖名如何解析成一個(gè)用于將結(jié)果渲染給用戶(hù)的視圖Bean..Spring有四種ViewResolver實(shí)現(xiàn):

—— InternalResourceViewResolver

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

—— BeanNameViewResolver

       將邏輯視圖名解析成一個(gè)DispatcherServlet應(yīng)用上下文中的視圖Bean

—— ResourceBundleViewResolver

       將邏輯視圖名解析成一個(gè)ResourceBundler中的視圖對(duì)象

—— XmlViewResolver

       從一個(gè)XML文件中解析視圖Bean,這個(gè)文件是從DispatcherServlet應(yīng)用上下文中分離出來(lái)的。

       好啦,今天就算是SpringMVC的一個(gè)入門(mén)。建議大家將StrutsSpringMVC對(duì)照著學(xué)習(xí),那樣效果會(huì)更好。與人分享,集思廣益。希望大家都能夠?qū)W習(xí)快樂(lè),工作順心。下次再見(jiàn)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多