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. css hack汇总

    注意点: 网上很多资料中常常把!important也作为一个hack手段,其实这是一个误区.!important常常被我们用来更改样式,而不是兼容hack.造成这个误区的原因是IE6在某些情况下不主动 ...

  2. python基本数据类型2——操作

    字符串 name = "alex" # 移除两边的空格 print(name.strip()) #strip不修改值 # 是否以"al"开头 print(nam ...

  3. Javascript中常用方法简介

    Array数组常用方法       先创建一个数组var abc = [1,2,3,4,5,6,7,8,9]; (1)pop(); 这个方法会删除数组的最后一项并返回删除掉的值. 比如:console ...

  4. 微信小程序 笔记

    1.Input 输入控件 <input type='digit' placeholder='0.00'></input> 如果要使用单纯的数字控件,使那么可以将type设置为d ...

  5. Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number

    链接:https://codeforces.com/contest/1167/problem/A 题意: A telephone number is a sequence of exactly 11  ...

  6. Spring中的注入方式 和使用的注解 详解

    注解:http://www.cnblogs.com/liangxiaofeng/p/6390868.html 注入方式:http://www.cnblogs.com/java-class/p/4727 ...

  7. 轻量级的绘制图表js库--Morris.js

    Morris.js 是一个轻量级的 JS 库,使用 jQuery 和 Raphaël 来生成各种时序图. 虽说现在移动手机网络已经到了4G,但是在移动web客户端开发过中,为了达到良好的体验效果,需要 ...

  8. guacamole 0.9.13安装与配置

    以下命令很多都需要管理权限,建议使用管理员账号执行,遇到问题可以留言. Guacamole官网文档介绍翻译:http://www.cnblogs.com/ji-yun/p/5657709.html 1 ...

  9. Kendo MVVM (二) ObservableObject 对象

    概述 Kendo MVVM 框架关键的一个部分为 ViewModel,它主要是通过 kendo.data.ObserableObject 来提供支持的.它可以监控改变( UI 变化或是值的变化)并通知 ...

  10. Mind must be master of the body, strong mind can separate the body from its suffering.

    Mind must be master of the body, strong mind can separate the body from its suffering.意志是身体的主人,有顽强的意 ...