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

          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例子如下:

          編寫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}
          編寫配置文件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)單的HandlerMapping,Spring中常用的是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類代表了Spring MVC程序中,呈現(xiàn)畫面所使用的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名稱的解析是委托給實(shí)現(xiàn)ViewResolver接口的實(shí)例。其一個(gè)實(shí)例是InternalResourceViewResolver。

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

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


          主站蜘蛛池模板: 安平县| 行唐县| 塔河县| 淳安县| 育儿| 南通市| 广汉市| 武隆县| 攀枝花市| 安泽县| 三原县| 潼南县| 太湖县| 邢台县| 勐海县| 安义县| 顺平县| 蒲江县| 玉田县| 蓬安县| 磐石市| 永昌县| 鹰潭市| 谢通门县| 宁海县| 东兴市| 阿合奇县| 永嘉县| 治县。| 榆中县| 彭阳县| 芮城县| 长治县| 安图县| 九江县| 岳西县| 绥中县| 博乐市| 沙洋县| 启东市| 彭水|