我是靠谱客的博主 欢喜鸭子,最近开发中收集的这篇文章主要介绍springMVC -- 3①@RequestParam(获取请求的参数)②@RequestHeader(获取请求头信息)③@CookieValue(获取cookie(饼干)中的值)④解决乱码⑤API(1)SpringMVC的请求处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

 

(1)SpringMVC的请求处理

1、SpringMVC对请求参数的处理

①、@RequestParam:获取请求的参数:

②@RequestHeader:获取请求头信息:

③@CookieValue:获取cookie(饼干)中的值:

2、乱码问题的解决:

3、SpringMVC对原生API的支持:


 

(1)SpringMVC的请求处理

1、SpringMVC对请求参数的处理

在之前的servlet中我们可以通过request.getParameter()来获取请求中的参数,但是在我们编写的SpringMVC的应用程序中,在具体请求的方法中并不包含request参数,那么我们应该如何获取请求中的参数呢?

              需要使用以下几个注解:

        1@RequestParam:获取请求的参数

       2@RequestHeader:获取请求头信息

       3@CookieValue:获取cookie(饼干)中的值

java文件:RequestController(请求控制器)

@Controller
public class RequestController {

@RequestMapping("/testRequest")
    public String testRequest(String name){
        System.out.println(name); 
        return "success"; //成功
          
    }
}

 //此时name为zhangsan

//换成username也可以

 //但是获取不到当前的参数值

当发送请求的时候,找到对应的处理方法之后,会根据参数的名称从request(请求)中获取对应的参数值,并封装到方法中

此时要求,方法的名字和url中参数的名字必须一致,如果不一致,设置不成功

======================== 解决方式: =========================

、@RequestParam:获取请求的参数:

如果设置的值不同,同时又想让参数获取到对应的属性值,可以通过@RequestParam(获取请求参数)来使用

经常跟@PathVariable混淆,主要注意,两个注解有不同的用处

次注解的参数:
      value(值):获取的参数值
      required(必需):表示当前属性值是否是必须存在的,默认是true,表示请求中必须要包含此参数,如果没有,400,bad request

 //李四

 //可以自己加上age有参?

      defaultValue(默认值):如果传递参数了,那么使用传递进来的参数,没有使用默认值

 

如何获取SpringMVC中请求中的信息:
     默认情况下,可以直接在方法的参数中填写跟请求一样的名称,此时会默认接受参数
     如果有值,直接赋值,如果没有,那么直接给空值
   
     @RequestParam:获取请求中的参数值,之后,参数的名称不需要跟请求的名称一致,但是必须要写
     public String request(@RequestParam("user") String username){
   
     此注解还包含三个参数:
     value:表示要获取的参数值
     required:表示此参数是否必须,默认是true,如果不写参数那么会报错,如果值为false,那么不写参数不会有任何错误
     defaultValue:如果在使用的时候没有传递参数,那么定义默认值即可

②@RequestHeader:获取请求头信息:

RequestHeader类下也包含四个参数(value(值)、required(必须)、defaultValue(默认值)、@RequestParam(请求的参数)

java文件:RequestController(请求控制器)

@Controller
public class RequestController {
·
·
·
================================== 添加 =======================================
@RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader String userAgent){
        System.out.println(userAgent);
        return "success"; //成功
===============================================================================
    }
}

java文件:RequestController(请求控制器)


        如果要获取请求头中没有的信息,那么此时会报错,同样,此注解中也包含三个参数,跟@RequestParam一样
         value
         required
         defalutValue

③@CookieValue:获取cookie(饼干)中的值:

@CookieValue类下也包含四个参数(value(值)、required(必须)、defaultValue(默认值)、@RequestParam(请求的参数)

如果需要获取cookie信息该如何处理呢?

可以使用@CookieValue注解:
     public String cookie(@CookieValue("JSESSIONID") String id){

相当于:
     Cookie[] cookies = request.getCookies();
     for(Cookie cookie : cookies){
          cookie.getValue();
     }

如果要获取cookie中没有的信息,那么此时会报错,同样,此注解中也包含三个参数,跟@RequestParam一样
     value
     required
     defalutValue

========================================================

2乱码问题的解决:

    如果请求中传递的是某一个对象的各个属性值,此时如何在控制器的方法中获取对象的各个属性值呢?

    在SpringMVC的控制中,能直接完成对象的属性赋值操作,不需要人为干预

将对象里的值拿过来:

java文件:User(用户)

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String gender;

    public User() {}

    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}

    public String getName() {return name;}
    public void setName(String name) {this.name = name;}

    public Integer getAge() {return age;}
    public void setAge(Integer age) {this.age = age;}

    public String getGender() {return gender;}
    public void setGender(String gender) {this.gender = gender;}

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", age=" + age +
                ", gender='" + gender + ''' +
                ", address=" + address +
                '}';
    }
}

java文件:UserController2(用户控制器2)

@Controller
public class UserController2 {
    ·
·
·
================================== 添加 =======================================
    @RequestMapping("/testUser")
    public String testUser(User user){
        System.out.println(user);
        return "success";
    }
===============================================================================
}

user.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
================================== 添加 =======================================
<%
    pageContext.setAttribute("ctp",request.getContextPath());
%>
<body>
<form action="${ctp}/testUser" method="post">
    编号:<input type="text" name="id"><br>
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    性别:<input type="text" name="gender"><br>
    <input type="submit" value="提交"><br>
===============================================================================
</form>
</body>
</html>

 //乱码

 //原因在于执行顺序问题

java文件:Address(住址)

public class Address {

    private String province;
    private String city;
    private String town;

    public Address() {}
    public Address(String province, String city, String town) {
        this.province = province;
        this.city = city;
        this.town = town;
    }

    public String getProvince() {return province;}
    public void setProvince(String province) {this.province = province;}

    public String getCity() {return city;}
    public void setCity(String city) {this.city = city;}

    public String getTown() {return town;}
    public void setTown(String town) {this.town = town;}

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + ''' +
                ", city='" + city + ''' +
                ", town='" + town + ''' +
                '}';
    }
}

user.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<%
    pageContext.setAttribute("ctp",request.getContextPath());
%>
<body>
<form action="${ctp}/testUser" method="post">
    编号:<input type="text" name="id"><br>
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    性别:<input type="text" name="gender"><br>
================================== 添加 =======================================
省份:<input type="text" name="province"><br>
    城市:<input type="text" name="city"><br>
    区域:<input type="text" name="town"><br>
===============================================================================
    <input type="submit" value="提交"><br>
</form>
</body>
</html>

  乱码问题解决:
  我们需要设置request和response的编码方式,可以自己手动编写过滤器,也可以由现成的框架来实现
  post必须要分别设置request和response的编码格式
  get: 在tomcat的server.xml文件中,添加URIEncoding=utf-8

  在一个应用程序中可能会包含N多个过滤器,这N多个过滤器一般是没有顺序的要求的,但是如果你设置了编码过滤器,
  那么要求必须要将编码过滤器设置到最上面,保证编码过滤器优先执行

  //将myFilter编码过滤器放hidden上面

web.xml

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
//关联springmvc的配置文件:
此配置文件的属性可以不添加,但是需要在WEB-INF的目录下创建   前端控制器名称+servlet.xml文件
//设置初始化参数,指定默认的springmvc的配置文件
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name
    <url-pattern>/</url-pattern>
</servlet-mapping>
================================== 去掉 =======================================
//自定义编码过滤器
    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>com.mashibing.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
===============================================================================
================================== 添加 =======================================
//springMVC提供的编码过滤器
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>
org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
//解决post请求乱码
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
//解决响应乱码
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
===============================================================================
//此过滤器完成请求方式的转换,将post请求转换为put或者delete
<filter>
        <filter-name>hidden</filter-name>
    <filter-class>
org.springframework.web.filter.HiddenHttpMethodFilter
    </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hidden</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

//也能解决乱码问题

注意:如果配置了多个过滤器,那么字符编码过滤器一定要在最前面,否则失效

========================================================

3、SpringMVC对原生API的支持:

java文件:UserController2(用户控制器2)

    @RequestMapping("api")
    public String servletAPI(HttpServletRequest request, HttpServletResponse response, HttpSession session){
        request.setAttribute("request","request");
        session.setAttribute("session","session");
        return "success"; //成功
    }

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
操作成功<br> //<br>是换行
================================== 添加 =======================================
request:${requestScope.get("request")}  //request(请求)
session:${sessionScope.get("session")}  //session(会话)
===============================================================================
</body>
</html>

Controller中也支持原生Servlet的对象,需要在参数中给出:
    
       HttpServletRequest:
       HttpServletResponse:
       HttpSession:
       Locale:设置区域信息,国际化的操作

       InputStream:
       OutputStream:
       Reader:
       Writer:

========================================================

 //了解一下即可

========================================================

最后

以上就是欢喜鸭子为你收集整理的springMVC -- 3①@RequestParam(获取请求的参数)②@RequestHeader(获取请求头信息)③@CookieValue(获取cookie(饼干)中的值)④解决乱码⑤API(1)SpringMVC的请求处理的全部内容,希望文章能够帮你解决springMVC -- 3①@RequestParam(获取请求的参数)②@RequestHeader(获取请求头信息)③@CookieValue(获取cookie(饼干)中的值)④解决乱码⑤API(1)SpringMVC的请求处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部