Java框架_SpringMVC_day04_响应数据

目录

五、数据相应和结果视图

5.1 开发准备

5.1.1 导入jar包

5.1.2 配置 web.xml

5.1.3 springmvc.xml

5.1.4 index.jsp

5.1.5 success.jsp

5.1.6 Controller

5.2 返回值为字符串

5.2.1 response.jsp

5.2.2 Controller

5.2.3 update.jsp

5.2.4 点击提交

5.3 返回值为 void

5.3.1 response.jsp

5.3.2 Controller

5.4 返回值是 ModelAndView 对象

5.4.1 response.jsp

5.4.2 Controller

5.4.3 导入 jstl 的坐标

5.4.4 success.jsp(遍历 list )

5.5 SpringMVC 框架提供的转发和重定向

5.5.1 response.jsp

5.5.2 forward 请求转发

5.5.3 redirect 重定向

5.6 @ResponseBody 响应 json 数据

5.6.1 去掉静态资源的拦截

5.6.2 使用 @RequestBody 获取请求的数据

5.6.3 使用 @ResponseBody 注解将 JavaBean 对象转换成 Json 返回

5.6.4 Jackson 的 jar 包

5.6.5 小结


五、数据相应和结果视图

5.1 开发准备

5.1.1 导入jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cpz</groupId>
    <artifactId>springmvc_response</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.0.2.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>
</project>

5.1.2 配置 web.xml

<!-- SpringMVC的核心控制器 -->
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!-- 配置servlet启动时加载对象 -->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!--处理乱码的过滤器-->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

5.1.3 springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 1:配置spring创建容器时要扫描的包 -->
    <context:component-scan base-package="com.cpz"></context:component-scan>
    <!-- 2:配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!-- 3:配置spring开启注解mvc的支持 -->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

5.1.4 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>响应测试</h1>
<a href="user/testUserController">测试UserController</a>
<hr/>

</body>
</html>

5.1.5 success.jsp

<body>
<h1>访问成功</h1>
</body>

5.1.6 Controller

@Controller
@RequestMapping(value = "/user")
public class UserController {

    @RequestMapping(value = "/testUserController")
    public String testUserController(){
        System.out.println("执行了 UserController 的 testUserController 方法 !!! ");
        return "success";
    }
}

5.2 返回值为字符串

5.2.1 response.jsp

<body>
<h3>返回字符串</h3>
<a href="user/testReturnString">返回字符串</a><br>
<a href="user/userUpdate">修改用户(表单回显)</a>
</body>

5.2.2 Controller

    @RequestMapping(value = "/testReturnString")
    public String testReturnString(){
        System.out.println("执行了 UserController 的 testReturnString 方法 !!! ");
        return "success";
    }

    @RequestMapping(value = "/testUserUpdate")
    public String testUserUpdate(Model model){
        System.out.println("执行了 UserController 的 testUserUpdate 方法 !!! ");
        // 模拟从数据库中查询的数据,在页面上进行回显
        User user = new User();
        user.setUsername("张三");
        user.setPassword("123456");
        user.setAge(22);
        model.addAttribute("user",user);
        return "update";
    }

5.2.3 update.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h3>修改用户</h3>
<%--${ requestScope }--%>
<form action="${ pageContext.request.contextPath }/user/update" method="post">
    <input type="text" name="username" value="${ user.username }"/><br/>
    <input type="text" name="password" value="${ user.password }"/><br/>
    <input type="text" name="age" value="${ user.age }"/><br/>
    <input type="submit" value="提交"/><br/>
</form>

</body>
</html>

5.2.4 点击提交

    @RequestMapping(value = "/update")
    public String update(User user){
        System.out.println("执行了 UserController 的 update 方法 !!! ");
        System.out.println(user);
        return "success";
    }

5.3 返回值为 void

5.3.1 response.jsp

<h3>无返回值void</h3>
<a href="user/testVoid">无返回值</a>

5.3.2 Controller

    @RequestMapping(value = "/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("执行了 UserController 的 testVoid 方法 !!! ");
        // 可以使用请求转发或者重定向跳转到指定的页面
        // 请求转发
        // request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        // 重定向
        //response.sendRedirect(request.getContextPath()+"/user/testReturnString");

        // 如果不指定转发和重定向,直接响应数据
        // 直接响应数据
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        response.getWriter().println("你好");
    }

【小结】void:执行视图解析器(如果不想通过视图解析器指定页面路径,可以通过自定义转发和重定向完成页面跳转)

5.4 返回值是 ModelAndView 对象

5.4.1 response.jsp

<h3>返回ModelAndView对象</h3>
<a href="user/testModelAndView">ModelAndView</a><br/>

5.4.2 Controller

    @RequestMapping(value = "/testModelAndView")
    public ModelAndView testModelAndView(){
        System.out.println("执行了 UserController 的 testModelAndView 方法 !!! ");
        ModelAndView mv = new ModelAndView();
        // 默认执行视图解析器,跳转到WEB-INF/pages/success.jsp的页面
        mv.setViewName("success");

        // 模拟从数据库中查询所有的用户信息
        List<User> list = new ArrayList<User>();
        User user = new User();
        user.setUsername("zhangsan");
        user.setAge(22);

        User user2 = new User();
        user2.setUsername("lisi");
        user2.setAge(20);

        list.add(user);
        list.add(user2);
        mv.addObject("list",list);
        return mv;
    }

5.4.3 导入 jstl 的坐标

<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

5.4.4 success.jsp(遍历 list )

<h3>查询所有的数据</h3>
<c:forEach items="${ list }" var="user">
    ${ user.username } --- ${ user.age }
</c:forEach>

【小结】ModelAndView在企业中应用较多,执行视图解析器(既有模型的功能,也有视图的功能)

5.5 SpringMVC 框架提供的转发和重定向

5.5.1 response.jsp

<h3>转发和重定向</h3>
<a href="user/testForwardOrRedirect">ForwardOrRedirect</a>

5.5.2 forward 请求转发

    @RequestMapping(value = "/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("执行了 UserController 的 testForwardOrRedirect 方法 !!! ");
//        return "forward:/WEB-INF/pages/success.jsp";
        return "forward:/user/testReturnString";
    }

5.5.3 redirect 重定向

    @RequestMapping(value = "/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("执行了 UserController 的 testForwardOrRedirect 方法 !!! ");
//        return "redirect:/WEB-INF/pages/success.jsp"; //不成功!!
        return "redirect:/user/testReturnString";
    }

5.6 @ResponseBody 响应 json 数据

5.6.1 去掉静态资源的拦截

<!--方案一:-->
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/js/" mapping="/js/**"/> 
<!--方案二:-->
<!--去掉所有的静态资源,让DispatchServlet不能拦截静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>

5.6.2 使用 @RequestBody 获取请求的数据

response.jsp

<script src="js/jquery.min.js"></script>
<script>
    $(function () {
        $("#btn").click(function () {
            //alert("ok");
            $.ajax({
                url:"user/testJson",
                contentType:"application/json;charset=UTF-8",
                data:'{"username":"tom","password":"123","age":"25"}',
                dataType:"json",
                type:"post",
                success:function (data) {
                    alert(data);
                    alert(data.username);
                    alert(data.password);
                    alert(data.age);
                }
            });
        })
    })
</script>

5.6.3 使用 @ResponseBody 注解将 JavaBean 对象转换成 Json 返回

Controller

    @RequestMapping(value = "/testJson")
    @ResponseBody
    public User testJson(@RequestBody User user){
        System.out.println("执行了 UserController 的 testJson 方法 !!! ");
        System.out.println(user);

        User u = new User();
        u.setUsername("张三");
        u.setPassword("123456");
        u.setAge(30);

        return u;
    }

5.6.4 Jackson 的 jar 包

json 字符串和 JavaBean 对象相互转换的过程中,需要使用 jackson 的 jar 包

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.0</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.0</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.9.0</version>
</dependency>

5.6.5 小结

@RequestBody的使用(json字符串-->javabean)

@ResponseBody的使用(javabean-->json字符串

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值