Spring之MVC模块

本文深入解析SpringMVC中的Controller组件及其在处理用户请求、封装数据及与视图层交互过程中的作用,包括如何通过ModelAndView对象进行数据传递与视图跳转,以及使用MultiActionController实现多业务逻辑的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring MVC的Controller用于处理用户的请求。Controller相当于Struts 1里的Action,他们的实现机制、运行原理都类似

Controller是个接口,一般直接继承AbstrcatController,并实现handleRequestInternal方法。handleRequestInternal方法相当于Struts 1的execute方法

 

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. import org.springframework.web.servlet.ModelAndView;  
  2. import org.springframework.web.servlet.mvc.AbstractController;  
  3.    
  4. public class CatController extends AbstractController{  
  5.       private ICatService catService;  
  6.       //setter、getter略  
  7.    
  8.       protected ModelAndView handleRequestInternal(HttpServletRequestrequest,HttpServletResponse response) throws Exception{  
  9.              String action =request.getParameter("action");  
  10.              if("list".equals(action)){  
  11.                     returnthis.list(request,response);  
  12.              }  
  13.       }  
  14.    
  15.       protected ModelAndView list(HttpServletRequestrequest,HttpServletResponse response) throws Exception{  
  16.              List<Cat> catList =catService.listCat();  
  17.              request.setAttribute("catList", catList);  
  18.              returnnew ModelAndView("cat/listCat");  
  19.       }  
  20.        
  21. }  


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,如

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Map map = newHashMap();  
  2. map.put("cat",cat);  
  3. map.put("catList",catList);  
  4. return new ModelAndView("cat/listCat",map);  
 

一般使用一个独立的xml文件如spring-action.xml专门配置web相关的组件

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <?xml version"1.0" encoding="UTF-8"?>  
  2. <!DCTYPEbeans PUBLIC "-//SPRING//DTD BEAN//EN"  
  3.   "http://www.springframework.org/dtd/spring-beans.dtd">  
  4. <beans>  
  5.       <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  6.              <property name="prefix">  
  7.                     <value>/WEB-INF/jsp/</value><!--  JSP前缀-->  
  8.              </property>  
  9.              <property name="suffix">  
  10.                     <value>.jsp</value>                 <!--  JSP后缀-->  
  11.              </property>  
  12.    
  13.       <!-- 配置URL Mapping-->  
  14.       <bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandleMapping">  
  15.              <property name="mappings">  
  16.                     <props><!—Controller的URL会被配置成"cat.mvc"-->  
  17.                            <prop key="cat.mvc">catController</prop>  
  18.                     <props>  
  19.              </property>  
  20.       </bean>  
  21.       <bean id="catController" class="com.clf.spring.CatController">  
  22.              <property name="catService" ref="catService"></property>  
  23.       </bean>  
  24. </beans>  
  25.    
  26. web.xml配置  
  27. <context-param><!--  Spring配置文件的位置-->  
  28.       <param-name>contextConfigLocation</param-name>  
  29.       <param-value>  
  30.              /WEB-INF/classes/applicationContext.xml,  
  31.              /WEB-INF/classes/spring-action.xml     
  32.       </param-value>  
  33. </context-param>  
  34.    
  35. <listener><!--  使用Listener加载Spring配置文件-->  
  36.       <listener-class>  
  37.              org.springframework.web.context.ContextLoaderListener  
  38.       </listener-class>  
  39. </listener>  
  40.    
  41. <servlet><!--  spring分发器-->  
  42.       <servlet-name>spring</servlet-name>  
  43.       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  44.       <init-param>  
  45.              <param-name>contextConfigLocation</param-name>  
  46.              <param-value>/WEB-INF/classes/spring-action.xml</param-value>  
  47.       </init-param>  
  48.       <load-on-startup>1</load-on-startup><!--  启动时加载-->  
  49. </servlet>  
  50.    
  51. <servlet-mapping>  
  52.       <servlet-name> spring</servlet-name>  
  53.       <url>*.mvc</url>  
  54. </servlet-mapping>  
 

如果一个Controller要处理多个业务逻辑,可以使用MultiActionController,相当于Struts 1中的DispatchAction,能根据某个参数将不同的请求分发到不同的方法上

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;  
  2.    
  3. public class CatController extends AbstractController{  
  4.       private ICatService catService;  
  5.       //setter、getter略  
  6.    
  7.       protected ModelAndView add(HttpServletRequestrequest,HttpServletResponse response) throws Exception{  
  8.              ……  
  9.              returnnew ModelAndView("cat/addCat");  
  10.       }  
  11.    
  12.       protected ModelAndView list(HttpServletRequestrequest,HttpServletResponse response) throws Exception{  
  13.              List<Cat> catList =catService.listCat();  
  14.              request.setAttribute("catList", catList);  
  15.              return new ModelAndView("cat/listCat");  
  16.       }  
  17.        
  18. }  
 

配置到spring-action.xml

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">  
  2.       <property name="paramName">  
  3.              <value>action</value><!--  配置分发参数-->  
  4.       </property>  
  5.       <property name="defaultMethodName">  
  6.              <value>list</value><!--  配置默认的执行方法-->  
  7.       </property>  
  8. </bean>  
  9.    
  10. <bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandleMapping">  
  11.              <property name="mappings">  
  12.                     <props>  
  13.                            <prop key="cat.mvc">catController</prop><!--  访问"cat.mvc"则交给catController处理-->  
  14.                            <prop key="catMulti.mvc">catMultiController</prop><!--  访问"catMulti.mvc"则交给catMultiController处理-->  
  15.                     <props>  
  16.              </property>  
  17.       </bean>  
  18.    
  19.       <bean id="catController" class="com.clf.spring.CatMultiController">  
  20.              <property name="catService" ref="catService"></property>  
  21.       </bean>  
  22.    
  23.       <bean id="catMultiController" class="com.clf.spring.CatController">  
  24.              <property name="catService" ref="catService"></property>  
  25.       </bean>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值