SpringMVC响应数据和结果视图

返回值类型

返回值类型是String

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应</title>
</head>
<body>
<a href="/user/testString">testString</a>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("方法执行了");
        //模拟从数据库查询user对象。
        User user = new User();
        user.setUsername("meimei");
        user.setPassword("123456");
        user.setAge(13);
        //model对象
        model.addAttribute("user_test",user);
        return "success";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>成功</h3>
${user_test.username}
${user_test.password}
${user_test.age}
</body>
</html>

返回值是void

package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //返回值为空时,默认请求的是请求路径名称的jsp文件。此方法请求的是/pages/testVoid.jsp
        System.out.println("testvoid方法执行");
        //如果不使用默认,手动添加请求转发,手动转发不触发视图解析器。
        //请求转发是一次请求,不用编写项目名称。
        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        //重定向的写法,两次请求
        response.sendRedirect(request.getContextPath()+"/index.jsp");
        //设置中文乱码
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");
        //直接进行响应
        response.getWriter().print("Hello");
        return;
    }

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应</title>
</head>
<body>
<a href="/user/testVoid">testVoid</a>
</body>
</html>

返回值为ModelAndView

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应</title>
</head>
<body>
<a href="/user/testModelAndView">testModelAndView</a>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        ModelAndView modelAndView= new ModelAndView();
        //模拟从数据库查询user对象。
        User user = new User();
        user.setUsername("meimei");
        user.setPassword("123456");
        user.setAge(13);
        //把user对象存储到modelAndView对象中,也会把user存储到request对象中。
        modelAndView.addObject("user",user);
        //跳转到页面,采用视图解析器的方式。
        modelAndView.setViewName("success");
        return modelAndView;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>成功</h3>
${user.password}
${user.username}
</body>
</html>

spring中重定向redirect不能访问/WEB-INF下的资源,这样写会报404

forward和redirect关键字页面跳转

package com.example.Controller;

import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
@RequestMapping("/user")
public class UserController {
	@RequestMapping("/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("testForwardOrRedirect执行了");
        //请求的转发
        return "foward:/WEB-INF/pages/success.jsp";
        //重定向 底层加入了项目名
        //return "redorect:/index.jsp";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应</title>
</head>
<body>
<a href="/user/testForwardOrRedirect">testForwardOrRedirect</a>
</body>
</html>

@ResponseBody响应json数据

资源拦截问题的处理

DispatcherServlet会拦截所有的资源,导致一个问题就是静态资源(img,css,js)也会被拦截,从而导致不能使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件中添加配置。

<url-pattern>/*</url-pattern>会拦截JSP,静态文件,不拦截Servlet,拦截陌生URL
<url-pattern>/</url-pattern>拦截静态文件,不拦截JSP和Servlet,拦截陌生URL,springMVC默认采用该模式。

<!--告诉前端控制器哪些静态资源不拦截 location指本地文件夹-->
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/images/**" location="/images/"/>

在java中使用json数据时,需要导入jar包:jackson-databindjackson-annotationsjackson-core

使用ajax发送数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应</title>
    <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.4.2/jquery.min.js"></script>
    <script>
        $(function (){
            $("#btn").click(function (){
                //发送ajax请求
                $.ajax({
                    //json格式数据设置属性和值
                    url:"/user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123","age":12}',
                    dataType:"json",
                    type:"post",
                    success:function (data){//data是服务器响应的数据,进行解析

                    }
                });
            });
        });
    </script>
</head>
<body>
<button id="btn">发送ajax请求</button>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
	@RequestMapping("/testAjax")
    public void testAjax(@RequestBody String body){
        System.out.println(body);
    }
}

@ResponseBody响应数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应</title>
    <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.4.2/jquery.min.js"></script>
    <script>
        $(function (){
            $("#btn").click(function (){
                //发送ajax请求
                $.ajax({
                    //json格式数据设置属性和值
                    url:"/user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123","age":12}',
                    dataType:"json",
                    type:"post",
                    success:function (data){//data是服务器响应的数据,进行解析
                        alert(data);
                        alert(data.username);
                        alert(data.password);
                    }
                });
            });
        });
    </script>
</head>
<body>
<button id="btn">发送ajax请求</button>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/testAjax")
    @ResponseBody
    public User testAjax(@RequestBody User user){
        //客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println(user);
        //做响应,模拟查询数据库
        user.setUsername("hh");
        user.setAge(40);
        //做响应
        return user;
    }
}

@ResponseBody的作用是将java对象转为json格式的数据。

posted @ 2021-02-28 20:26  笑忘书丶  阅读(101)  评论(0)    收藏  举报