久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

spring MVC 基本操作方法1

 rui5327 2011-09-22
Spring提供了DispatcherServlet,,這個(gè)類(lèi)不僅負(fù)責(zé)實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),,還負(fù)責(zé)啟動(dòng)一個(gè) WebApplicationContext容器。按照Spring一貫的IoC哲學(xué),,所有的Controller都是JavaBean,,并由IoC容器統(tǒng)一管理。對(duì)于View,,則采取了更靈活的處理方式,,Spring MVC允許使用不同的View實(shí)現(xiàn),除了JSP外,,還可以使用Velocity,、Freemaker、XSLT等多種View技術(shù),。

總的來(lái)講,,要使用Spring MVC框架,需要以下步驟,。

① 在web.xml中配置DispatcherServlet及URL映射,。
<!-- springMVC配置文件 -->
     <servlet>
         <servlet-name>ideawu</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <load-on-startup>1</load-on-startup>
     </servlet>
 
     <servlet-mapping>
         <servlet-name>ideawu</servlet-name>
         <url-pattern>*.do</url-pattern>
     </servlet-mapping>
② 編寫(xiě)IoC容器需要的XML配置文件,命名為<servlet-name>-servlet.xml,,放到/WEB-INF目錄下,。例如,如果DispatcherServlet在web.xml中的配置名稱(chēng)為dispatcher,,則Spring將尋找dispatcher- servlet.xml配置文件,。按上面代碼中則xml文件名為:ideawu-servlet.xml  。對(duì)于Web應(yīng)用程序,,Spring的ApplicationContext是由DispatcherServlet加載的,,它會(huì)在/WEB-INF/下查找一個(gè)名稱(chēng)為<servletName> -servlet.xml的XML配置文件來(lái)初始化Spring Web應(yīng)用程序的ApplicationContext。對(duì)于上例,,我們?cè)趙eb.xml中定義DispatcherServlet的名稱(chēng)為 dispatcher,,因此,相應(yīng)的XML配置文件就必須是/WEB-INF/dispatcher-servlet.xml,。
③ 在dispatcher- servlet.xml     XML配置文件中定義訪問(wèn)URL映射方式和使用哪種View技術(shù)。/web/WEB-INF/lib目錄下的jstl.jar和standard.jar是JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù),,將在JSP視圖中用到,,/web/WEB-INF/c.tld是標(biāo)簽庫(kù)的聲明文件,稍后我們會(huì)在JSP視圖文件中用到它們。
 

下一步便是編寫(xiě)dispatcher-servlet.xml配置文件,,首先定義URL的映射方式(HandlerMapping),。Spring提供了幾種常用的HandlerMapping。

1.使用SimpleUrlHandlerMapping

SimpleUrlHandlerMapping提供了最簡(jiǎn)單的URL映射,,通過(guò)Properties將URL和Controller對(duì)應(yīng)起來(lái),,配置示例如下。

<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet. handler.SimpleUrlHandlerMapping">

    <property name="mappings">

        <props>

            <prop key="/a.html">controllerA</prop>

            <prop key="/b.html">controllerB</prop>

        </props>

    </property>

</bean>

這種方式和Struts的配置類(lèi)似,。當(dāng)用戶請(qǐng)求一個(gè)URL時(shí),,Spring就在SimpleUrl HandlerMapping注入的Properties中查找對(duì)應(yīng)的Controller。

2.使用BeanNameUrlHandlerMapping

BeanNameUrlHandlerMapping的實(shí)現(xiàn)更為簡(jiǎn)單,,每個(gè)Controller的URL與其name屬性對(duì)應(yīng),,因此,只需要對(duì)每個(gè)Controller以URL作為name,,就可以實(shí)現(xiàn)URL映射,。配置示例如下。

<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet. handler.BeanNameHandlerMapping" />

<bean name="/a.html" class="example.chapter7.ControllerA" />

<bean name="/a.html" class="example.chapter7.ControllerB" />

之所以用Bean的name作為URL而不是id,,是因?yàn)閄ML規(guī)范不允許在id標(biāo)識(shí)中使用特殊字符“/”,。當(dāng)用戶請(qǐng)求一個(gè)URL時(shí),Spring將直接查找name為URL的Controller,。

使用 SimpleUrlHandlerMapping的麻煩之處在于,,添加或刪除Controller時(shí)必須要對(duì) SimpleUrlHandlerMapping做相應(yīng)的修改,而B(niǎo)eanNameUrlHandlerMapping則無(wú)需手工編寫(xiě)映射,,只需要在每個(gè) Controller中仔細(xì)定義name屬性,。如果使用XDoclet自動(dòng)生成配置文件,則可以將name在Controller的注釋中定義,,維護(hù)起來(lái)更加方便,。因此,我們推薦首先考慮使用BeanNameUrlHandlerMapping,。事實(shí)上,,如果沒(méi)有在XML配置文件中定義任何 UrlHandlerMapping,則Spring MVC默認(rèn)使用BeanNameUrlHandlerMapping,。

Spring還提供了一個(gè) ControllerClassNameHandlerMapping,,它和BeanName UrlHandlerMapping類(lèi)似,不過(guò)是將Controller的ClassName和對(duì)應(yīng)的URL關(guān)聯(lián)起來(lái),,由于這種方式靈活性欠佳,,實(shí)際使用較少。

也可以混合使用多種 UrlHandlerMapping,,但是必須為每個(gè)UrlHandlerMapping指定order屬性來(lái)表示優(yōu)先級(jí),,order值越小優(yōu)先級(jí)越高,,Spring會(huì)先查詢優(yōu)先級(jí)高的UrlHandlerMapping。若找到了對(duì)應(yīng)的Controller,,就不再繼續(xù)查詢,,否則,按照優(yōu)先級(jí)依次查詢,,直到找到為止,。若所有的UrlHandlerMapping都無(wú)法返回一個(gè)合適的Controller,并且沒(méi)有設(shè)置默認(rèn)的Controller時(shí),,就會(huì)返回給客戶端一個(gè)“404 Not Found”錯(cuò)誤,,表示不存在這個(gè)URL。

下一步需要為Spring MVC指定一個(gè)ViewResolver(視圖解析器),,指示使用何種視圖技術(shù),,以及如何解析ModelAndView返回的邏輯視圖名稱(chēng)。

這里我們直接給出使用JSP視圖的配置,,對(duì)于其他的視圖技術(shù)將會(huì)在后面講到,。

<bean id="viewResolver" class="org.springframework.web.servlet.view. InternalResourceViewResolver">

    <property name="viewClass" value="org.springframework.web.servlet. view.JstlView" />

    <property name="prefix" value="/" />

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

</bean>

prefix和suffix將和邏輯視圖名稱(chēng)一起組合成為實(shí)際視圖的路徑。例如,,對(duì)于上例,,若返回一個(gè)new ModelAndView("test", model),則實(shí)際的視圖路徑由prefix+邏輯視圖名+suffix這3部分構(gòu)成,。

/test.jsp

定義前綴(prefix)使得視圖文件無(wú)論放在何處都可以通過(guò)修改前綴來(lái)實(shí)現(xiàn)位置無(wú)關(guān)性(當(dāng)然,,必須在web目錄內(nèi)),許多應(yīng)用程序?qū)⑵浞旁?WEB-INF 目錄下,,使得用戶無(wú)法通過(guò)URL直接訪問(wèn)視圖文件以保證視圖文件的安全,;定義后綴(suffix)可以在將來(lái)用另一種視圖技術(shù)(例如,Velocity)取代現(xiàn)在的JSP視圖,,只需將后綴從“.jsp”更改為“.vm”即可,,而不必更改源代碼中的邏輯視圖名??傊?,一切目標(biāo)都是為了實(shí)現(xiàn)最大限度的解耦。
 
實(shí)現(xiàn)Controller

實(shí)現(xiàn)了org.springframework.web.servlet.mvc.Controller接口的Bean都可以作為有效的Controller來(lái)處理用戶請(qǐng)求,。例如,,一個(gè)最簡(jiǎn)單的TestController。

public class TestController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServlet Response response) throws Exception {

        String name = request.getParameter("name");

        if(name==null)

            name = "spring";

        Map model = new HashMap();

        model.put("name", name);

        model.put("time", new Date());

        return new ModelAndView("test", model);

    }

}
注意,,上例的Controller接口和返回值ModelAndView都是在Spring框架中定義的

另外需要注意的是,,ModelAndView返回的邏輯視圖是“test”,還記得在viewResolver中定義的prefix和suffix嗎,?實(shí)際的視圖名稱(chēng)由這3部分構(gòu)成便是“/test.jsp”,。

最后將這個(gè)TestController作為Bean定義在dispatcher-servlet.xml中,,由于我們準(zhǔn)備使用默認(rèn)的BeanNameUrlHandlerMapping,,因此,,需要在Bean的name中指定URL。

<bean name="/test.html" class="example.chapter7.TestController" />

完整的dispatcher-servlet.xml配置文件的內(nèi)容如下,。

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

<beans xmlns="http://www./schema/beans"

       xmlns:xsi="http://www./2001/XMLSchema-instance"

       xsi:schemaLocation="http://www./schema/beans http://www./schema/beans/spring-beans.xsd">

    <bean name="/test.html" class="example.chapter7.TestController" />

    <bean id="viewResolver" class="org.springframework.web.servlet.view. InternalResourceViewResolver">

        <property name="viewClass" value="org.springframework.web.servlet. view.JstlView" />

        <property name="prefix" value="/" />

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

    </bean>

</beans>

注意,,我們沒(méi)有指定UrlHandlerMapping,Spring會(huì)自動(dòng)使用默認(rèn)的BeanNameUrl HandlerMapping,。
 
實(shí)現(xiàn)View

到目前為止,,我們已經(jīng)編寫(xiě)了 Controller的實(shí)現(xiàn)和配置文件,最后一步是編寫(xiě)一個(gè)JSP文件作為視圖,。由于采用了MVC架構(gòu),,視圖的任務(wù)只有一個(gè),就是將Controller 返回的Model渲染出來(lái),。Spring MVC會(huì)將Model中的所有數(shù)據(jù)全部綁定到HttpServlet Request中,,然后將其轉(zhuǎn)發(fā)給JSP,JSP只需將數(shù)據(jù)顯示出來(lái)即可,。

通過(guò)JSTL標(biāo)簽庫(kù)能進(jìn)一步簡(jiǎn)化顯示邏輯,,我們看看如何顯示TestController返回的Model。test.jsp文件的內(nèi)容如下,。

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

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

<html>

    <head>

        <title>SpringMVC</title>

    </head>

    <body>

        <h3>Hello, <c:out value="${name}" />,

        it is <c:out value="${time}" /></h3>

    </body>

</html>

現(xiàn)在,,Spring MVC所需的所有組件都已編寫(xiě)并配置完畢,我們先來(lái)回顧一下Spring MVC的處理流程,,如圖7-22所示,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(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)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多