Spring之MVC模塊

n672 9年前發布 | 35K 次閱讀 Spring JEE框架

Spring MVC的Controller用于處理用戶的請求。Controller相當于Struts 1里的Action,他們的實現機制、運行原理都類似

Controller是個接口,一般直接繼承AbstrcatController,并實現handleRequestInternal方法。handleRequestInternal方法相當于Struts 1的execute方法

 

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class CatController extends AbstractController{
      private ICatService catService;
      //setter、getter略

      protected ModelAndView handleRequestInternal(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             String action =request.getParameter("action");
             if("list".equals(action)){
                    return this.list(request,response);
             }
      }

      protected ModelAndView list(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             List<Cat> catList = catService.listCat();
             request.setAttribute("catList", catList);
             returnnew ModelAndView("cat/listCat");
      }

}

Spring MVC沒有內置數據的封裝,開發者可以自己封裝數據轉換代碼

Spring MVC獨特的地方在于view層的處理上。handleRequestInternal返回ModelAndView對象,可以看做是對JSP對象的封裝。ModelAndIView直接接受JSP頁面的路徑。例如參數"cat/listCat",只是JSP路徑的一部分,實際完整的路徑是"WEB-INF/jsp/cat/catList.jsp",路徑前后的部分是配置在配置文件中的

除了制定JSP路徑,ModelAndView還可以直接傳遞Model對象到View層,而不用事先放到request中,例如new ModelAndView("cat/listCat","cat",cat),如果傳遞多個參數,可以使用Map,如

Map map = newHashMap();
map.put("cat",cat);
map.put("catList",catList);
return new ModelAndView("cat/listCat",map);
 

一般使用一個獨立的xml文件如spring-action.xml專門配置web相關的組件

<?xml version= "1.0" encoding="UTF-8"?>
<!DCTYPE beansPUBLIC "-//SPRING//DTD BEAN//EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
      <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
             <property name="prefix">
                    <value>/WEB-INF/jsp/</value><!--  JSP前綴-->
             </property>
             <property name="suffix">
                    <value>.jsp</value>                 <!--  JSP后綴-->
             </property>

      <!-- 配置URL Mapping-->
      <bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandleMapping">
             <property name="mappings">
                    <props><!—Controller的URL會被配置成"cat.mvc"-->
                           <prop key="cat.mvc">catController</prop>
                    <props>
             </property>
      </bean>
      <bean id="catController" class="com.clf.spring.CatController">
             <property name="catService" ref="catService"></property>
      </bean>
</beans>
 

web.xml配置

<context-param><!--  Spring配置文件的位置-->
      <param-name>contextConfigLocation</param-name>
      <param-value>
             /WEB-INF/classes/applicationContext.xml,
             /WEB-INF/classes/spring-action.xml   
      </param-value>
</context-param>

<listener><!--  使用Listener加載Spring配置文件-->
      <listener-class>
             org.springframework.web.context.ContextLoaderListener
      </listener-class>
</listener>

<servlet><!--  spring分發器-->
      <servlet-name>spring</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>/WEB-INF/classes/spring-action.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup><!--  啟動時加載-->
</servlet>

<servlet-mapping>
      <servlet-name> spring </servlet-name>
      <url>*.mvc</url>
</servlet-mapping>
 

如果一個Controller要處理多個業務邏輯,可以使用MultiActionController,相當于Struts 1中的DispatchAction,能根據某個參數將不同的請求分發到不同的方法上

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class CatController extends AbstractController{
      private ICatService catService;
      //setter、getter略

      protected ModelAndView add(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             ……
             return new ModelAndView("cat/addCat");
      }

      protected ModelAndView list(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             List<Cat> catList = catService.listCat();
             request.setAttribute("catList", catList);
             return new ModelAndView("cat/listCat");
      }

}
 

配置到spring-action.xml

<bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
      <property name="paramName">
             <value>action</value><!--  配置分發參數-->
      </property>
      <property name="defaultMethodName">
             <value>list</value><!--  配置默認的執行方法-->
      </property>
</bean>

<bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandleMapping">
             <property name="mappings">
                    <props>
                           <prop key="cat.mvc">catController</prop><!--  訪問"cat.mvc"則交給catController處理-->
                           <prop key="catMulti.mvc">catMultiController</prop><!--  訪問"catMulti.mvc"則交給catMultiController處理-->
                    <props>
             </property>
      </bean>

      <bean id="catController" class="com.clf.spring.CatMultiController">
             <property name="catService" ref="catService"></property>
      </bean>

      <bean id="catMultiController" class="com.clf.spring.CatController">
             <property name="catService" ref="catService"></property>
      </bean>

 

 本文由用戶 n672 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!