springMVC框架学习-2
程序员文章站
2022-06-02 21:21:36
...
springMVC框架学习安排
目录
第二天
1. 响应数据和结果视图
1. 响应返回值分类
1. 响应String字符串
@RequestMapping("testString")
public String testString(Model model){
User user = new User();
user.setUname("liuzeyu");
user.setAge(100);
model.addAttribute("user",user);
return "success";
}
<%@page contentType="text/html; charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>入门成功</title>
</head>
<body>
<h2>执行成功</h2>
${requestScope.user.uname}<br>
${requestScope.user.age}
</body>
</html>
2. 响应void
<a href="user/testVoid">测试返回void</a>
@RequestMapping("testVoid")
public void testVoid() throws Exception {
System.out.println("testVoid......");
}
如果以上面的形式返回,则将报错404
出现此问题是无返回值时,springMVC默认把请求的路径当作转发的路径使用了,解决的办法有两个:
- 转发:
@RequestMapping("testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("testVoid......");
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
}
回顾请求转发的特点:
1. 请求只发送一次
2. 浏览器地址栏路径不会改变
3. 只能转发服务内部的资源,这里是webapp下的资源,必须由 / 开头
- 重定向:
@RequestMapping("testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("testVoid......");
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
回顾重定向特点:
1.浏览器地址栏会发送变化,如上图
2.可以重定向到服务器外部资源
3.重定向会发送两个请求,成功的话对应的状态码分别是302,200
3. 响应ModelAndView
<a href="user/testModelAndView">测试返回ModelAndView</a>
@RequestMapping("testModelAndView")
public ModelAndView testModelAndView(){
System.out.println("testModelAndView......");
ModelAndView mv = new ModelAndView();
User user = new User();
user.setUname("liuzeyu");
user.setAge(100);
mv.addObject("user",user);
mv.setViewName("success"); //设置转发视图
return mv;
}
4. 使用forward和redirect进行页面响应跳转
<a href="user/testForwardAndRedirect">测试返回testForwardAndRedirect</a>
@RequestMapping("testForwardAndRedirect")
public String testForwardAndRedirect(){
//return "forward:/WEB-INF/pages/success.jsp";
return "redirect:/index.jsp";
//return "redirect:/WEB-INF/pages/success.jsp"; //不能访问WEB-INF下的web文件
}
5. 为什么redirect重定向不能访问WEB-INF目录下的内容?
答案还得从WEB-INF这个目录的作用说起
WEB-INF目录是Java的Web应用安全目录,客户端是无法访问的,只有服务器能访问。将一些页面放在这个目录下可以限制外部访问,提高安全性,如一些jsp,html页面。
原因:
既然是安全目录,客户端无法访问,那重定向当然是无法访问到的,因为重定向的特点是客户端没有直接请求服务器资源,而是二次请求服务器资源,因此是属于直接访问内部资源的,这是不被允许的。
然而请求转发是请求服务器去转发访问资源,因此服务器是可以访问资源的。
6. 响应json数据
- 加载jQuery文件(也不明白为什么本地会加载失败)
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
- 添加按钮和点击事件
<script>
$(function () {
$("#bt").click(function () {
alert("按钮被点击了....")
$.ajax({
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
type:"post",
data:'{"uname":"liuzeyu","age":"66"}',
success:function (data) {
//接收服务器响应的数据
}
});
});
});
</script>
<button id="bt"> 发送异步请求</button>
- controller层接收
@RequestMapping("testAjax")
public void testAjax(@RequestBody String body){
System.out.println(body);
}
- controller层响应
@RequestMapping("testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
user.setAge(9999); //修改年龄为9999
System.out.println(user);
return user;
}
- 前端渲染
success:function (data) {
//接收服务器响应的数据
alert(data);
alert(data.uname); //liuzeyu
alert(data.age); //999
}
上一篇: Word模板引擎使用指南
下一篇: 框架学习二SpringMVC