浏览器请求消息数据和处理器的形参建立连接的过程
浏览器发送的请求的参数封装到处理器形参的过程
SpringMVC是web层框架主要是用来浏览器交互的,浏览器发送请求的数据和响应给浏览器的数据
@Controller
public class 默认类型 {
/**
* 默认参数类型:
* HttpServletRequest:请求
* HttpServletResponse:响应
* HttpSession:session对象
* Modol:模型,用于存放页面需要的数据
*/
@RequestMapping("/findById")
public String getUserId(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) {
model.addAttribute("msg","javaweb教务系统");
String id = request.getParameter("userId");
System.out.println("userId=" + id);
return "pages/success";
}
}
public String User(String name) {
System.out.println("简单数据类型-----前端后端参数一致时-----name:" + name);
return "pages/success";
}
/**
* @RequestParam:解决客户端请求参数和处理器形参名称不一致时
* 客户端请求参数name="username"
* 少参数报错:required=true
* 不传参数,默认为小焦同学:defaultValue="小焦同学"
*/
@RequestMapping("/easy2")
public String User1(@RequestParam(value = "username",defaultValue = "小焦同学") String name) {
System.out.println("简单数据类型-----前端后端参数不一致时-----name:" + name);
return "pages/success";
}
/**
* 使用RESTful风格
* http://localhost:8080/easy2/小焦同学
*/
@RequestMapping("/easy2/{username}")
public String User2(@PathVariable("username") String name) {
System.out.println("使用RESTful风格方式:路径中的参数:" + name);
return "pages/success";
}
@Data
public class User {
private String username;
private String password;
}
/**
* register.jsp中name名字要和pojo中的变量名一致,如果不一致,值为null
* @param user
* @return
*/
@RequestMapping("/register")
public String registerUser(User user){
// 用户端传来的参数是中文的话,输出是乱码,则需要配置filter过滤器
System.out.println("用户注册成功:"+user);
return "pages/success";
}
多用于批量删除,批量删除会有多个参数值
Integer[] ids参数要和jsp中的name值相同
// 接收批量删除的方法
@RequestMapping("/deleteUsers")
public String deleteUsers(Integer[] ids) {
if (ids != null) {
for (Integer id : ids) {
System.out.println("成功删除了id为:" + id + "的用户");
}
} else {
System.out.println("ids为空");
}
return "pages/success";
}
多用于批量修改,不同的数据类型、集合类型不能直接放到方法形参上,需要用包装类pojo
// 接收批量删除的方法
@RequestMapping("/deleteUsers")
public String deleteUsers(@RequestParam("ids") List<Integer> ids) {
if (ids != null) {
for (Integer id : ids) {
System.out.println("成功删除了id为:" + id + "的用户");
}
} else {
System.out.println("ids为空");
}
return "pages/success";
}
@Data
public class User {
private Integer id;
private String username;
}
// 集合类型绑定
@Data
public class UserVo {
private List<User> users;
}
// UserVo userList:集合类型可能有不同的参数类型,集合类型不能直接放到方法形参上,需要用包装类Pojo:UserVo
@RequestMapping("/user_update")
public String userUpdate(UserVo userList) {
List<User> users = userList.getUsers();
for (User user : users) {
if (user.getId() != null)
System.out.println(user);
}
return "pages/success";
}
pojo类中有引用数据类型
@Data
public class Depart {
private String id;
private String name;
}
@Data
public class Claz implements Serializable{
private String id;
private String name;
private String grade;
private Depart depart;
}
/**
* 绑定包装POJO类型(depart类类型)
*/
@RequestMapping("/save")
public String save(Claz claz) {
System.out.println(claz.getDepart().getId());
System.out.println(claz);
return "redirect:list";
}
@Data
public class Claz implements Serializable{
private String id;
private String name;
}
@Data
public class ClazList {
private List<Claz> clazs;
private List<String> address;
}
@RequestMapping("/save")
public String save(ClazList clazList, Model model){
System.out.println(clazList.getClazs());
System.out.println(clazList.getAddress());
model.addAttribute("msg","List类型添加成功");
return "clazList/list";
}
@Data
public class Claz implements Serializable{
private String id;
private String name;
}
@Data
public class ClazMap {
private String teacher_id;
private HashMap<String,Claz> clazMaps;
}
@RequestMapping("/save")
public String save(ClazMap clazMap, Model model){
String teacher_id = clazMap.getTeacher_id();
System.out.println("老师id为:"+teacher_id);
HashMap<String, Claz> clazMaps = clazMap.getClazMaps();
Set<String> keys = clazMaps.keySet();
for (String key : keys){
Claz claz = clazMaps.get(key);
System.out.println(key);
System.out.println(claz);
}
model.addAttribute("msg","Map类型添加成功");
return "clazMap/list";
}
/*输出结果 key:value
老师id为:1,2
claz02:Claz [id=2, name=计本2班]
claz01:Claz [id=1, name=计本1班]
*/
void类型:如果是void类型,默认跳转到 前缀+映射名字+后缀.jsp中,如果没有这个jsp,报404
@Controller
public class StringControllerTest {
@RequestMapping("/aString")
public String aString(){
System.out.println("配置视图解析器");
return "pages/success";
}
@RequestMapping("/bString")
public String bString(){
System.out.println("没有配置视图解析器————forward跳转");
return "forward:WEB-INF/pages/success.jsp";
}
@RequestMapping("/cString")
public String cString(){
System.out.println("没有配置视图解析器————redirect重定向");
return "redirect:bString";
// return "redirect:http://www.itheima.com";
}
}
String类型--不带参数:
配置视图解析器:
直接return "success"; jsp要放到WEB-INF下
不配置视图解析器:
forward:跳转到jsp中 return "forward:success.jsp"; jsp要放到webapp下
redirect:重定向 return "redirect:success"、return "redirect:http://www.baidu.com";
String类型--带参数:
HttpServletRequest:request.setAttribute("username","request");
Model:model.addAttribute("username","model");
@Controller
public class ModelAndViewController {
@RequestMapping("/showModelAndView")
public ModelAndView showModelAndView(){
ModelAndView modelAndView = new ModelAndView();
// 数据设置
modelAndView.addObject("username","张三");
User user = new User();
user.setPassword("123");
modelAndView.addObject("user",user);
// 视图设置
modelAndView.setViewName("user/modelAndView");
return modelAndView;
}
}
// HttpServletRequest
@RequestMapping("/showPageByRequest")
public String showPageByRequest(HttpServletRequest request){
request.setAttribute("username","request");
return "user/model";
}
// Model
@RequestMapping("/showPageByModel")
public String showPageByModel(@RequestParam("username") String name,Model model){
model.addAttribute("username","model");
return "user/model";
}
@RequestMapping("/hello")
public String showPageByModelMap(@RequestParam("username") String name, ModelMap model){
//封装要显示到视图中的数据
//相当于req.setAttribute("name",name);
model.addAttribute("username","model");
return "user/model";
}
对比