SpringMVC的响应

1. SpringMVC响应方式介绍

页面跳转

  1. 返回字符串逻辑视图
  2. void原始ServletAPI
  3. ModelAndView

返回数据

  1. 直接返回字符串数据
  2. 将对象或集合转为json返回(任务二演示)

2. 返回字符串逻辑视图

直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转到指定页面

@RequestMapping("/returnString") 
public String returnString() {
    return "success";
}

3. void原始ServletAPI

我们可以通过requestresponse对象实现响应.

package com.lagou.controller;

import com.lagou.domain.QueryVo;
import com.lagou.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

@Controller
@RequestMapping("/user") //一级访问目录
@SessionAttributes("username") //向request域中(model)中存入key为username时,会同步到session域中
public class UserController {


    // http://localhost:8080/springmvc_quickstart/user/quick    /一级访问目录/二级访问目录
    /*
        path :作用等同于value,同样是设置方法的映射地址
        method:用来限定请求的方式 RequestMethod.POST:只能以post的请求方式访问该访问,其他请求方式会报错
        params:用来限定请求参数的条件 params={"accountName"} 表示请求参数中必须有accountName
     */
    @RequestMapping(path = "/quick",method = RequestMethod.GET,params = {"accountName"}) // 二级访问目录
    public String quick(Integer id){
        // 业务逻辑
        System.out.println("springmvc入门成功.....");
        // 视图跳转 逻辑视图名
        return "success";
    }



    /*
        通过原始servletAPI进行页面跳转
     */

    @RequestMapping("/returnVoid")
    public void returnVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        /*直接返回数据*/
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("拉勾网");


        // 借助request对象完成请求转发 一次请求
       //  request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);

        // 借助response对象完成重定向 两次请求 WEB-INF:安全目录:不允许外部请求直接访问该目录资源,只可以进行服务器内部转发
       // response.sendRedirect(request.getContextPath() + "/index.jsp");

    }

}

4. 转发和重定向

企业开发我们一般使用返回字符串逻辑视图实现页面的跳转,这种方式其实就是请求转发。

我们也可以写成:

forward转发

如果用了forward:则路径必须写成实际视图url,不能写逻辑视图。它相当于:

request.getRequestDispatcher("url").forward(request,response)

使用请求转发,既可以转发到jsp,也可以转发到其他的控制器方法:

@RequestMapping("/forward")
public String forward(Model model) { 
    model.addAttribute("username", "拉勾招聘"); 
    return "forward:/WEB-INF/pages/success.jsp";
}

Redirect重定向

我们可以不写虚拟目录,springMVC框架会自动拼接,并且将Model中的数据拼接到url地址上.

@RequestMapping("/redirect")
public String redirect(Model model) { 
    model.addAttribute("username", "拉勾教育"); 
    return "redirect:/index.jsp";
}

5. ModelAndView

5.1 方式一

Controller中方法创建并返回ModelAndView对象,并且设置视图名称。

@RequestMapping("/returnModelAndView1") 
public ModelAndView returnModelAndView1() {
/*
Model:模型 作用封装数据
View:视图 作用展示数据
*/
    ModelAndView modelAndView = new ModelAndView();
//设置模型数据
    modelAndView.addObject("username", " lagou");
//设置视图名称
    modelAndView.setViewName("success"); 
    return modelAndView;
}

5.2 方式二

Controller中方法形参上直接声明ModelAndView,无需在方法中自己创建,在方法中直接使用该  对象设置视图,同样可以跳转页面

@RequestMapping("/returnModelAndView2")
public ModelAndView returnModelAndView2(ModelAndView modelAndView) {
//设置模型数据
    modelAndView.addObject("username", "itheima");
//设置视图名称
    modelAndView.setViewName("success"); 
    return modelAndView;
}

6. @SessionAttributes

如果在多个请求之间共用数据,则可以在控制器类上标注一个 @SessionAttributes,配置需要在session中存放的数据范围,Spring MVC将存放在model中对应的数据暂存到 HttpSession 中。

注意:@SessionAttributes只能定义在类上


@Controller
@SessionAttributes("username") //向request域存入的key为username时,同步到session域中public class UserController {

    @RequestMapping("/forward")
    public String forward(Model model) { 
        model.addAttribute("username", " 子 慕 "); 
        return "forward:/WEB-INF/pages/success.jsp";
}

    @RequestMapping("/returnString") 
        public String returnString() {
        return "success";
    }
}

7. 知识小结

8. 静态资源访问的开启

当有静态资源需要加载时,比如jquery文件,通过谷歌开发者工具抓包发现,没有加载到jquery文件,原因是SpringMVC的前端控制器DispatcherServleturl-pattern配置的是  /(缺省),代表对所有的静态资源都进行处理操作,这样就不会执行Tomcat内置的DefaultServlet处理,我们可以通过以下两种  方式指定放行静态资源:

方式一:

<!--在springmvc配置文件中指定放行资源-->
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/img/**" location="/img/"/>

方式二:

<!--在springmvc配置文件中开启DefaultServlet处理静态资源-->
<mvc:default-servlet-handler/>

节选自拉钩教育JAVA系列课程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值