springMVC--控制器

控制器

一、控制器架构图

 

二、Controller简介

1、收集、验证请求参数并绑定到命令对象;

2、将命令对象交给业务对象,由业务对象处理并返回模型数据;

3、返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名)。

 

三、转发控制器ServletForwardingController

将接收到的请求转发到一个命名的servlet,具体示例如下:

public class ForwardingServlet extends HttpServlet {      
    @Override  
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
    throws ServletException, IOException {    
        resp.getWriter().write("Controller forward to Servlet");            
    }  }  

 
<servlet>  
    <servlet-name>forwarding</servlet-name>  
    <servlet-class>cn.javass.chapter4.web.servlet.ForwardingServlet</servlet-class>  
</servlet> 

Ø  当我们请求/forwardToServlet时,会被转发到名字为“forwarding”的servlet处理,该sevlet的servlet-mapping标签配置是可选的。

<!— 在springmvc.xml配置处理器 -->     
<bean name="/forwardToServlet"   
class="org.springframework.web.servlet.mvc.ServletForwardingController">  
        <property name="servletName" value="forwarding"></property>  
</bean>  

四、命令控制器AbstractCommandController

Springmvc通过命令设计模式接受页面参数。

步骤:

1、自定义命令控制器

 

//从页面接收参数,封装到javabean的user对象中
public class CommandController extends AbstractCommandController{
	
	//指定把参数封装到哪个对象
	public CommandController(){
		this.setCommandClass(User.class);
	}

	@Override
	protected ModelAndView handle(HttpServletRequest arg0,
			HttpServletResponse response, Object command, BindException error)
			throws Exception {
		//值被封装到命令对象command中
		User user = (User) command;
		
		ModelAndView mv = new ModelAndView();
		//设置model数据,值可以是任意的pojo
		mv.addObject("user",user);
		//指定返回视图页面
		mv.setViewName("index");
		return null;
	}
 

 

2、定义javabean
public class User {
	
	private Integer id;
	private String username;
	private String age;
	private Date birthday;
	private String address;
 
3、封装参数页面 
add.jsp
<body>
<form action="${pageContext.request.contextPath }/command.do" >
	姓名:<input type="text" name="username" id="username">
	生日:<input type="text" name="birthday" id="birthday">
	性别:<input type="text" name="sex" id="sex">
	地址:<input type="text" name="address" id="address">
	<input type="submit" value="提交">
</form>
</body>
 
index.jsp:
  <body>
    ${user.username}||${user.age}||${user.birthday}||${user.address}
  </body>
 
4、跳转到add页面

由于add页面在WEB-INF下面不能直接访问,需要通过Controller来访问。

public class ToAddController implements Controller{

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		ModelAndView mv = new ModelAndView();
		//跳转到添加页面
		mv.setViewName("add");
		return mv;
	}

}
 
5、在springmvc.xml中配置bean
<!-- 配置自定义的Controller 命令对象 -->
<bean name="/command.do" class="controller.ConmmandController"></bean>
<!-- 跳转到add页面的对象-->
<bean name="/toAdd.do" class="controller.ToAddController"></bean>
         

中文乱码解决

get请求乱码:
 
 
 
post请求乱码;

配置Spring编码过滤器:在web.xml配置

<filter>
	  <filter-name>characterEncoding</filter-name>
	  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	  <init-param>
	  <param-name>encoding</param-name>
	  <param-value>UTF-8</param-value>
	  </init-param>
  </filter>
  
  <filter-mapping>
	  <filter-name>characterEncoding</filter-name>
	  <url-pattern>/*</url-pattern>
  </filter-mapping>

时间类型转换

在CommandController 类中重写initBinder()方法:
//从页面接收参数,封装到javabean的user对象中
public class CommandController extends AbstractCommandController{

	@Override
	protected ModelAndView handle(HttpServletRequest arg0,
			HttpServletResponse response, Object command, BindException error)
			throws Exception {
		//值被封装到命令对象command中
		User user = (User) command;
		
		ModelAndView mv = new ModelAndView();
		//设置model数据,值可以是任意的pojo
		mv.addObject("user",user);
		//指定返回视图页面
		mv.setViewName("index");
		return null;
	}
	
	//解决时间类型转换
	@Override
	protected void initBinder(HttpServletRequest request,
			ServletRequestDataBinder binder) throws Exception {
		String str = request.getParameter("birthday");
		
		if(str.contains("/")){
			binder.registerCustomEditor(Date.class, 
					new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"), true));
		}else{
			binder.registerCustomEditor(Date.class, 
					new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
		}
		
		
	}

五、参数控制器ParameterizableViewController

<bean	name="/toIndex.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
		<!-- 配置你所要跳转到视图的名称 -->
		<property name="viewName" value="index"></property>//跳转到index页面
</bean>
 

注意:使用参数控制器:不用自己定义Controller,可以直接使用toIndex进行访问


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值