开发者

springmvc请求参数的绑定的项目实践

开发者 https://www.devze.com 2025-11-06 10:27 出处:网络 作者: sin2201
目录一、创建项目,pom文件二、web.XML三、spring-mvc.xml四、index.JSP五、实体类Address类User类六、UserController类七、请求参数解决中文乱码八、配置tomcat,然后启动tomcat4.九、接收Map类型1.直接接收Map类型(
目录
  • 一、创建项目,pom文件
  • 二、web.XML
  • 三、spring-mvc.xml
  • 四、index.JSP
  • 五、实体类
    • Address类
    • User类
  • 六、UserController类
    • 七、请求参数解决中文乱码
      • 八、配置tomcat,然后启动tomcat
        • 4.
      • 九、接收Map类型
        • 1.直接接收Map类型
          • (1)Get请求
          • (2)post请求:
        • 2.用对象接收map
          • (1)User类里加一个map
          • (2)前端:
          • (3)运行:
      • 十、在控制器中使用原生的ServletAPI对象

        一、创建项目,pom文件

        ​<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <groupId>com.qcby</groupId>
            <artifactId>springMVC12</artifactId>
            <version>1.0-SNAPSHOT</version>
            <packaging>war</packaging>
            <properties>
                <maven.compiler.source>8</maven.compiler.source>
                <maven.compiler.target>8</maven.compiler.target>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <spring.version>www.devze.com;5.0.2.RELEASE</spring.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-webmvc</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>Javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                    <version>2.5</version>
                    <sphpcope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.servlet.jsp</groupId>
                    <artifactId>jsp-api</artifactId>
                    <version>2.0</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </project>
        ​

        二、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>dispatcherServlet</servlet-name>
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                <init-param>
                    <param-name>contextConfigLocation</param-name>
                    <param-value>classpath:spring-mvc.xml</param-value>
                </init-param>
                <!--配置启动加载-->
                <load-on-startup>1</load-on-startup>
            </servlet>
            <servlet-mapping>
                <servlet-name>dispatcherServlet</servlet-name>
                <url-pattern>*.do</url-pattern>
            </servlet-mapping>
        </web-app>
        ​

        三、spring-mvc.xml

        ​<?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
               xmlns:mvc="http://www.springframework.org/schema/mvc"
               xmlns:context="http://www.springframework.org/schema/context"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="
                http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd">
            <!-- 配置spring创建容器时要扫描的包 -->
            <context:component-scan base-package="com.qcby.controller"></context:component-scan>
            <!-- 配置视图解析器 -->
            <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/pages/"></property>
                <property name="suffix" value=".jsp"></property>
            </bean>
            <!-- 配置spring开启注解mvc的支持-->
        <!--    <mvc:annotation-driven></mvc:annotation-driven>-->
        </beans>
        ​

        四、index.jsp

        <%@ page contentType="text/html;charset=UTF-8" language="java" %>
        <html>
        <head>
            <title>请求参数绑定</title>
        </head>
        <body>
        <form action="user/save1.do" method="post">
            姓名:<input type="text" name="username" />
            年龄:<input type="text" name="age" />
            <input type="submit" value="提交" />
        </form>
        <h3>请求参数绑定(封装到实体类)</h3>
        <form action="user/save2.do" method="post">
            姓名:<input type="text" name="username" />
            年龄:<input type="text" name="age" />
            <input type="submit" value="提交" />
        </form>
        <h3>请求参数绑定(封装到实体类)</h3>
        <form action="user/save3.do" method="post">
            姓名:<input type="text" name="username" />
            年龄:<input type="text" name="age" />
            金额:<input type="text" name="address.money" />
            <input type="submit" value="提交" />
        </form>
        <h3>请求参数绑定(封装到实体类,存在list集合)</h3>
        <form action="user/save4.do" method="post">
            姓名:<input type="text" name="username" />
            年龄:<input type="text" name="age" />
            金额:<input type="text" name="address.money" />
            集合:<input type="text" name="list[0].money" />
            集合:<input type="text" name="list[1].money" />
            <input type="submit" value="提交" />
        </form>
        </body>
        </html>

        五、实体类

        Address类

        import java.io.Serializable;
        public class Address implements Se编程客栈rializable {
            private Double money;
            public Double getMoney() {
                return money;
            }
            public void setMoney(Double money) {
                this.money = money;
            }
            @Override
            public String toString() {
                return "Address{" +
                        "money=" + money +
                        '}';
            }
        }

        User类

        import java.io.Serializable;
        import java.util.List;
        public class User implements Serializable {
            private String username;
            private Integer age;
            // 引用对象
            private Address address;
            // list集合
            private List<Address> list;
            public String getUsername() {
                return username;
            }
            public void setUsername(String username) {
                this.username = username;
            }
            public Integer getAge() {
                return age;
            }
            public void setAge(Integer age) {
                this.age = age;
            }
            public Address getAddress() {
                return address;
            }
            public void setAddress(Address address) {
                this.address = address;
            }
            public List<Address> getList() {
                return list;
            }
            public void setList(List<Address> list) {
                this.list = list;
            }
            @Override
            public String toString() {
                return "User{" +
                        "username='" + username + '\'' +
                        ", age=" + age +
                        ", address=" + address +
                        ", list=" + list +
                        '}';
            }
        }

        六、UserController类

        import com.qcby.pojo.User;
        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.RequestMapping;
        @Controller
        @RequestMapping("/user")
        public class UserController {
            @RequestMapping("/save1.do")
            public String save(String username,Integer age){
                System.out.println("姓名:"+username);
                System.out.println("年龄:"+age);
                return "success";
            }
            @RequestMapping("/save2.do")
            public String save2(User user){
                System.out.println("user对象:"+user);
                return "success";
            }
            @RequestMapping("/save3.do")
            public String save3(User user){
                System.out.println("user对象:"+user);
                return "success";
            }
            @RequestMapping("/save4.do")
            public String save4(User user){
                System.out.println("user对象:"+user);
                return "success";
            }
        }

        七、请求参数解决中文乱码

        在web.xml中配置Spring提供的过滤器

        ​
        <!-- 配置过滤器,解决中文乱码的问题 -->
        <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-pwww.devze.comaram>
        </filter>
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        现在的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">
            <!-- 配置过滤器,解决中文乱码的问题 -->
            <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>
            <!--前端控制器-->
            <servlet>
                <servlet-name>dispatcherServlet</servlet-name>
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                <init-param>
                    <param-name>contextConfigLocation</param-name>
                    <param-value>classpath:spring-mvc.xml</param-value>
                </init-param>
                <!--配置启动加载-->
                <load-on-startup>1</load-on-startup>
            </servlet>
            <servlet-mapping>
                <servlet-name>dispatcherServlet</servlet-name>
                <url-pattern>*.do</url-pattern>
            </servlet-mapping>
        </web-app>
        ​

        八、配置tomcat,然后启动tomcat

        1.

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        2.

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        3.

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        4.

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        九、接收Map类型

        1.直接接收Map类型

        如果想直接接收前端传过来的map参数,应该使用两个注解(RequestBody或RequestParam;RequestParam--get和post请求都可以,RequestBody只能post请求,底层封装都是LinkedHashMap)

        (1)Get请求

        第一种情况,什么注解也没有

        UserController类里加一个方法

        @RequestMapping("/mapSave1.do")
        public String mapSave1(Map<String, Objects> map){
            System.out.println("map:"+map);
            return "success";
        }

        没有JSP页面,启动tomcat

        springmvc请求参数的绑定的项目实践

        控制台:什么输出也没有,没有值

        springmvc请求参数的绑定的项目实践

        第二种情况:传个值

        springmvc请求参数的绑定的项目实践

        控制台:还是什么都没有

        springmvc请求参数的绑定的项目实践

        第三种情况:声明是get请求

        UserController类的mapSave1()方法:

        @RequestMapping(value = "/mapSave1.do",method = RequestMethod.GET)
        
        public String mapSave1(Map<String, Objects> map){
        
            System.out.println("map:"+map);
        
            return "success";
        
        }

        再启动:

        springmvc请求参数的绑定的项目实践

        控制台:还是没有值

        springmvc请求参数的绑定的项目实践

        所以跟请求是什么没关系,要想接收就要加注解

        第四种情况:加@RequestParam

        @RequestMapping(value = "/mapSave1.do")
        
        public String mapSave1(@RequestParam Map<String, Objects> map){
        
            System.out.println("map:"+map);
        
            return "success";
        
        }

        再运行:

        springmvc请求参数的绑定的项目实践

        springmvc请求参数的绑定的项目实践

        所以,我传递一个map在后端接收,用get请求必须加@RequestParam注解

        (2)post请求:

        第一种情况:什么注解也没有

        @RequestMapping(value = "/mapSave2.do")
        public String mapSave1(Map<String, Objects> map){
            System.out.println("map:"+map);
            return "success";
        }
        前端页面:加一个表单
        <h3>请求参数的绑定--map集合</h3>
        <form action="user/mapSave2.do" method="post">
            map集合key:<input type="text" name="map.key" />
            map集合value:<input type="text" name="map.value" />
            <input type="submit" value="提交" />
        </form>

        运行

        springmvc请求参数的绑定的项目实践

        点提交

        springmvc请求参数的绑定的项目实践

        控制台:什么也没有

        springmvc请求参数的绑定的项目实践

        第二种情况:声明是post请求

        @RequestMapping(value = "/mapSave2.do",method = RequestMethod.POST)
        public String mapSave2(Map<String, Objects> map){
            System.out.println("map:"+map);
            return "success";
        }

        再运行:

        springmvc请求参数的绑定的项目实践

        点提交

        springmvc请求参数的绑定的项目实践

        控制台:

        springmvc请求参数的绑定的项目实践

        说明跟get的一样,不加注解是没有办法接收到的

        第三种情况:加上@RequestParam注解

        @RequestMapping(value = "/mapSave2.do",method = RequestMethod.POST)
        public String mapSave2(@RequestParam Map<String, Objects> map){
            System.out.println("map:"+map);
            return "success";
        }

        运行:

        springmvc请求参数的绑定的项目实践

        点提交

        springmvc请求参数的绑定的项目实践

        控制台:

        springmvc请求参数的绑定的项目实践

        可以看出,get请求和post请求都可以用@RequestParam注解

        表单和controller类中的方法改改(加个username)

        表单:

        <h3>请求参数的绑定--map集合</h3>
        <form action="user/mapSave2.do" method="post">
            username:<input type="text" name="username">
            map集合:<input type="text" name="test1">
        <%-- test1就是map的key,输入框中的就是map的value --%>
            <input type="submit" value="提交" />
        </form>

        方法:

        @RequestMapping(value = "/mapSave2.do")
        public String mapSave2(@RequestParam Map<String, Objects> map,String username){
            System.out.println("map:"+map);
            System.out.println("username:"+username);
            return "success";
        }

        运行:

        springmvc请求参数的绑定的项目实践

        点提交:

        springmvc请求参数的绑定的项目实践

        控制台:

        springmvc请求参数的绑定的项目实践

        可以看到:表单中的数据都被封装到了map集合中

        第四种情况:加@RequestBody注解

        但是这样的话,它只能接收json编程客栈数据

        现在用表单接收就会报错:

        @RequestMapping(value = "/mapSave2.do")
        public String mapSave2(@RequestBody Map<String, Objects> map, String username){
            System.out.println("map:"+map);
            System.out.println("username:"+username);
            return "success";
        }

        运行:

        springmvc请求参数的绑定的项目实践

        点提交:(报错)

        springmvc请求参数的绑定的项目实践

        总结:无注解时,什么都接收不了;@RequestParam注解时,将参数包装成LinkedHashMap对象,参数的key是Map的key,参数的值是Map的value,get和

        post请求都支持;@RequestBody注解接收json类型的数据(跟表单不一样,表单传不了),也会包装成LinkedHashMap对象,该注解不支持get请求,get请求没有请求体,不能传json

        2.用对象接收map

        (1)User类里加一个map

        private Map<String,Address> userMap;

        (2)前端:

        <h3>请求参数绑定(封装到实体类,存在map集合)</h3>
        <form action="user/save5.do" method="post">
            姓名:<input type="text" name="username" />
            年龄:<input type="text" name="age" />
            金额:<input type="text" name="address.money" />
            Map集合:<input type="text" name="userMap['one'].money" />
            Map集合:<input type="text" name="userMap['two'].money" />
            <input type="submit" value="提交" />
        </form>

        (3)运行:

        springmvc请求参数的绑定的项目实践

        点提交:

        springmvc请求参数的绑定的项目实践

        控制台:

        springmvc请求参数的绑定的项目实践

        十、在控制器中使用原生的ServletAPI对象

        只需要在控制器的方法参数定义HttpServletRequest和HttpServletResponse对象

        UserController里加:

        /*原生的API*/
        @RequestMapping("/save6.do")
        public String save6(HttpServletRequest request, HttpServletResponse response){
            System.out.println(request);
            // 获取到HttpSession对象
            HttpSession session = request.getSession();
            System.out.println(session);
            System.out.println(response);
            return "success";
        }

        运行:

        springmvc请求参数的绑定的项目实践

        控制台:

        springmvc请求参数的绑定的项目实践

        到此这篇关于springmvc请求参数的绑定的项目实践的文章就介绍到这了,更多相关springmvc请求参数的绑定内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号