• Spring MVC 响应视图(六)


    完整的项目案例: springmvc.zip

    目录

    实例

    除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)

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

    项目结构:

    配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
        <!-- 请求总控器 -->
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:dispatcher-servlet.xml</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    View Code

    配置dispatcher-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <context:component-scan base-package="edu.nf.ch06.controller"/>
    
        <mvc:annotation-driven/>
    
        <mvc:default-servlet-handler/>
    
        <!-- springmvc提供了很多种视图解析器来完成不同的视图解析工作,
         例如内部资源视图解析器、模板引擎的视图解析器、XML视图解析器等等
         ,而在配置文件中是可以同时配置多个视图解析器的,那么Springmvc
         在做视图响应的时候,会根据配置文件中的配置的所有视图解析器按照顺序
         进行匹配,直到找到一个合适的视图解析器来完成解析。当有多个视图解析器存在时,
         可以通过order属性来指定解析器的优先级(<property name="order" value="0"/>)-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>

    请求控制器Controller

    (RedirectAttributesController)

    package edu.nf.ch06.controller;
    
    import edu.nf.ch06.entity.Users;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.servlet.mvc.support.RedirectAttributes;
    
    /**
     * @author wangl
     * @date 2018/10/31
     * 使用RedirectAttributes解决重定向传参的问题
     * 这个对象是在Springmvc 3.1的版本加入的
     */
    @Controller
    public class RedirectAttributesController {
    
        /**
         * 重定向一个JSP页面,使用addAttribute的方式
         * 将参数绑定在重定向的url后面带回到页面
         * @param user
         * @param redirectAttributes
         * @return
         */
        @PostMapping("/redirect3")
        public String redirectPage(Users user, RedirectAttributes redirectAttributes){
            redirectAttributes.addAttribute("user", user.getUserName());
            return "redirect:redirectattr.jsp";
        }
    
        /**
         * 重定向一个新的请求,使用FlushAttribute的方式,
         * 将数据存入一个FlushMap中,它利用了Session的机制保存,
         * 在重定向完成之后会自动清除这个对象
         *
         * @param user
         * @param redirectAttributes
         * @return
         */
        @PostMapping("/redirect4")
        public String redirectReq(@ModelAttribute("user") Users user, RedirectAttributes redirectAttributes){
            redirectAttributes.addFlashAttribute("user", user);
            return "redirect:redirectAction";
        }
    
        /**
         * 从redirect4的请求重定向到这个方法
         * @param user
         * @return
         */
        @GetMapping("/redirectAction")
        public String getRedirectAttr(@ModelAttribute("user") Users user){
            System.out.println(user.getUserName());
            return "index";
        }
    }
    View Code

    (ResponseBodyController)

    package edu.nf.ch06.controller;
    
    import edu.nf.ch06.entity.Users;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author wangl
     * @date 2018/10/31
     */
    //@Controller
    
    /**
     * @RestController是在spring4.0后新加入的一个注解,
     * 同样用于标注一个类为控制器组件,如果当前控制器中所有的
     * 请求处理方法都需要以ResponseBody的方式响应,那么
     * 就是用这个注解,而不需要再每一个方法上都标注@ResponseBody注解
      */
    @RestController
    public class ResponseBodyController {
    
        /**
         * 使用@ResponseBody标注,
         * 表示将方法的返回值以Response输出流写回客户端,
         * 这时,springmvc就会将序列化的数据放入响应体中并写回
         * @return
         */
        @GetMapping("/getUser")
        public Users getUser(){
            Users user = new Users();
            user.setUserName("user1");
            user.setAge(21);
            return user;
        }
    }
    View Code
    (RequestBodyController)
    package edu.nf.ch06.controller;
    
    import edu.nf.ch06.entity.Users;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author wangl
     * @date 2018/10/31springmvc
     */
    @RestController
    public class RequestBodyController {
    
        /**
         * 接收ajax提交的数据并做类型转换映射
         * @param user
         * @return
         */
        @PostMapping("/addUser")
        public String addUser(Users user){
            System.out.println(user.getUserName());
            System.out.println(user.getAge());
            return "success";
        }
    
        /**
         * 是用@RequestBody标注参数,
         * 表示将接收的json文本数据进行格式转换后映射到实体中
         * @param user
         * @return
         */
        @PostMapping("/addUser2")
        public String addUser2(@RequestBody Users user){
            System.out.println(user.getUserName());
            System.out.println(user.getAge());
            return "success";
        }
    }
    View Code
    (UserController)
    package edu.nf.ch06.controller;
    
    import edu.nf.ch06.entity.Users;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.view.RedirectView;
    
    import java.util.Map;
    
    /**
     * @author wangl
     * @date 2018/10/31
     */
    @Controller
    public class UserController {
    
        /**
         * 转发视图
         */
        @GetMapping("/forwrd1")
        public ModelAndView forward1(){
            //通过ModelAndView转发
            return new ModelAndView("index");
        }
    
        @GetMapping("/forwrd2")
        public String forward2(){
            //通过ModelAndView转发
            return "index";
        }
    
        /**
         * 重定向视图
         * @return
         */
        @GetMapping("/redirect1")
        public ModelAndView redirect1(){
            //在ModelAndView的构造方法传入一个RedirectView的视图对象来完成重定向
            //return new ModelAndView(new RedirectView("redirect.jsp"));
            //简化
            return new ModelAndView("redirect:redirect.jsp");
        }
    
        @GetMapping("/redirect2")
        public String redirect2(Users user){
            return "redirect:redirect.jsp";
        }
    }
    View Code
  • 相关阅读:
    python解压缩rar,zip文件的正确姿势
    tensorflow1.x及tensorflow2.x不同版本实现验证码识别
    qt5.6.3下使用firebird
    Python3.6下的Requests登录及利用Cookies登录
    c++实现全密码生成
    android中利用HttpURLConnection进行Get、Post和Session读取页面。
    Freebsd10.3 Nginx多版本PHP
    Freebsd10.3(FreeBSD11 Beta1)使用手记
    Eclipse导入的User Libarary
    MySQL zip版本安装
  • 原文地址:https://www.cnblogs.com/hhmm99/p/9922718.html
Copyright © 2020-2023  润新知