映射路径

a)映射路径的概述

所谓的映射路径,就是匹配请求路径和执行方法关系的路径

请求路径:http://localhost:8080/springmvc-demo-cofig/say.do

映射路径:@RequestMapping(value=“/say.do”)

基于注解的映射路径可以忽略前后缀

例:@RequestMapping(value=“/say.do”)与下面三种表达式相同

1.@RequestMapping(value="say.do")

2.@RequestMapping(value="/say")推荐使用:“/”表示路径,不指定后缀,无论拦截规则如何更改均可拦截

3.@RequestMapping(value="say")

b)三种映射路径

1.标准的映射路径

不带通配符,不带路径变量的映射路径

例:@RequestMapping(value="say.do")

2.带通配符的映射路径

三种通配符:

通配符

说明

匹配1个字符,仅匹配1个字符

*

匹配同一级目录下0~N个字符

**

匹配多级路径目录

代码实例:

index.jsp

  Controller

    

   运行结果

    

  

通配符的优先级,通配范围小的通配符大于通配范围大的通配符且被通配符

范围小的通配后,通配范围大的就不能通配了

没有通配符 > “?”>“*”>“**”

3.带路径变量的映射路径

路径变量指的是将参数放在路径里面,而不是放在?的后面

index.jsp(发送请求,参数为zhangsan)

Controller层(对传入的参数进行接收)利用注解@PathVariable进行接收

测试:

接收多个值,就在Controller的方法中添加多个@PathVariable

如图:

路径变量的作用主要用于实现伪静态

c)两种限制

SpringMVC支持对请求的限制,如果不满足限制条件,就不让访问执行方法,提高了执行方法的安全性

主要的限制有两种:方法限制和参数限制

  1. 方法限制:通过设置请求的method类型,如果发送过来的请求和方法设置的method不一致,就不能访问执行方法

例:

Controller层配置接收方法为Post

发送一次post请求

测试结果

发送一次get请求

测试结果

Controller层也可配置多个方法接收参数

发送post和get请求进行测试

测试结果

  2.参数限制:就是请求里面必须包括哪些参数,或不包括哪些参数;必须包含哪些参数值,必须不包含哪些参数值

限制参数格式

1.参数必须包括:params={”username”,”password”}

2.参数不能包括:params={“!userid”}

3.参数值必须是指定的值:params={“username=zhangsan”}

4.参数值必须不是指定的值:params={“password!=123”}

代码实例:

Controller层参数必须包括username和password

前台发送数据不包括username和password时

测试结果

将前台请求数据增加username和password

测试结果

d)命名空间

当@RequestMapping放在类上面时,这时候@RequestMapping的值作为命名空间使用;由于在开发过程中不同的Controller会出现方法的映射路径是一样的,命名空间就是为了为了解决不同的Controller之间的请求冲突问题

例:现在有AdminController和UserController两个处理登录请求的Controller

当前台发起登录请求时,无法确定选择拿一个Controller处理请求,故报“404错误”

解决方式:为两个Controller分别添加命名空间

并在发送登录请求时,加上所要Controller的命名空间

测试结果

数据绑定

a)       数据绑定是什么

SpringMVC中,数据绑定就是将请求中的数据绑定到执行方法的参数变量

b)      内置对象绑定

内置绑定就是只要在方法参数加入指定内置的接口或者类的参数声明,SpringMVC会自动赋予该类或者接口兼容类型的对象,并且请求参数已经封装在对象中,可以通过对象获取请求参数。

内置绑定类与对象:

Servlet原有的API

  1. HttpServletRequest
  2. HttpServletResponse
  3. HttpSession

两个SpringMVC内置的对象

  1. Model
  2. ModelMap

Model和ModelMap默认都是存储了Request请求作用域的数据的对象,两个对象作用相同,就将数据返回到页面

代码实例:

前台发送数据:

Controller处理数据

利用内置对象中HttpServletRequest获取请求参数

利用内置对象中HttpServletRequest获取请求参数,并用内置对象Model设置参数传回到页面中

利用@requestScope参数进行接收

运行结果

注:只可以使用内置的接口接收数据,自己新建的接口,由于Spring容器中没有相应的实现类对象,因此不能使用!!

a)       数据自动绑定

SpringMVC框架支持不需要任何数据绑定注解,直接将表单参数绑定到我们的执行方法的参数上

表单参数:包括POST以及GET发送过来的参数

就是以内容类型为:enctype="application/x-www-form-urlencoded"的参数

a)       参数变量的绑定

当前台传入的参数名和后台处理方法的参数名相等时,即可实现参数变量绑定

由于当前台传入的参数过多时,可能导致后台处理方法的参数过长,因此引入

b)      将参数变量绑到javabean

新建一个javabean,注:javabean中的属性名和传入的参数名一一对应

将Controller处理方法中的参数改为javabean对象

前台发送数据

测试结果

javabean嵌套类型,在javabean中在嵌套一个javabean

将Controller处理方法中的参数改为javabean对象

前台发送数据

测试结果

c)       自动绑定数据到数组

注意事项:

  1. 数组的类型只能是Spring内置已经实现的类型(如:MultipartFile)以及标量类型。

标量类型=String+基础数据类型+基础数据类型包装类

  1. 页面的参数必须要同名!!!

前台发送数据

后台接收并处理数据

测试结果

b)      集合的自动封装

SpringMVC的执行方法的参数不支持集合数据直接自动绑定的。

需要将集合转换成一个JavaBean的类型.把集合作为JavaBean的一个属性来实现.

前台请求页面

实体类

后台处理请求代码

测试结果

a)       数据的强制绑定

SpringMVC有些数据是不能自动绑定,需要我们使用他提供的注解强制绑定

需要强制绑定的几种情况:

  1. 默认参数自动绑定的是表单数据,如果数据不是来自表单,那么必须进行强制绑定
  2. 数据是来自表单的,但是参数名不匹配,那么也需要强制绑定
  3. 数据是来自表单的,但是需要将数据绑定在Map对象里面,需要强制绑定

1.1 @CookieValue获得Cookie值的注解

1.2 @PathVariable 绑定路径参数(当传入参数不是表单参数时需要)

2.1 通过@RequestParam绑定表单数据(当方法参数名跟传入参数名不同时使用)

3.1    将表单数据绑定到Map里面默认情况下,表单是不能自动绑定参数到Map里面的,如果要绑定数据到Map,需要加上@RequestParam强制绑定

前台数据

后台处理

关于中文乱码的处理

在web.xml中增加一个拦截器filter

SpringMVC初写(二)映射类型、限制和数据绑定的更多相关文章

  1. SpringMVC初写(一)SpringMVC的配置方式

    1.Spring概述a)SpringMVC是什么?SpringMVC是Spring框架内置的MVC实现.SpringMVC就是一个Spring内置的MVC子框架MVC:Model-View-Contr ...

  2. SpringMVC初写(六)静态资源设置

    众所周知,SpringMVC的DispatchServlet是不可以以/*规则拦截请求的,否则会将JSP都拦截了,但有时候我们的请求路径是不能有后缀(Resful风格的接口需要),基于上述情况,我们可 ...

  3. SpringMVC初写(五)拦截器

    在系统开发过程中,拦截器的使用可以使我们实现一些需求.如:登录认证,权限管理等,拦截器的工作核心就是将一些工作流程进行统一处理 拦截器和过滤器的区别: 过滤器过滤的是请求路径,拦截器拦截的各层方法的映 ...

  4. SpringMVC初写(四)上传和下载功能的实现

    一.文件上传 流程: 导入包commons-fileuplad组件和依赖包commons-io组件 配置springmvc支持上传的组件: 启动SpringMVC注解支持 配置上传解释器 构建一个上传 ...

  5. SpringMVC初写(三)Controller的生命周期

    Spring框架默认创建的对象的方式是单例,所以业务控制器Controller也是一个单例对象 由此可证明,无论是同一次请求还是同一次会话和不同请求它的对象都是相同的 然而由于对象是单例的,随之而来的 ...

  6. SpringMVC学习(二)———— 参数绑定

    一.参数绑定 1.1.什么是参数绑定? 客户在浏览器端会提交一些参数到服务器端,比如用户的登录等,就会传username 和 password过来,springmvc则通过参数绑定组件将请求参数的内容 ...

  7. SpringMVC入门学习(二)

    SpringMVC入门学习(二) ssm框架 springMVC  在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...

  8. 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置

    原文:使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 摘要 讲解如何配置SpringMVC框架xml,以及如何在Tomcat中运行 目录[-] 文章已针对IDEA 15做了一定 ...

  9. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

随机推荐

  1. KbmMW 4.40.00 测试发布

    经过漫长的等待,支持移动开发的kbmmw 4.40.00 终于发布了,这次不但支持各个平台的开发, 而且增加了认证管理器等很多新特性,非常值得升级.具体见下表. 4.40.00 BETA 1 Oct ...

  2. 2016-2017 《移动平台开发》实验三 敏捷开发与XP实践

    概述 软件=程序+软件工程 软件企业=软件+商业模式 XP是一种轻量(敏捷).高效.低风险.柔性.可预测.科学而且充满乐趣的软件开发方式. 在更短的周期内,更早地提供具体.持续的反馈信息. 在迭代的进 ...

  3. Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用

    一.gitHub地址及介绍 https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh android-Ultra-Pull-To-Refre ...

  4. Unity3d发布的iOS产品中使用GB2312字符编码(CP936)

    最近在开发中要用到GB2312字符编码(CP936),在C#代码中便有了如此代码 System.Text.Encoding.GetEncoding() 这在Unity3d 编辑器下运行没有任何问题,打 ...

  5. Unity3d之Coroutine

    在Unity3d中使用C#时,Coroutine是一个大有用处的好东西,至于怎么用网上多的是讲,我仅在此记录最近一次使用中的小发现. 因为某种需求,要在一个Coroutine实现中使用while循环, ...

  6. 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架

    Dnc.Api.Throttle    适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...

  7. WPF定时刷新UI界面

    代码: using NHibernate.Criterion; using System; using System.Collections.Generic; using System.Collect ...

  8. Java50道经典习题-程序6 求最大公约数及最小公倍数

    题目:输入两个正整数m和n,求其最大公约数和最小公倍数.分析:用辗转相除法求最大公约数    两个数的最大公约数:设两个数分别为n和m,(n>=m);用定义一个变量i,使用for循环,将i的取值 ...

  9. shell脚本报错:-bash: xxx: /bin/bash^M: bad interpreter: No such file or directory

    当我们把文件从windows系统中编辑的文件拷贝到linux系统中,如果我们执行文件会保存如下的错: shell脚本报错:-bash: xxx: /bin/bash^M: bad interprete ...

  10. crond脚本执行并发冲突问题

    在计划任务中,偶尔会看到重复执行的情况: 例如我们公司的计划任务举例: */ * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index. ...