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;
}
}
springmvc控制器
最新推荐文章于 2023-03-26 22:32:23 发布