1.RequestMapping的属性:
1.path:
指定请求路径的url;
2.value
和path一样;
3.method:
指定该方法的请求方式
4.param:
指定限制请求参数的条件
若只参无值则请求必须有参数值无限定
若有参数有值则请求必须有参有设定的唯一值
5.header:
指定必须包含的请求头(浏览器网络里面看)
2.某实体类包含引用类型的提交时
1.引用类型文本框的name值为 引用类型.属性。
测试引用类型 <br>
<form action="people/savePeople" method="post">
peopleName: <input type="text" name="pname"><br><br>
peopleAge:<input type="text" name="age"><br><br>
userName:<input type="text" name="user.username"><br><br>
userId:<input type="text" name="user.userId"><br><br>
userWord:<input type="text" name="user.password"><br><br>
<button type="submit">提交</button>
</form>
2.实体类包含集合map列表list时:文本框的name值为 list[0].属性
测试含有list <br>
<form action="people/testList" method="post">
peopleName: <input type="text" name="pname"><br><br>
peopleAge:<input type="text" name="age"><br><br>
userName:<input type="text" name="list[0].username"><br>
userId:<input type="text" name="list[0].userId"><br>
userWord:<input type="text" name="list[0].password"><br><br>
userName:<input type="text" name="list[1].username"><br>
userId:<input type="text" name="list[1].userId"><br>
userWord:<input type="text" name="list[1].password"><br>
<button type="submit">提交</button>
</form>
3.实体类包含集合map时:文本框的name值为 map[‘one’].属性
4.常用注解
1.@ResquestParam注解参数,则请求链接必须含有这个参数。
2…@ResquestBody请求体,get不适用,用于post提交后面的参数。
参数注解后:获得的是所有上传的数据.相当于post提交连接?后的所有参数。
3.@PathVariable注解,用于绑定请求路径中的占位符,获取链接中的10
<a href="../annotation/testPathVariable/10">测试PathVariable</a>
/**
* 测试PathVariable注解
* 用于绑定请求路径中的占位符
* @param id
* @return
*/
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id) {
System.out.println(id);
//输出10
System.out.println("testPathVariable执行了");
return "good";
}
4.@RequestHeader注解用于获取请求头;
@CookieValue注解用于获取cookie;
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
System.out.println(cookieValue);
System.out.println("testCookieValue执行了");
return "good";
}
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "ACCEPT") String head) {
System.out.println(head);
return "good";
}
5.@ModeAttribute注解
修饰在方法是他会在控制器所有方法之前执行。
可以有返回值和无返回值俩种。
修饰在参数上,获取指定数据给参数赋的值
/**
* ModelAttribute注解的方法会在所有方法执行之前执行
* 在该方法内可以做一些操作比如修改某些值,属性能加不能改
* 比如注册时查询是否已经注册
* 例如本方法给savePeople方法增加list属性
* @param people
* @return
*/
@ModelAttribute
public People testModeAttribute(People people) {
System.out.println("传进ModeAttribute中的people:" + "\n" + people);
people.setAge(20);
/*新建list加进people中去*/
ArrayList<User> users = new ArrayList<>();
User user = new User("11111","李白","11111");
users.add(user);
people.setList(users);
/*输出改变后的*/
System.out.println("ModeAttribute中修改年龄为20后的people:" + "\n" + people);
return people;
}
6.@SesionAttributes注解:
将Model底层存在request中的数据存储在session中
相比于原生的httpsession此注特点:解决耦合问题。
在类上注解.注意有s;
/**
* 测试SessionAttributes注解作用
* SessionAttributes是将model中的值存在session中
* 不加此注解model将数据存储在request中
* 以及session中数值的存储添加,得到,删除
* @author 骆尊
*/
@Controller
@RequestMapping("/session")
@SessionAttributes(value = "msg")
public class SessionAttributesController {
/**
* SessionAttributes存储数值
* @param model
* @return
*/
@RequestMapping("/saveSessionAttributes")
public String saveSessionAttributes(Model model) {
/*也可以用model的底层实现类modelMap来存储*/
model.addAttribute("msg","哈哈");
return "good";
}
/**
* SessionAttributes获取值
* @param modelMap
* @return
*/
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap) {
/*ModelMap是Model的底层实现类*/
String msg =(String) modelMap.get("msg");
System.out.println(msg);
return "good";
}
@RequestMapping("/delSessionAttributes")
public String delSessionAttributes(SessionStatus status) {
/*清除session中的值*/
status.setComplete();
return "good";
}
}
<a href="../session/saveSessionAttributes">saveSessionAttributes</a><br>
<a href="../session/getSessionAttributes">getSessionAttributes</a><br>
<a href="../session/delSessionAttributes">delSessionAttributes</a>
saveSessionAttributes测试中的msg:${msg}
7.返回string解析为jsp页面和无返回值void的重定向实验。
/**
* 返回ModelAndView对象
* 测试直接返回string视图解析为为jsp,关键字请求转发和重定向。
* 返回void重定向和请求转发以及直接响应的测试
*
* 测试ResponseBody注解返回ajax以及map。
* ResponseBody的作用其实是将java对象转为json格式的数据。
* responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,
* 写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
* 注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
* @author 骆尊
*/
@Controller
@RequestMapping("/test")
public class TestController {
/**
* 测试返回ModelAndView对象
* @return
*/
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView() {
System.out.println("testModelAndView方法执行了...");
/*新建mav对象*/
ModelAndView mav = new ModelAndView();
/*在mav对象中存储一组数据*/
mav.addObject("msg", "小风");
/*设置跳转的页面*/
mav.setViewName("good");
return mav;
}
/**
* 直接返回jsp页面
* 关键字请求转发
* 关键字重定向
* @return
*/
@RequestMapping("/jsp")
public String testJsp() {
/*1.字符串视图解析器*/
return "good";
/*2.请求转发*/
//return "forward:/views/good.jsp";
/*3.重定向*/
//return "redirect:/views/good.jsp";
}
@RequestMapping("/forward")
public String testForward() {
/*1.字符串视图解析器*/
//return "good";
/*2.请求转发*/
return "forward:/views/good.jsp";
/*3.重定向*/
//return "redirect:/views/good.jsp";
}
@RequestMapping("/redirect")
public String testRedirect() {
/*1.字符串视图解析器*/
//return "good";
/*2.请求转发*/
//return "forward:/views/good.jsp";
/*3.重定向*/
return "redirect:/views/good.jsp";
}
/**
* 无返回值,默认值为testVoid.jsp
* 404错误
*/
@RequestMapping("/testVoid")
public void testVoid() {
System.out.println("testVoid方法执行了");
}
/**
* 无返回值
* 有请求转发
*/
@RequestMapping("/testVoid1")
public void testVoid1(HttpServletRequest request, HttpServletResponse response) {
System.out.println("testVoid1方法执行了");
/*请求转发*/
try {
request.getRequestDispatcher("/views/good.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 无返回值有重定向
* @param request
* @param response
*/
@RequestMapping("/testVoid2")
public void testVoid2(HttpServletRequest request,HttpServletResponse response) {
System.out.println("testVoid2方法执行了");
/*重定向*/
try {
response.sendRedirect(request.getContextPath()+"/views/good.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 无返回值 直接进行响应测试
* @param response
*/
@RequestMapping("/testVoid3")
public void testVoid3(HttpServletResponse response) {
System.out.println("testVoid3方法执行了");
/*直接进行响应的*/
/*解决直接响应的中午乱码问题*/
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
try {
response.getWriter().print("您好!");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 测试返回ajax内容
* @return
*/
@RequestMapping("/ajax")
public @ResponseBody User testAjax(@RequestBody User user) {
System.out.println("ajax模拟执行了。。。");
System.out.println(user);
user.setPassword("123456");
user.setUserId("123456");
user.setUsername("123456");
return user;
}
/**
* 测试返回map
* @return
*/
@RequestMapping("/map")
@ResponseBody
public Map testMap() {
Map map = new HashMap();
map.put("result", true);
return map;
}
}
8.return:关键字请求转发,重定向;
/*2.请求转发*/
return "forward:/views/good.jsp";
request.getRequestDispatcher("/views/good.jsp").forward(request,response);
/*3.重定向*/
return "redirect:/views/good.jsp";
response.sendRedirect(request.getContextPath()+"/views/good.jsp");