springmvc当中常见的注解
重要的事情写在前面:
下面代码中的 return seccess 之类的。由modeandview对象返回的话 是有视图解析器管理的, 可以省略前后缀。但是要配置!!!
2.1 @RequestParam() 注解的使用
@RequestMapping("/findUser")
作用: 当前端请求的key 和参数绑定的key不一致的时候呀, 可以使用该注解。
public ModelAndView findUser(@RequestParam(value="name",required=true) String username) {
ModelAndView mav = new ModelAndView();
mav.setViewName("success");
System.out.println("username:"+username);
return mav;
}
2.2 @RequestBody
/*
* 测试@requestBody注解
* 作用: 能够获得前端的请求体:
* 请求体: get: 没有请求体, 抛出一个异常:400
* post: username=lisi&password=123
*/
@RequestMapping("/getBody")
public ModelAndView getBody(@RequestBody String body) {
ModelAndView mav = new ModelAndView();
mav.setViewName("success");
System.out.println("username:"+body);
return mav;
}
2.3 resultful风格介绍
restFul风格, 只是开发的风格, 不是规范, 也不是规定。
同样的 url 用不同的方法去发送,
2.4 @PathVariable(" ")
/*
* @RequestMapping("/findUser2/{id}") {id}占位符:
* 请求地址; user/findUser2/num
*
* @PathVariable("sid") 获得URL当中的请求的num:
*/
@RequestMapping("/findUser2/{sid}")
public ModelAndView findUser2(@PathVariable("sid") String id) {
ModelAndView mav = new ModelAndView();
mav.setViewName("success");
System.out.println(id);
return mav;
}
2.5 @RequestHeader(“headerName”)
获得指定的头的名称对应的值:
@RequestMapping("/getHeader")
public ModelAndView getHeader(@RequestHeader("accept") String header) {
ModelAndView mav = new ModelAndView();
mav.setViewName("success");
System.out.println(header);
return mav;
}
2.6 @CookieValue()
/**
* @CookieValue("JSESSIONID") 指定一个cookie的名称, 能够获得cookie名称对应的值:
* @param cookieValue
* @return
*/
@RequestMapping("/getCookie")
public ModelAndView getCookie(@CookieValue("JSESSIONID") String cookieValue) {
ModelAndView mav = new ModelAndView();
mav.setViewName("success");
System.out.println(cookieValue);
return mav;
}
2.7 @ModelAttribute 注解
2.7.1使用方式一: 具有返回值的方法;
@RequestMapping("/updateUser")
public ModelAndView updateUser(User user ) {//直接进行参数绑定,就可以获得值
ModelAndView mav = new ModelAndView();
mav.setViewName("success");
System.out.println("controller执行了:");
System.out.println(user);
return mav;
}
@ModelAttribute
public User test(String id) {
//模拟查询数据:
User user = new User();
user.setUsername("xxx");
user.setPassword("123");
System.out.println("modelAttribute 方法在controller之前执行: ");
return user;
}
2.7.2使用方式二: 不具有返回值的方法;
@RequestMapping("/updateUser")
public ModelAndView updateUser(@ModelAttribute("aaa")User user ) {
ModelAndView mav = new ModelAndView();
mav.setViewName("success");
System.out.println("controller执行了:");
System.out.println(user);
return mav;
}
@ModelAttribute
public void test(Map<String,User>map, String id) {
//模拟查询数据:
User user = new User();
user.setUsername("xxx");
user.setPassword("123");
map.put("aaa", user);
System.out.println("modelAttribute 方法在controller之前执行: ");
}
3 方法的返回值以及响应数据
3.1 返回值ModelAndView
@RequestMapping("/findPro")
public ModelAndView findPro(String id) {
System.out.println(id);
User user = new User();
user.setUsername("lisi");
user.setPassword("1234");
//返回值的类型ModelAndView:
/*
* ModelAndView: 既能够封装数据, 又能够跳的页面:
*/
ModelAndView mav = new ModelAndView();
mav.addObject("user",user); //request.setAttribute("attName","attValue");
//视图的跳转:
mav.setViewName("success");
return mav;
}
**3.2 返回值的类型: String类型**
/**
* 返回值是String类型:
* 返回值:就是页面跳转的路径:
*
* 向页面传递的参数: 封装在Model接口当中:
* @param id
* @return
*/
@RequestMapping("/findPro2")
public String findPro2(String id,Model model) {
System.out.println(id);
User user= new User();
user.setUsername("翠花");
user.setPassword("383838");
model.addAttribute("user", user);
return "success";
}
@RequestMapping("/findPro3")
public String findPro2(String id,ModelMap map) {
System.out.println(id);
User user= new User();
user.setUsername("翠花2");
user.setPassword("484884848");
map.addAttribute("user", user);
return "success";
}
3.3 返回值void
没有设置返回值, controller方法执行完毕后,默认情况会跳转到一个请求的地址对应的.jsp页面。
/**
* 第一:
* 使用传统的servlet的API,可以直接绑定在参数上。
* 第二: 手动转发的时候, 转发的路径必须自己写全了。 手动转发,不走视图解析器:
* 第三: 页面转发完成或者是重定向完成后, return 关键字结束。
*
* 进行异步请求,异步相应数据, 不需要进行页面跳转的时候, 返回值一般void:
* 当需要进行同步跳转, 一般把返回值设置为String。
* ModelAndView是一个底层对象, 一般情况不使用:
* @throws IOException
* @throws ServletException
*
*/
@RequestMapping("deletePro")
public void deletePro(String id,HttpServletRequest request,HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=utf-8");
System.out.println("delete方法执行了: ");
User user = new User();
user.setUsername("张无忌");
user.setPassword("2323");
request.setAttribute("user", user);
//转发: 使用传统的servlet的技术, 实现转发:
//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
// response.sendRedirect(request.getContextPath()+"/success.jsp");
// 直接向客户端浏览器输出内容;
response.getWriter().println("客户端你好啊");
return;
}
3.4 返回值为String进行手动转发和重定向
//返回值类型: 是String类型, 可以进行手动的转发: 或者是重定向: 视图解析器不参与:
@RequestMapping("/findPro4")
public String findPro4(String id,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);// 内部:
//response.sendRedirect(request.getContextPath()+"/success.jsp");
return "success";
}
3.5 redirect & forward关键字实现重定向和转发
/*
* 返回值是String类型: 进行页面的转发或者是重定向:
*
* return "forward:url";此时可以实现转发操作; 不走视图解析器: 路径必须写全:
* return "redirest:url";此时能够进行重定向操作: 重定向地址栏发生变化, 不能重定向到web-inf下:
* 使用关键字进行重定向的时候,/ 相对于web应用:springmvc给做了相关的处理:
*/
@RequestMapping("/findPro4")
public String findPro4(String id,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//return "forward:/WEB-INF/pages/success.jsp";
return "redirect:/success.jsp";
}
3.6 springmvc 静态资源放行
Img link script 标签, 在页面加载的时候,都会自动发出请求。 默认情况, 前端控制器对静态资源进行了拦截。 我们需要对这些静态的资源进行放行。
在springmvc.xml当中: 配置静态资源放行;
<!-- 对指定目录下的静态资源放行
location: 指定放行的位置:
mapping:q请求的地址: /images/* 请求路径/images/xxx都会放行:
/images/** 请求路径: /images/xxx/xxx/yy 都会放行:
-->
<mvc:resources location="/images/" mapping="/images/*"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
3.7 发送ajax请求,数据异步响应
3.7.1 前端发送ajax请求:
$(function(){
$("#btn").click(function(){
$.ajax({
url: "productor/getJson",
contentType:"application/json;charset=utf-8",
data:'{"username":"lisi","password":"121212"}',
type: "POST",
dataType:"json",
success:function(){
alert("xx");
}
});
});
});
3.7.2 后端获得请求数据。异步响应。