当前位置: 代码迷 >> VC/MFC >> SpringMVC 二:常见HandlerMapping和Controller
  详细解决方案

SpringMVC 二:常见HandlerMapping和Controller

热度:139   发布时间:2016-05-02 03:31:49.0
SpringMVC 2:常见HandlerMapping和Controller

?

?

?

?

?

BeanNameUrlHandlerMapping:

这是默认的处理方式,controller配置的name属性为url

<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean><bean name="/spring.do" class="controller.SpringController"></bean>

?

SimpleUrlHandlerMapping:

这种方式controller的<bean>中需要id属性,在配置是通过<props>可以把多个url映射到同一controller上,访问http://127.0.0.1:8080/SprintMVC/mvc2.do或者mvc1都可以放访问

	<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">		<property name="mappings">			<props>				<prop key="/mvc1.do">spring</prop>				<prop key="/mvc2.do">spring </prop>				<prop key="/mvc3.do"> spring</prop>			</props>		</property>	</bean><bean id="spring" class="controller.SpringController"></bean>

?

ControllerClassNameHandlerMapping:

根据类名称进行截取,删除Controller后缀,将前面的名字转为小写SpringController转换后为spring,该配置的后,访问的url为http://127.0.0.1:8080/SprintMVC/spring.do

<bean id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean><bean class="controller.SpringController"></bean

?

如果多个HandlerMapping都配置时,会从上到下执行,也可以设置Mapping的优先级,使用order属性,让其从下而上执行

?

	<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">		<property name="order" value="3"></property>	</bean>	<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">		<property name="mappings">			<props>				<prop key="/mvc1.do">spring</prop>				<prop key="/mvc2.do">spring </prop>				<prop key="/mvc3.do"> spring</prop>			</props>		</property>		<property name="order" value="2"></property>	</bean>	<bean id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">		<property name="order" value="1"></property>	</bean>
?

?

?

?

?

?

AbstractCommandController:

在构造方法里绑定实体类,url访问时携带参数http://127.0.0.1:8080/SprintMVC/command.do?id=1&age=15&name=zhangsan

public class CommandController extends AbstractCommandController {	@SuppressWarnings("deprecation")	public CommandController() {                //绑定实体类		super.setCommandClass(Person.class);		super.setCommandName("person");	}	@Override	protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {		Person p = (Person) command;		System.out.println(p);		return null;	}}
?为了方便,Mapping都配置为ControllerClassNameHandlerMapping
<bean id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">	</bean><bean id="command" class="controller.CommandController"></bean>
?

?SimpleFormController:

跟对get和post请求处理方式不同



?只有post提交,才会进入doSubmitAction()中

public class FormController extends SimpleFormController {	public FormController() {		this.setCommandClass(Person.class);		this.setCommandName("person");	}	protected void doSubmitAction(Object command) throws Exception {		Person p = (Person) command;		System.out.println(p);	}}

?配置

	<bean id="simpleForm" class="controller.FormController">		<property name="formView" value="person"></property>		<property name="successView" value="springMVC"></property>	</bean>

?

?

WizardFormController:

多个页面,和分页类似

?

?

?

?

?

?

?

?

  相关解决方案