总结46 SpringMVC中的WEB请求和WEB响应之应用

概念

SpringMVC既然是要替代Servlet,自然也会有请求和响应的功能.
而且这些功能要比原本Servlet中的请求和响应要方便的多.

准备

一.配置MVC环境

在使用SpringMVC的请求和响应前,需要先进行基本的MVC环境配置.
参考这篇文章:https://blog.csdn.net/chinatopno1/article/details/105106249

二.处理POST请求乱码

在web.xml中设置
处理POST请求模式下的中文乱码
(如果是GET请求,则无需处理)

<!--配置过滤全局的编码-->
    <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>

三.释放静态资源

当有静态资源需要加载时,比如jquery文件,通过谷歌开发者工具抓包发现,没有加载到jquery文件,原因是SpringMVC的前端控制器DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作,我们可以通过以下方式指定放行静态资源
springmvc.xml配置文件中指定放行的资源

<mvc:default-servlet-handler/>

四.打开注解驱动

在springmvc.xml中声明SpringMVC的注解驱动
貌似只有这样,我们在类中使用RequestMapping,ResponseBody这样的标签才会有效

<mvc:annotation-driven/>

它有二个作用:
在这里插入图片描述

数据共享与跳转

SpringMVC中,有一种个对象,那就是ModelAndView对象
它有2个作用
作用一:数据域共享
可以通过ModelAndView共享数据 相当于Request域共享.
作用二:跳转页面
ModeAndVie还可以跳转页面,并且跳转页面时同样会进行数据共享
格式:

  //
    @RequestMapping("/自定义虚拟路径")
    public ModelAndView 自定义方法名(){
        ModelAndView 自定义ModelAndView对象名 = new ModelAndView();
        自定义ModelAndView对象名.addObject("自定义键名",自定义任意类型的数据 );
        自定义ModelAndView对象名.setViewName("用来跳转url链接,此处是以视图方式跳转,因此不应该加上斜杠'/'"); 
        return 自定义ModelAndView对象名;
    }

列如:

  //通过ModelAndView共享数据 相当于Request域共享      不仅仅用于页面跳转,还会携带共享数据
    @RequestMapping("/modelview")
    public ModelAndView modelview(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("keyName","paramTest" );
        mv.setViewName("url"); //以视图处理的方式跳转
        return mv;
    }

MVC应用于响应

我们可以将一些字符串响应在前台页面,在servlet中是response方法.
在springMvc中则是用’ResponseBody’注解配合方法的返回值类型来实现.
在这里插入图片描述

响应普通字符串到页面

格式:

    @RequestMapping (value = "/自定义虚拟路径",produces = "text/html;charset=utf-8") // produces用于设置编码
    @ResponseBody   //告诉SpirngMVC 此处的返回内容不做跳转,而是要以字符串的形式输出到浏览器上
    public String 自定义方法名(){

        return String类型的数据;
    }

列如:

   @RequestMapping (value = "/stringone",produces = "text/html;charset=utf-8") // produces用于设置编码
    @ResponseBody   //告诉SpirngMVC 此处的返回内容不做跳转,而是要以字符串的形式输出到浏览器上
    public String stringOne(){

        return "你好!中国第一!";
    }

响应JSON字符串到页面

格式:

    @RequestMapping (value = "/自定义虚拟路径名",produces = "application/json;charset=utf-8") // produces用于设置编码
    @ResponseBody
    public String 自定义方法名() throws JsonProcessingException {
        响应实体类 自定义实体类对象名 = new 响应实体类();
       
		//为该实体类赋值,可选
	

        ObjectMapper 自定义JSON字符串转换对象名 = new ObjectMapper();
        String 自定义转换结果名 = 自定义JSON字符串转换对象名.writeValueAsString(userObj);

        return 定义转换结果名;
    }

列如:

    @RequestMapping (value = "/stringjson",produces = "application/json;charset=utf-8") // produces用于设置编码
    @ResponseBody
    public String stringOfJson() throws JsonProcessingException {
        User userObj = new User();
        userObj.setName("韩江");
        userObj.setAge(20);

        ObjectMapper om = new ObjectMapper();
        String jsonResult = om.writeValueAsString(userObj);

        return jsonResult;
    }

响应对象到页面

格式:

    @RequestMapping ("/stringuser") // 当输出的数据为对象时,则不用设无需设置编码
    @ResponseBody
    public 响应实体类名 自定义方法名() throws JsonProcessingException {
        响应实体类 自定义实体类对象名 = new 响应实体类();
       
       //为该实体类赋值,可选

        return 自定义实体类对象名;
    }

列如:

    @RequestMapping ("/stringuser") // 当输出的数据为对象时,则不用设无需设置编码
    @ResponseBody
    public User stringOfUser() throws JsonProcessingException {
        User userObj = new User();
        userObj.setName("韩江");
        userObj.setAge(20);
        return userObj;
    }

MVC应用于请求

注意:
.在SpringMVC框架中,
请求结果的形参类型可以为int,double等数字类型.但前提是所提交的参数必须也是数字.
否则将会报错
二.方法中的形参名,必须在名称和顺序上对应着前端提交过来的参数名.

获取并应用普通请求

在这里插入图片描述
格式:

    @RequestMapping("/自定义虚拟路径")
    public 自定义返回值类型 自定义方法名(自定义参数类型 自定形参名一,自定义参数类型 自定形参名等二等多个形参名){
    
    //调用

    }

列如:

    @RequestMapping("/param")
    public void paramGet(String name,String number,int age){
        System.out.println("name:"+name);
        System.out.println("number:"+number);
        System.out.println("age:"+age);

    }

获取并应用请求到对象

在这里插入图片描述
格式:

    @RequestMapping("/自定义虚拟路径名")
    public 自定义返回值类型 自定义方法名(实体类名 自定义实体类对象名){


      //调用

    }

列如:

    @RequestMapping("/parampojo")
    public String paramPojo(User userObj){


        System.out.println(userObj.getName());
        System.out.println(userObj.getNumber());
        System.out.println(userObj.getAge());

        return "forward:/url.jsp";
    }

获取并应用请求到数组

在这里插入图片描述
格式:

  @RequestMapping("/自定义虚拟路径名")
    public 自定义返回值类型 自定义方法名(String[] 自定义数组形参名){
       //调用
    }

列如:

  @RequestMapping("paramarr")
    public void paramArray(String[] str){
        for (String s : str) {
            System.out.println(s);
        }
    }

获取集群的请求参数

当在集群环境下,别的服务器给我们发送json字符串的时候, 我们要使用RequestBody进行解析并接收.
这是因为在集群环境下,不管你发送的参数类型是什么,都是以JSON字符串的形式传输数据的.
基于在真实开发中Web,Service,Dao层是建立在不同服务器,不同项目之间的,因此,想要接收其它服务器发来的参数.那么就必须要用到RequestBody注解,将该注解应用到方法的参数括号内.

格式:

    @RequestMapping("/自定义虚拟路径名")
    public 自定义返回值类型 自定义方法名(@RequestBody 实体类名 自定义实体类对象名){
       //调用

    }

列如:

    @RequestMapping("/jiqun")
    public void jiqun(@RequestBody User userInfo){
        System.out.println(userInfo);

    }

RequestParam注解(了解)

当一个参数被@RequestParam修饰之后,则访问该方法时, 必须携带这个参数, 否则报错
该注解在目前来看没有意义

    @RequestMapping("/show02")
    public String show02(@RequestParam String name,@RequestParam int age) {
        System.out.println(name);
        return "success";
    }

获得请求头信息

使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name)

@RequestHeader注解的属性如下:

value:请求头的名称

required:是否必须携带此请求头

@RequestMapping(value="/quick20")
    @ResponseBody
    public void save20(@RequestHeader(value = "User-Agent",required = false) String user_agent) throws IOException {
        System.out.println(user_agent);
    }

使用@CookieValue可以获得指定Cookie的值

@CookieValue注解的属性如下:

value:指定cookie的名称

required:是否必须携带此cookie

 @RequestMapping(value="/quick21")
    @ResponseBody
    public void save21(@CookieValue(value = "JSESSIONID") String jsessionId) throws IOException {
        System.out.println(jsessionId);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值