springmvc控制器

package com.wy.controller.annotation;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.WebRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;

import com.wy.pojo.User;

/**
 * @author Administrator
 * @version 2011-12-3
 */

@Controller
@RequestMapping("userManagerContoller") //指定请求路径,相对路径可以不定义
public class UserManagerContoller {

	/**
	 * 欢迎
	 * @return
	 */
	
	/* 1.传统的获取请求的参数方式
	 * http://localhost:8080/SpringMVC/userManagerContoller/welcome.do?name=wy
	 */
	@RequestMapping("/welcome") 
	public ModelAndView welcome(HttpServletRequest request){  
		ModelAndView mav = new ModelAndView();
		String name = request.getParameter("name");
        Date today = new Date();  
        String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(today);
        mav.addObject("today", date);
        mav.addObject("name", name);
        mav.setViewName("welcome");
        return mav;  
    }
	
	/* 2.restful风格获取请求的参数方式  Spring3.0的一个重要变化(将参数放到了请求路径中)
	 * http://localhost:8080/SpringMVC/userManagerContoller/welcome/wy.do
	 * 
	 * 注意点: JVM将Java文件编译成Class文件有两种模式 Debug 和Release
	 * 这两种编译方式的区别是:
	 *    Debug 包含额外的调试信息,可以完整的保留变量的名称 (Eclipse 使用的是Debug)
	 *    Release 把变量名称使用其他的一些符号代替,量名称就不可见啦 (在使用 javac命令)   
	 */
	@RequestMapping("/welcome/{param}/{sex}")
	//前一个“param是防止Release编译下找不到参数名称,因此要指定;要和模板中定义的参数名称一致
	//后面一个“param”可以和模板中定义的参数名称不一致,建议还是一致
	public ModelAndView welcome(@PathVariable("param") String param, @PathVariable("sex") String xingbie){
		ModelAndView mav = new ModelAndView();
		mav.addObject("name", param);
		mav.addObject("sex", xingbie);
		Date today = new Date();  
        String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(today);
        mav.addObject("today", date);
        mav.setViewName("welcome");
		return mav;
	}
	
	/**
	 * 3.不同请求方式(get,post),映射不同的方法
	 * 
	 *   value 指定请求路径,method 指定请求方式
	 */
	@RequestMapping(value="/welcome", method=RequestMethod.GET)
	public ModelAndView requestMethodGet(){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("welcome");
		return mav;
	}

	@RequestMapping(value="/hello", method=RequestMethod.POST)
	public ModelAndView requestMethodPost(){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("hello");
		return mav;
	}
	
	/**
	 * 4. @RequestParam 使用方法和@PathVariable类似(要注意Debug和Release)
	 *    http://localhost:8080/SpringMVC/userManagerContoller/welcomeParam.do?username=wy&password=123&age=23
	 */
	@RequestMapping(value="/welcomeParam", method=RequestMethod.GET)
	public ModelAndView welcome(@RequestParam("username") String username,
			@RequestParam("password") String password, @RequestParam("age") int age) {
		ModelAndView mav = new ModelAndView();
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		user.setAge(age);
		mav.addObject("user", user);
		mav.setViewName("hello");
		return mav;
	}
	
	/**
	 * 5.获取表单中的值
	 *   BindingResult 绑定数据过程中产生的错误注入到BindingResult中。
	 */
	@RequestMapping(value="/welcome", method=RequestMethod.POST)
	public ModelAndView commonCommod(User user, BindingResult result){
		ModelAndView mav = new ModelAndView();
		mav.addObject(user);
		if(result.hasErrors() && result.hasFieldErrors()){
			String field = null;
			Object fieldValue = null;
			Map<String, Object> map = new HashMap<String, Object>();
			List<FieldError> fieldErrors = result.getFieldErrors();
			for(FieldError fieldError : fieldErrors){
				field = fieldError.getField();
				fieldValue = fieldError.getRejectedValue();
				
				map.put(field, fieldValue);
			}
			mav.addObject("map", map);
			mav.setViewName("welcome");
		}else{
			mav.setViewName("hello");
		}
		return mav;
	}
	
	/**
	 * 属性编辑器 类型转换
	 * 典型应用: 日期转换
	 */
	@InitBinder
	public void initBinder(WebRequestDataBinder binder){
		binder.registerCustomEditor(Date.class, new CustomDateEditor(
				new SimpleDateFormat("yyyy-MM-dd"),false));
	}
	
	public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception{
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
	}
	/**
	 * 6.常用的参数
	 *   使用Session有一个前提就是session必须是可用的
	 */
//	public ModelAndView commonArguments(HttpServletRequest request, HttpServletResponse response, HttpSession session, 
//			@CookieValue AnyType cookieName, @RequestHeader("user-Agent") AnyType name, 
//	        @PathVariable AnyType variableName, @RequestParam AnyType paramName){
//		ModelAndView mav = new ModelAndView();
//		
//		return mav;
//	}
	
	/**
	 * 7.返回类型
	 *   void 、String、AnyType(任意对象)、Model、ModelAndView
	 *   说明:Model继承了Map,为SpringMVC定制的
	 */
	// void
	@RequestMapping
	public void commonReturnType(HttpServletResponse response){
		try {
			PrintWriter out = response.getWriter();
			out.println("向页面中输出的值");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	@RequestMapping
	public void commonReturnType(PrintWriter out){//其实也是从HttpServletResponse 通过getWriter()得到out
		out.println("向页面中输出的值");
	}
	
	@RequestMapping("/commonReturnType")
	public void commonReturnType(){
		//默认生成隐含的viewName(规则测略:按照请求路径${appName/userManagerContoller/commonReturnType.do 
		//                                   ---> userManagerContoller/commonReturnType}
        //		                             ---> /WEB-INF/page/userManagerContoller/commonReturnType.jsp
	    //                  )
	}
	
	// String
	/**
	 * ModelAndView中的Model
	 * ModelAndView中的View
	 */
	@RequestMapping
	public String commonReturnType(Map<Object, Object> model){//model
		model.put("", "");
		return "viewName";
	}
	
	//AnyType(任意对象)
	/**
	 * user放到model中,model(key, value) key默认是取Bean的名称将其首字母小写 即user,value即user
	 * 默认生成隐含的viewName
	 * 在页面上可以使用request.getAttribute("user")或者${user.key} ${user.value}
	 * @return
	 */
	@RequestMapping
	public User commonReturnTypeUser(){//
		User user = null;
		
		return user;
	}
	
	/**
	 * userList放到model中,model(key, value) key默认是框架生成userList,value即user
	 * 默认生成隐含的viewName
	 * 在页面上可以使用request.getAttribute("userList")或者${userList.key} ${userList.value}
	 * @return
	 */
	@RequestMapping
	public List<User> commonReturnTypeUserList(){
        List<User> userList = null;
		
		return userList;
	}
	
	/**
	 * 
	 * 默认生成隐含的viewName
	 * @return
	 */
	@RequestMapping
	public Model commonReturnTypeModel(){
		Model model = null;
		
		return model;
	}
	
	/**
	 * 
	 * @return
	 */
	@RequestMapping
	public ModelAndView commonReturnTypeModelAndView(){
		ModelAndView mav = new ModelAndView();
		
		mav.addObject("", "");
		mav.setViewName("");
		return mav;
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值