SpringMVC中的处理器(Controller) & 处理器映射(handlerMapping)

SpringMVC中的处理器:
	
	1)命令处理器(CommandController):
		配置文件:
			<bean class="com.jxn.springmvc.MyCommandController">
		处理器:
			public class MyCommandController extends AbstractCommandController {
			
				// 在默认的构造方法中注册模型
				public MyCommandController() {
					// 设置当前command对应的实体类型
					this.setCommandClass(Person.class);
					// 设置当前command的名称,设置这个名称后,在页面中可以通过这个名称来获取数据
					this.setCommandName("person"); 	
				}

				// 参数command:用来封装表单中的model
				@Override
				protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {

					Person person = (Person)command; 
					System.out.println(person);
					
					return null;
				}
			}
	
	2)表单处理器(FormController):
		配置文件:
			<bean class="com.jxn.springmvc.MyFormController">
				<!-- 表单视图:通过URL访问(即:以get方式访问) -->
				<property name="formView" value="person/personAdd"/>
				<!-- 成功视图:以post方式提交表单 -->
				<property name="successView" value="success"/>
			</bean>
		处理器:
			public class MyFormController extends SimpleFormController{
				public MyFormController() {
					this.setCommandClass(Person.class);
					this.setCommandName("person"); 
				}
				
				// 1,以get方式访问时,不会调用doSubmitAction方法,而是直接跳转到jsp页面。
				// 2,以post方式提交时,会自动调用doSubmitAction方法。
				@Override
				protected void doSubmitAction(Object command) throws Exception {
					Person person = (Person)command;
					System.out.println(person);
				}
			}
	
	3)向导表单处理器:
		配置文件:
			<bean class="com.jxn.springmvc.MyWizardController">
				<property name="pages">
					<list>
						<value>wizard/personInfo</value>
						<value>wizard/personEdu</value>
						<value>wizard/personWork</value>
					</list>
				</property>
			</bean>
		处理器:
			public class MyWizardController extends AbstractWizardFormController {
				public MyWizardController() {
					this.setCommandClass(Person.class);
					this.setCommandName("person");		
				}

				// 完成
				@Override
				protected ModelAndView processFinish(HttpServletRequest request, ttpServletResponse response, Object command, BindException errors) throws Exception {
					Person person = (Person)command;
					System.out.println(person);
					return new ModelAndView("index");
				}
				
				// 取消,转向指定的页面重新填写
				@Override
				protected ModelAndView processCancel(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
					return new ModelAndView("/wizard/personInfo");
				}
			}
	
	
	
SpringMVC中常见的处理器映射(handlerMapping):
	
	<!-- 配置处理器Controller -->
	<bean id="helloController" name="/test.action" class="com.jxn.springmvc.testController"/>

	1)BeanNameUrlHandlerMapping(默认)
		配置:<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
		特点:通过controller的name属性访问。
	
	2)SimpleUrlHandlerMapping
		配置:
			<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
				<!-- 支持多个url访问同一个Controller,按controller的id属性访问 -->
				<property name="mappings">
					<props>
						<prop key="/test1.action">helloController</prop>
						<prop key="/test2.action">helloController</prop>
					</props>
				</property>
			</bean>
		特点:通过controller的id属性访问,支持多个url访问同一个Controller。
	
	3)ControllerClassNameHandlerMapping
		配置:
			<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
			<bean id="helloController" name="/test.action" class="com.jxn.springmvc.testController"/>
		特点:通过Controller的类名来访问。
		注意:
			1)处理器的类名、处理器的类名省略Controller后 均可访问,即:通过testController或test都可以访问。
			2)如果处理器的类名是由多个单词拼接而成,那么通过类名访问时:除了类名最后的Controller部分,其它部分的类名必须全部小写!

	说明:
		1)当配置了多个HandlerMapping时,默认按照它们配置的先后顺序来处理。
		2)可以通过HandlerMapping的order属性来设置多个HandlerMapping的处理顺序,order属性从0开始取值,数字越小,其优先级越高。
		例子:
			<!-- HandlerMapping的order属性,从0开始取值,数字越小优先级越高,当多个HandlerMapping存在时,会使用优先级最高那个 -->
			<property name="order" value="1"/>
	
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值