详细解读-Spring响应处理

简介: 详细解读-Spring响应处理

SpringMvc_响应处理

当服务器向客户端响应数据时,SpringMVC框架会使用“转换器”(Converter)将方法的返回值进行转换,及处理响应时的响应头(Response Headers)等内容,针对返回值类型不同,SpringMVC框架还会自动使用不同的转换器。


1.使用默认内置视图解析器

jsp文件应该放在web文件中WEB-INF下,而不是放在/目录下,所以为了找到对应的jsp,使用视图解析器来找到对应文件,在xml文件中加入:

<!--    配置默认视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>


2.使用视图控制器

因为默认启动服务器,开始默认页面是/目录下的jsp,而之前/目录下的jsp移动到了WEB-INF下,所以启动服务器后会找不到页面,此时需要用到视图控制器,来给默认启动后的服务器添加一个默认页面;

<!--    视图控制器-->
    <mvc:view-controller path="/" view-name="index"/>


3.使用Model,Map,ModelMap传输数据到页面

在刚开始的helloworld项目中,我们传递了参数回到我们页面,但是后 续的操作都只是接受用户的请求,那么在SpringMVC中除了可以使用原生 servlet的对象传递数据之外,还有什么其他的方式呢?

可以在方法的参数上传入Model,ModelMap,Map类型,此时都能够 将数据传送回页面,

这几种类型引用都非常简单


Model类型:

@RequestMapping("/model")
    public String model(Model model){
        System.out.println(model.getClass());
        model.addAttribute("type","model");
        return "main";
    }


Modelmap类型:

@RequestMapping("/modelmap")
    public String modelmap(ModelMap modelMap){
        System.out.println(modelMap.getClass());
        modelMap.addAttribute("type","modelmap");
        return "main";
    }


map类型:

 @RequestMapping("/map")
    public String map(Map map){
        System.out.println(map.getClass());
        map.put("type","map");
        return "main";
    }

这三种类型之间十分相似,所以书写时也比较类似


4.使用ModelAndView对象传输数据到页面

当使用modelAndView对象的时候,返回值的类型也是此对象, 可以将要跳转的页面设置成view的名称,来完成跳转的功能,同时数据也是放到 request作用中。建议使用此类型进行数据传输

 @RequestMapping("/modelview")
    public  ModelAndView modelAndView(){
        ModelAndView my = new ModelAndView("main");
        my.addObject("type","modelview");
        return my;
    }


5.使用session传输数据到页面

1.通过servlet api的方式去读写session

  1. 通过参数绑定的方式去获取servlet ap
 @RequestMapping("/servletapi/session")
    public String session01(HttpSession session){
        session.setAttribute("type","servletapi-session");
        return "main";
    }`


  1. 通过自动注入的方式去获取servlet api(推荐使用这种方式)
 @Autowired
    private HttpSession session;
    /**
     * 通过自动注入的方式去获取servlet api
     */
    @RequestMapping("/autowired/session")
    public String session02(){
        session.setAttribute("type","autowired-session");
        return "main";
    }


2.通过springmvc提供的注解方式去读写session

* @SessionAttribute 获取session
     *  required 用来设置session中某个属性必须存在 , 不存在则会报错:HTTP Status 400 - Missing session attribute 'type' of type String
     *  model和session是互通的:session可以通过model中去获取写入指定的属性, model也会从session中自动写入指定的属性
     * @param type
     * @return
     */
    @RequestMapping("/annotation/session")
    public String session03(@SessionAttribute(value="type",required = false) String type,Model model ){
        System.out.println(type);
        // model.addAttribute("type",type); 相当于隐式往model也写入了type
        return "main";
    }


使用@ModelAttribute来获取请求中的数据(不推荐)

这种方法相对于前两种来说线程不安全所以这里不再说明了,想要了解的可以自行学习

3种方式的获取servlet­­api的线程安全问题:

1. 通过参数绑定的方式

是线程安全的,因为参数绑定变量时方法级别,所以每次请求方法都会创建一个新的私 有变量。

2.通过自动注入的方式@AutoWired

是线程安全的,spring底层通过自动注入 将 servlet api 封装到ThreadLocal(是绑定 在线程上面的)里面.

3.通过@ModelAttribute的方式 不是线程安全的控制器是单例的,并且变量声明在类的级别中(共享变量)


6.使用forward实现页面转发

在发送请求的时候,可以通过forward:来实现转发的功能:

 /**
     * 转发请求处理
     * forward:转发,它不会经过视图解析器的解析
     * 适用于当访问的视图不在我们指定的前缀下
     */
    @RequestMapping("/forward")
    public String forward(Model model){
        model.addAttribute("type","转发");
        return "forward:/login.jsp";
    }


7.使用redirect来实现重定向

 /**
     * 重定向请求处理
     * redirect:它不会经过视图解析器的解析,需要写上完整的逻辑视图名称
     *  重定向不能将地址重定向到WEB-INF中
     *  springmvc转发和重定向的“/” 都定位到项目名这一级
     *  response.sendRedirect("/")
     */
    @RequestMapping("/redirect")
    public String redirect(Model model){
        model.addAttribute("type","转发");
        return "redirect:/login.jsp";
    }


相关文章
|
1月前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
49 1
Spring MVC——获取参数和响应
|
1月前
|
JSON 前端开发 Java
Spring Boot框架中的响应与分层解耦架构
在Spring Boot框架中,响应与分层解耦架构是两个核心概念,它们共同促进了应用程序的高效性、可维护性和可扩展性。
51 3
|
1月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
168 2
|
5月前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring MVC 响应
【JavaEE进阶】 关于Spring MVC 响应
58 3
|
5月前
|
JSON 前端开发 Java
Spring第二课响应的完全,如何理解前后端互联
Spring第二课响应的完全,如何理解前后端互联
|
5月前
|
JSON 前端开发 Java
Spring Web MVC入门(3)——响应
Spring Web MVC入门(3)——响应
54 1
|
5月前
|
前端开发
Spring-MVC的数据响应-19
Spring-MVC的数据响应-19
|
5月前
|
JSON 前端开发 Java
spring mvc 请求与响应
spring mvc 请求与响应
28 0
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
61 0
|
6月前
|
JSON 前端开发 Java
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!