SpringMVC归纳

操作流程

配置前端控制器

在web.xml中配置

配置处理器映射器

在springmvc配置文件中配置

配置处理器适配器

在springmvc配置文件中配置

配置注解适配器和映射器

 

以下标签可以代替以上这两个配置,并且该标签还配置了json相关信息。

配置视图解析器

在springmvc配置文件中配置

 

Handler的写法

1.实现Controller接口

2.实现HttpRequestHandler接口

3.使用@Controller注解

Handler方法的创建形式

1.返回值为ModelAndView

2.返回值为String,使用return控制分发和重定向(默认为分发)

分发:return "request:itemsList.action";

重定向:return "redirect:itemsList.action";

3.使用返回值为void 的方法,用request添加模型数据和跳转页面;

常用功能

窄化请求映射

在Controller类上面加上@RequestMapping注解

限制HTTP请求

在@RequestMapping注解中配置method属性

参数绑定(形参与传递过来的参数名称不一致)

在需要配置的参数前添加@RequestParam注解,系统会将“传递过来的参数名称与该注解配置的value值相同的参数”的值赋给该配置参数。

数据回显

在SpringMVC框架中,Handler中的方法形参会被自动填充到request域中,通过@ModelAttribute可以指定pojo回显到request中的key名,但是简单类型如Integer不支持回显,只能通过model设置属性方法。

在Handle中的方法前加上@ModelAttribute注解,可以将该方法的返回值添加到request域中,并且该方法每次都会执行,而且是最先执行的。

参数绑定

1.处理器适配器调用springmvc提供的参数绑定组件将key/value数据转成controller方法的形参;

2.参数绑定组件:在springmvc早期版本中是使用PropertyEditor(只能将字符串转成java对象),而后期版本使用converter(可以进行任意类型的转换),springmvc提供了很多的converter,特殊情况下需要自定义converter,如日期时间格式转换。

自定义参数绑定

实现Converter接口

在springmvc配置文件中配置

1.

2.

 

post请求乱码

将上述配置在web.xml中进行配置即可;

get请求乱码

第一种办法是修改tomcat配置文件添加编码与工程编码一致,如下:

<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080"

protocol="HTTP/1.1" redirectPort="8443"/>

另外一种办法对参数进行重新编码;

String userName=new String(request.getParamter("username").getBytes("ISO8859-1"),"utf-8")

数组绑定

List绑定

Map绑定

 

校验框架

Springmvc.xml中配置

 

为PO类添加校验规则

添加错误信息属性文件

Handler配置

获取错误信息

ItemsQuery类中包装了一个ItemsCustom对象,然后我校验ItemsQuery对象,结果是校验不成功,所以该校验框架只能校验直接设置了校验属性的对象

分组校验

创建接口

为PO类添加校验规则

Handler配置

如果校验的属性没有添加分组,则处于无分组;那么在Handler中不指定分组,则程序会调用无分组的属性。

文件上传

配置multipart类型解析器

Jsp页面配置

Handler配置

需要以下jar包

创建图片虚拟目录

在Tomcat的server.xml中配置一下这条语句,即可在web应用中实用pic作为docBase指定路径的虚拟路径;

 

 

实现json交互

@RequestBody将json数据转换为java对象

@ResponseBody将java对象转换为json数据

相关jar包

 传入的数据是json,传出的数据是json

 传入的数据是key/value,传出的数据是json

<mvc:annotation-driven/>标签已经配置了json转换器,无需手动配置了;

在springmvc的url映射中,/与/*的区别

/可以用来实现RESTful架构,但是会导致程序不能直接访问静态资源文件,如js、css、img文件;它不会匹配到*.jsp,即*.jsp不会进入spring的DispatcherServlet类 。

而/*会匹配*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错或堆栈异常。

在springmvc中可以配置多个DispatcherServlet,比如: 配置多个DispatcherServlet有/和/*,先匹配的是/*这个。

详解:当我在客户端调用URL:/user/list然后返回user.jsp视图,当配置的是/:DispathcherServlet拿到这个请求然后返回对应的controller,然后依据Dispather Type为Forward类型转发到user.jsp视图,即就是请求user.jsp视图(/user/user.jsp),此时Dispather没有拦截/user/user.jsp,因为此时你配置的是默认的/,就顺利的交给ModleAndView去处理显示了。当配置的是/*:DispathcherServlet拿到这个请求然后返回对应的controller,然后通过Dispather Type通过Forward转发到user.jsp视图,即就是请求user.jsp视图(/user/user.jsp),此时Dispather已经拦截/user/user.jsp,Dispatcher会把他当作Controller去匹配,没有匹配到就会报404错误或堆栈异常。

总之,关于web.xml的url映射的小知识:
< url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url;
< url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等);

使用/时,开启对静态文件的扫描

 

 

RESTful架构

拦截器

perHandle()方法返回true,则代表放行,返回false,则代表不放行。

拦截器的执行先后顺序

① 全部放行

preHandle

HandlerInteceptor2.......preHandle

HandlerInteceptor2.......postHandle

postHandle

HandlerInteceptor2.......afterCompletion

afterCompletion

相当于栈,先进后出

② 拦截器1放行,拦截器2不放行

preHandle

HandlerInteceptor2.......preHandle

afterCompletion

只要一个拦截器不放行,那么所有的拦截器都不会执行

常见问题

 

SpringMVC归纳的更多相关文章

  1. SpringMVC归纳-2(Session会话、拦截器)

    要点: 1.HttpSession:一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束,借助session能在一定时间内记录用户状态. 2.Mod ...

  2. SpringMVC归纳-1(model数据模型与重定向传参技术)

    要点: model是一个Map结构的数据模型,能重定向时传递数据(拼接URL),但不安全,主要用于渲染前端页面,配合Thymeleaf填充html里面里设置好的参数. @RequestParam用来获 ...

  3. SpringMVC-Helloworld 的归纳理解

    前面使用SpringMVC写了Helloworld, 发现理解不是很深刻,很多东西只是跟着教学视频敲才会 现在那Helloworld以及一般的SpringMVC归纳一下: SpringMVC入门Hel ...

  4. [转]SpringMVC日期类型转换问题三大处理方法归纳

    http://blog.csdn.net/chenleixing/article/details/45190371 前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日 ...

  5. SpringMVC日期类型转换问题处理方法归纳

    前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后 台实体类之间日期转换处理的问题了,说问题也不大,但很多人开发中经常会遇到这个问题,有时很令人头疼,有时间问题暴露的不是很明显,然 ...

  6. SpringMVC日期类型转换问题三大处理方法归纳

    方法一:实体类中加日期格式化注解 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date receiveAppTime; 方法二: ...

  7. Springmvc中@RequestMapping 属性用法归纳

    简介: @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestM ...

  8. 走进spring之springmvc实战篇(二)

    本篇继篇一之后加入了jdbc并使用了注解 篇一进行了对spingmvc的基础配置http://www.cnblogs.com/liuyanhao/p/4798989.html 首先让我们先了解下注解的 ...

  9. SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

    最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@Respon ...

随机推荐

  1. ACM-ICPC2018焦作网络赛 Transport Ship(二进制背包+方案数)

    Transport Ship 25.78% 1000ms 65536K   There are NN different kinds of transport ships on the port. T ...

  2. 在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据?

    Sql2005中,提供了uniqueidentifier 数据类型.说白了,就是个GUID,这种类型开发时倒是很有必要的. 今天程序中遇到了这个问题:表里定义了一个uniqueidentifier 列 ...

  3. Linear Algebra - Determinant(基础)

    1. 行列式的定义 一阶行列式: \[ \begin{vmatrix} a_1 \end{vmatrix} = a_1 \] 二阶行列式: \[ \begin{vmatrix} a_{11} & ...

  4. header元素 footer元素 hgroup元素

    header元素 header元素是一种具有引航和导航作用的结构元素, 通常用来放置整个页面或页面内的一个内容区块的标题, 但是也可以包含其他内容, 例如数据表格,搜索表单, 或相关的logo图片 h ...

  5. poj1088滑雪最短路径

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 97281   Accepted: 36886 Description ...

  6. SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

    一.JAP框架简介 JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范.主要是为了简化持久层开发以及整合ORM技术,结束H ...

  7. es6入门5--class类的基本用法

    在ES6之前,准确来说JavaScript语言并无类的概念,却有模拟类的做法.相比在类似java这类传统面向对象语言中通过类来生成实例,js则通过构造函数模拟类来生成实例. 这是因为在JS设计初期,作 ...

  8. 数学补天 By cellur925

    质数 bool prime(int q) { ||q==) ; ) ; !=||q%!=) ; int cnt=sqrt(q); ;i<=cnt;i+=) !=||q%(i+)!=) ; ; } ...

  9. [WebShow系列] 比赛结果报表导出

    操作说明 现场管理员在 浏览器地址栏 输入[现场打分实时展示系统-Web版]的详情排行网址[注:相对网址 /home/rankdshow ] 调用 详情排行. 点击 详情排行榜主题 文字,可以把此排行 ...

  10. Django之extra

    extra过滤 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params= ...