Spring MVC笔记-参数绑定(四)

Spring MVC笔记



前言

Spring MVC学习笔记


一、Spring MVC概念

Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。

Spring MVC 是结构最清晰的 Servlet+JSP+JavaBean 的实现,是一个典型的教科书式的 MVC 构架,不像 Struts 等其它框架都是变种或者不是完全基于 MVC 系统的框架。

Spring MVC 角色划分清晰,分工明细,并且和 Spring 框架无缝结合。Spring MVC 是当今业界最主流的 Web 开发框架,以及最热门的开发技能。

在 Spring MVC 框架中,Controller 替换 Servlet 来担负控制器的职责,用于接收请求,调用相应的 Model 进行处理,处理器完成业务处理后返回处理结果。Controller 调用相应的 View 并对处理结果进行视图渲染,最终客户端得到响应信息。

Spring MVC 框架采用松耦合可插拔的组件结构,具有高度可配置性,比起其它 MVC 框架更具有扩展性和灵活性。

二、一个简单Spring MVC项目工程

1.创建一个maven工程,pom.xml导入Spring MVC依赖

    <!-- Spring MVC-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.22</version>
    </dependency>

2.在web.xml中配置Spring MVC的DispatcherServlet

  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <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>

3.创建一个配置文件resource,新建一个springmvc.xml文件

在这里插入图片描述
springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 配置自动扫包-->
    <context:component-scan base-package="com.mvc"></context:component-scan>
    <!-- 配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/"></property>
        <!--后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

4.新建java->com->mvc文件夹,新建HelloHandler处理器

在这里插入图片描述
HelloHandler.class

@Controller
@RequestMapping("/hello")
public class HelloHandler {

    @RequestMapping(value = "/index",method = RequestMethod.POST)
    public String index(){
        System.out.println("接收了请求");
        //返回逻辑视图
        return "index";
    }

}

method = RequestMethod.POST指定了客户端的请求类型只能为post请求,不写可以接收get和post请求类型。

5.启动项目。需要配置Tomcat

在这里插入图片描述

6.总结

在这里插入图片描述

三、参数绑定

1.在@RequestMapping注解中添加params进行参数绑定

@Controller
@RequestMapping("/hello")
public class HelloHandler {

    @RequestMapping(value = "/index",method = RequestMethod.POST,params = {"id","name"})
    public String index(Integer id,String name){
        System.out.println("接收了请求"+id+"-"+name);
        //返回逻辑视图
        return "index";
    }
    //在此方式注解的前提下保证请求参数名称和形参参数名称一致,params = {"id","name"}可以不写,
    //也可以再params = {"id","name"}添加数据验证,比如:
    //params = {"id=1","name"},即id=1时才会调用此URL方法

}

2.@RequestParam注解绑定

params是对URL请求参数进行限制,不满足条件的URL无法访问该方法,需要在业务方法中获取URL的参数值。
1、在业务方法定义时声明参数列表

2、给参数列表添加@RequestParam注解进行绑定

@Controller
@RequestMapping("/hello")
public class HelloHandler {

    @RequestMapping(value = "/index",method = RequestMethod.POST)
    public String index(@RequestParam("num") Integer id, @RequestParam("str") String name){
        System.out.println("接收了请求"+id+"-"+name);
        //返回逻辑视图
        return "index";
    }

}

在这里插入图片描述
在这里插入图片描述

(@RequestParam(“num”) Integer id, @RequestParam(“str”)在此参数列表里面添加@RequestParam注解是在请求参数名称和形参名称不一致的时候进行参数绑定,如果一致则不需要进行@RequestParam注解绑定

3.Spring MVC支持RESTful风格的URL参数获取

传统的URL:http://localhost:8081/hello/index?id=12&name=李四
RESTful URL:http://localhost:8081/hello/index/12/李四

    @RequestMapping("/restful/{id}/{name}")
    public String restful(@PathVariable("id") Integer id,@PathVariable("name") String name){
        System.out.println(id+"-"+name);
        return "index";
    }

4.映射Cookie

 @RequestMapping("/cookie")
    public String getCookie(@CookieValue("JSESSIONID") String sessionId){
        System.out.println(sessionId);
        return "index";
    }

5.使用POJO绑定参数

Address实体类

@Data
public class Address {
    private Integer code;
    private String value;
}

User实体类

@Data
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Address address;
}

Handler处理器类

    @RequestMapping(value = "/addUser",method = RequestMethod.POST)
    public String addUser(User user){
        System.out.println(user);
        return "addUser";
    }

web.xml解决中文乱码

  <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>
    <init-param>
      <param-name>foreResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

addUser.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/hello/addUser" method="post">
        <table>
            <tr>
                <td>编号</td>
                <td>
                    <input type="text" name="id">
                </td>
            </tr>
            <tr>
                <td>name</td>
                <td>
                    <input type="text" name="name">
                </td>
            </tr>

            <tr>
                <td>地址编号</td>
                <td>
                    <input type="text" name="address.code">
                </td>
            </tr>
            <tr>
                <td>地址</td>
                <td>
                    <input type="text" name="address.value">
                </td>
            </tr>


            <tr>
                <td>
                    <input type="submit" value="提交">
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

结果:

在这里插入图片描述

注意:主体对象可以没有无参构造,但是级联对象必须有无参构造,因为主体对象可以通过其他构造器构造,但级联对象不行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梳碧湖的砍柴人.exe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值