欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>

springMVC框架学习-2

2. 响应void
<a href="user/testVoid">测试返回void</a>
    @RequestMapping("testVoid")
    public void testVoid() throws Exception {
        System.out.println("testVoid......");
    }

如果以上面的形式返回,则将报错404
springMVC框架学习-2
出现此问题是无返回值时,springMVC默认把请求的路径当作转发的路径使用了,解决的办法有两个:

  1. 转发:
    @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下的资源,必须由 / 开头
  1. 重定向:
    @RequestMapping("testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("testVoid......");
        response.sendRedirect(request.getContextPath()+"/index.jsp");
    }

springMVC框架学习-2
回顾重定向特点:

1.浏览器地址栏会发送变化,如上图
2.可以重定向到服务器外部资源
3.重定向会发送两个请求,成功的话对应的状态码分别是302200
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数据
  1. 加载jQuery文件(也不明白为什么本地会加载失败)
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
  1. 添加按钮和点击事件
<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>
  1. controller层接收
    @RequestMapping("testAjax")
    public void testAjax(@RequestBody String body){
        System.out.println(body);
    }

springMVC框架学习-2

  1. controller层响应
    @RequestMapping("testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        user.setAge(9999);   //修改年龄为9999
        System.out.println(user);
        return user;
    }
  1. 前端渲染
success:function (data) {
                   //接收服务器响应的数据
                   alert(data);
                   alert(data.uname);  //liuzeyu
                   alert(data.age);   //999
               }