- 常用的handlerMapping处理器映射
- BeanNameUrlHandlerMapping(默认)
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
-
- SimpleUrlHandlerMapping
a.action,b.action,c.action访问的是一个controller
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 支持多个url,访问同一个Controller,按id属性访问 -->
<property name="mappings">
<props>
<prop key="/a.action">hiController</prop>
<prop key="/b.action">hiController</prop>
<prop key="/c.action">hiController</prop>
</props>
</property>
</bean>
<!-- 配置Controller -->
<bean id="hiController" name="/home.action" class="cn.itcast.springmvc.HomeController"/>
-
- ControllerClassNameHandlerMapping 通过Controller的类名来访问
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
http://localhost/springmvc/homeController.action
http://localhost/springmvc/home.action
-
- springmvc加载是什么时候?
它是第一次调用时
-
- 默认哪个handlerMapping起作用?
按照xml配置顺序来处理,将所有controller链接,在springmvc容器加载时,进行初始化。调用时,在这个Map中找到第一个匹配。直接转向。
通过order属性调整顺序
<!-- 配置handlerMapping(默认),按controller的name属性访问 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<!-- 加order属性,这个值从0开始,数字越小优先级越高 -->
<property name="order" value="2"/>
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 支持多个url,访问同一个Controller,按id属性访问 -->
<property name="mappings">
<props>
<prop key="/a.action">hiController</prop>
<prop key="/b.action">hiController</prop>
<prop key="/c.action">hiController</prop>
</props>
</property>
<property name="order" value="1"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="order" value="0"/>
</bean>
-
- 变更核心配置文件路径
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
</servlet>
- 常见Controller
- CommandController命令控制器
package cn.itcast.springmvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
/**
* @Description: 命令控制器,用来封装页面的对象
* @Author: 传智播客 java学院 陈子枢
* @Company: http://java.itcast.cn
* @CreateDate: 2014年11月14日
*/
public class MyCommandController extends AbstractCommandController {
protected ModelAndView handle(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
// TODO Auto-generated method stub
return null;
}
}
package cn.itcast.springmvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import cn.itcast.domain.Person;
/**
* @Description: 命令控制器,用来封装页面的对象
* @Author: 传智播客 java学院 陈子枢
* @Company: http://java.itcast.cn
* @CreateDate: 2014年11月14日
*/
public class MyCommandController extends AbstractCommandController {
//在默认构造时设置
public MyCommandController() {
//告诉springmvc,当前的command是哪个实体
this.setCommandClass(Person.class);
}
protected ModelAndView handle(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
Person p = (Person)command;
System.out.println(p);
return null;
}
}
注意:如果按classname访问,如果由多个单词拼接,全部小写
-
- 表单控制器
规则:
Get提交到表单
Post提交到controller doSumbitAction方法
package cn.itcast.springmvc;
import org.springframework.web.servlet.mvc.SimpleFormController;
import cn.itcast.domain.Person;
/**
* @Description:
* @Author: 传智播客 java学院 陈子枢
* @Company: http://java.itcast.cn
* @CreateDate: 2014年11月14日
*/
public class MyFormController extends SimpleFormController{
public MyFormController() {
this.setCommandClass(Person.class);
}
//当访问这个controller如果时get方式,就直接跳转jsp
//form表单以post方式提交时,会自动调用doSubmitAction方法
protected void doSubmitAction(Object command) throws Exception {
Person p = (Person)command;
System.out.println(p);
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form action="${pageContext.request.contextPath}/myform.action" method="get">
新增用户信息<br>
<table>
<tr>
<td>编号</td>
<td><input type="text" name="id"/></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td><input type="submit" name="ok" value="submit"/></td>
<td></td>
</tr>
</table>
</form>
</body>
</html>
<bean class="cn.itcast.springmvc.MyFormController">
<!-- form视图 访问url时,以get方式提交 -->
<property name="formView" value="person/jPersonCreate"/>
<!-- 成功视图 ,以post方式提交 -->
<property name="successView" value="index"/>
</bean>
-
- 向导表单控制器
在业务系统中,有时用户要填写的内容很多。51job填写简历,基本信息,教育经历,工作经历。分开填写。
package cn.itcast.springmvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractWizardFormController;
import cn.itcast.domain.Person;
/**
* @Description:
* @Author: 传智播客 java学院 陈子枢
* @Company: http://java.itcast.cn
* @CreateDate: 2014年11月14日
*/
public class MyWizardController extends AbstractWizardFormController {
public MyWizardController() {
this.setCommandClass(Person.class);
this.setCommandName("person"); //配置这个名称,页面可以通过它获取数据
}
//成功完成
protected ModelAndView processFinish(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
Person p = (Person)command;
System.out.println(p);
return null;
}
//取消,转向第一个页面重新填写
protected ModelAndView processCancel(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
return new ModelAndView("/wizard/jPersonInfo");
}
}
-
- 基本信息
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form action="${pageContext.request.contextPath}/mywizard.action" method="post">
新增用户信息-基本信息<br>
<table>
<tr>
<td>编号</td>
<td><input type="text" name="id" value="${person.id}"/></td>
</tr>
<tr>
<td>
<input type="submit" name="_target1" value="下一页"/>
<input type="submit" name="_cancel" value="取消"/>
</td>
<td></td>
</tr>
</table>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form action="${pageContext.request.contextPath}/mywizard.action" method="post">
新增用户信息-工作经历<br>
<table>
<tr>
<td>年龄</td>
<td><input type="text" name="age" value="${person.age}"/></td>
</tr>
<tr>
<td>
<input type="submit" name="_target1" value="上一页"/>
<input type="submit" name="_cancel" value="取消"/>
<input type="submit" name="_finish" value="完成"/>
</td>
<td></td>
</tr>
</table>
</form>
</body>
</html>