springMVC--控制器

控制器

一、控制器架构图

springMVC--控制器_第1张图片

二、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");            
    }  }  


  
    forwarding  
    cn.javass.chapter4.web.servlet.ForwardingServlet  
 

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

     
  
          
  

四、命令控制器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

姓名: 生日: 性别: 地址:

index.jsp:
  
    ${user.username}||${user.age}||${user.birthday}||${user.address}
  

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




         

中文乱码解决

get请求乱码:
springMVC--控制器_第2张图片


post请求乱码;

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


	  characterEncoding
	  org.springframework.web.filter.CharacterEncodingFilter
	  
	  encoding
	  UTF-8
	  
  
  
  
	  characterEncoding
	  /*
  

时间类型转换

在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


		
		//跳转到index页面


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



你可能感兴趣的:(JavaEE,springmvc)