<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

       :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理

    Spring技術(shù)手冊(cè)筆記(四):Spring MVC 上

    Posted on 2009-11-15 22:32 codingliyi 閱讀(925) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java EE

    SpringMVC框架中,擔(dān)任前端控制器的org.springframework.web.servlet.DispatcherServletWeb.xml文件配置代碼如下:

     1<servlet>
     2    <servlet-name>dispatcherServlet</servlet-name>
     3    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     4    <init-param>
     5        <param-name>contextConfigLocation</param-name>
     6<param-value>/WEB-INF/applicationContext.xml</param-value>
     7    </init-param>
     8    <load-on-startup>1</load-on-startup>
     9</servlet>
    10
    11<servlet-mapping>
    12    <servlet-name>dispatcherServlet</servlet-name>
    13    <url-pattern>*.do</url-pattern>
    14</servlet-mapping>

    DispatcherServlet負(fù)責(zé)分發(fā)請(qǐng)求至控制對(duì)象(Controller),控制對(duì)象要實(shí)現(xiàn)Controller接口中的handleRequest()方法:

    ModelAndView handleRequest()HttpServletRequest request, HttpServletResponse response) throws Exception;

    web MVC架構(gòu)下,控制對(duì)象的作用為收集使用者的請(qǐng)求,進(jìn)行web層的相關(guān)操作,不應(yīng)當(dāng)在控制對(duì)象中執(zhí)行業(yè)務(wù)邏輯,也不應(yīng)當(dāng)讓Servlet相關(guān)的API浸入至業(yè)務(wù)層。

    實(shí)際上,DispatcherServlet必須根據(jù)一個(gè)HandlerMapping對(duì)象,決定請(qǐng)求由哪一個(gè)Controller來(lái)處理,DispatcherServlet默認(rèn)用BeanNameUrlHandlerMapping,也就是根據(jù)Bean在定義時(shí)的“name”屬性及使用者請(qǐng)求的URL,決定使用哪個(gè)Controller實(shí)例。

    Controller返回ModelAndView后,DispatcherServlet會(huì)交由ViewR esolver對(duì)象來(lái)作View層的相關(guān)解析。例如InternalResourceViewResolver,需要設(shè)置viewClass,默認(rèn)是org.springframework.web.servlet.view.InternalResourceView

    InternalResourceViewResolverprefixsuffix屬性會(huì)與ModelAndView返回的路徑信息結(jié)合。

    一個(gè)簡(jiǎn)單的Spring MVCHello world例子如下:

    編寫(xiě)SayHelloController.java文件,實(shí)現(xiàn)Controller接口
     1public class SayHelloController implements Controller {
     2
     3    private String viewPage;
     4    
     5    public ModelAndView handleRequest(HttpServletRequest request,
     6            HttpServletResponse response) throws Exception {
     7        String username = request.getParameter("username");
     8        return new ModelAndView(viewPage, "username", username);
     9    }

    10    
    11    public void setViewPage(String viewPage){
    12        this.viewPage = viewPage;
    13    }

    14}
    編寫(xiě)配置文件applicationContext.xml
    1<bean id="viewResolver"
    2 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    3    <property name="prefix" value="/WEB-INF/" />
    4    <property name="suffix" value=".jsp" />
    5</bean>
    6<bean name="/sayHello.do" class="SpringMVC.SayHelloController">
    7    <property name="viewPage" value="sayHello"/>
    8</bean>
    9

    項(xiàng)目的組織結(jié)構(gòu)如下圖:

    Handler Mapping

    BeanNameUrlHandlerMapping是簡(jiǎn)單的HandlerMappingSpring中常用的是SimpleUrlHandlerMapping

    一段配置如下:

     1<bean name="loggingInterceptor" class="SpringMVC.LoggingInterceptor"/>
     2 
     3<bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     4     <property name="interceptors">
     5         <list>
     6             <ref bean="loggingInterceptor"/>
     7         </list>
     8     </property>
     9     <property name="mappings">
    10         <props>
    11             <prop key="/sayHello.do">sayHelloController</prop>
    12         </props>
    13     </property>
    14</bean>
    15 
    16<bean name="sayHelloController" class="SpringMVC.SayHelloController">
    17    <property name="viewPage" value="sayHello"/>
    18</bean>


    Handler Interceptor

    在執(zhí)行Controller的前后,或是在View繪制之后打算作一些操作,可以實(shí)現(xiàn)HandlerInterceptor接口:

     1public interface HandlerInterceptor {
     2
     3    public void afterCompletion(HttpServletRequest arg0,
     4            HttpServletResponse arg1, Object arg2, Exception arg3)
     5            throws Exception;
     6
     7    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
     8            Object arg2, ModelAndView arg3) throws Exception;
     9
    10    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
    11            Object arg2) throws Exception ;
    12
    13}

    可以繼承HandlerInterceptorAdapter,它實(shí)現(xiàn)了HandlerInterceptor接口。然后在xml文件中配置上上段代碼。

    ModelAndView

    ModelAndView類(lèi)代表了Spring MVC程序中,呈現(xiàn)畫(huà)面所使用的Model數(shù)據(jù)對(duì)象與View數(shù)據(jù)對(duì)象。由于Java程序的方法中一次只能返回一個(gè)對(duì)象,所以ModelAndView的作用是封裝這兩個(gè)對(duì)象,方便同時(shí)返回ModelView

    Model可以用一個(gè)Map封裝;View可以用一個(gè)簡(jiǎn)單字符串,也可以用一個(gè)實(shí)現(xiàn)了View接口的對(duì)象。一個(gè)實(shí)現(xiàn)View的實(shí)例是RediectView,它將使用重定向。而默認(rèn)是使用轉(zhuǎn)發(fā)。

    View Resolver

    View名稱(chēng)的解析是委托給實(shí)現(xiàn)ViewResolver接口的實(shí)例。其一個(gè)實(shí)例是InternalResourceViewResolver

    還有其他的如BeanNameViewResolver。當(dāng)ModelAndView返回的view名稱(chēng)是“hello”時(shí),會(huì)尋找id屬性是helloView Bean

    ViewResolver在名稱(chēng)解析完畢后,實(shí)際的View繪制于Model對(duì)象的轉(zhuǎn)換處理時(shí)交給實(shí)現(xiàn)View接口的實(shí)例。例如InternalResourceViewResolver默認(rèn)的viewClassInternalResourceView。還有其他的如JstlViewTilesViewVelocityView等。


    主站蜘蛛池模板: 久久精品国产亚洲AV网站 | 亚洲精品无码99在线观看| 亚洲va无码va在线va天堂| 免费精品国自产拍在线播放 | 在线观看亚洲AV日韩AV| **一级毛片免费完整视| 国产V亚洲V天堂无码久久久| 亚洲日本天堂在线| 免费看片免费播放| 亚洲s码欧洲m码吹潮| 国产精品二区三区免费播放心| 日韩色视频一区二区三区亚洲 | 波多野结衣在线免费视频| 亚洲一区二区三区播放在线| 成人在线视频免费| 在线亚洲午夜片AV大片| 日韩中文字幕免费| 国产乱子伦精品免费视频| 俄罗斯极品美女毛片免费播放| 美女黄频视频大全免费的| 国产亚洲精品激情都市| 久久免费视频网站| 亚洲jjzzjjzz在线播放| 日韩免费一区二区三区| 国产精品成人69XXX免费视频| 亚洲av日韩综合一区在线观看| free哆啪啪免费永久| 亚洲精品美女久久久久久久| 亚洲免费在线观看| 99热在线观看免费| 亚洲狠狠婷婷综合久久| 亚洲一级片内射网站在线观看| 免费毛片a线观看| 亚洲综合色一区二区三区| 亚洲午夜日韩高清一区| 最近中文字幕大全免费视频 | 亚洲色偷偷色噜噜狠狠99| 亚洲成av人片天堂网老年人| 日本免费在线中文字幕| 亚洲色成人四虎在线观看| 亚洲宅男天堂在线观看无病毒|