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"/>
SpringMVC中的处理器(Controller) & 处理器映射(handlerMapping)
最新推荐文章于 2023-03-09 12:24:42 发布