springmvc 响应,同步-页面跳转,异步-网络请求返回数据 ; ajax异步交互; restful前后端分离开发风格;
异常统一处理;拦截器
一.SpringMVC的响应:
(1)页面跳转=====转发
方式一:简单方式
方式 二: forward关键字:
此关键字的底层就是:request.getRequestDispatcher("跳转路径").forward(req,resp);
此关键字在使用后,不在经过视图解析器进行字符串的拼接...
@RequestMapping("/quick")
public String quick(){
// return "success"; //方式一
// int i=1/0;
return "forward:/WEB-INF/pages/success.jsp"; //方式二
}
方式三:servlet原生API
转发携带数据:(request域)
方式一:ServletAPI
@RequestMapping("/requestApiData") //
public void requestApiData(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws ServletException, IOException{
request.setAttribute("message","requestApiData==方式四转发携带数据:");
request.getRequestDispatcher("/WEB-INF/pages/successData.jsp").forward(request,response);
}
方式二:ModelAndView对象
@RequestMapping("/modelAndView")
public ModelAndView modelAndView(ModelAndView modelAndView){
modelAndView.addObject("message","modelAndView==方式四转发携带数据:");
modelAndView.setViewName("successData");
return modelAndView;
}
方式三:Model对象:
@RequestMapping("/quickModel")
public String quickModel(Model model){
model.addAttribute("message","quickModel==b不会收到的");
return "successData";
}
(2)页面跳转---重定向
方式一:redirect 关键字
此关键字的底层:response.sendRedirect("web项目地址+重定向地址");
而且还在此技术上进行了优化,我们不需要再去编写web项目地址,直接编写重定向地址.
//方式一
@RequestMapping("/redirect")
public String redirect(){
return "redirect:/index.jsp";
}
方式二:servlet原生API
@RequestMapping("/responseRedirect")
public void responseRedirect(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws ServletException ,IOException{
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
二、ajax异步交互
需求:
发送$.ajax()
响应new ObjectMapper().writeValueAsString()
关于SpringMVC框架,ajax异步请求,后端响应json
在SpringMVC中,这个功能主要是通过两个注解@RequestBody 和 @ResponseBody实现的
注意:
SpringMVC默认用MappingJackson2HttpMessageConverter对json数据进行转换,需要加入jackson的包
<!--jsckson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
(1)RequestBody
用于接收前端传递的请求体中的json数据, 并可以自动转换封装进指定的对象中。
开启静态资源放行:
页面引入jquery文件
编写ajax代码:
<button id="ajaxBtn">发送ajax请求</button>
<script>
$('#ajaxBtn').click(function () {
// alert(1)
/*
使用: $.ajax() 函数
规则:
1.ajax提交的数据必须是一个标准的json字符串
2.ajax提交的方式必须为post,数据必须在请求体中
3.ajax提交的MIME类型必须为:application/json;charset=utf-8
*/
$.ajax({
url: '${pageContext.request.contextPath}/ajaxRequest',
type: 'POST',
data: '{"username":"lucy","age":18}',
contentType:'application/json;charset=utf-8',
success: function (resp) {
}
});
})
</script>
编写User实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
}
获取请求体的json数据