SpringMVC学习小结
配置web.xml:
<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:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" 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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- 开启SpringMVC注解模式
简化配置:
1. 自动注册 DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
2. 提供一系列默认支持:数据绑定、日期格式转换,xml&json支持
-->
<mvc:annotation-driven>
</mvc:annotation-driven>
<!-- servlet-mapping映射路径:/
静态资源默认servlet配置
1. 加入对静态资源的处理:js,css,gif
2. 允许使用“/”做整体映射
-->
<mvc:default-servlet-handler>
</mvc:default-servlet-handler>
<!-- 配置JSP,显示ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView">
</property>
<property name="prefix" value="/WEB-INF/jsp">
</property>
<property name="suffix" value=".jsp">
</property>
</bean>
<!-- 扫描web相关的bean -->
<context:component-scan base-package="com.mbq.seckill.web">
</context:component-scan>
</beans>
@RequestMapping:
- 支持标准的URL
- Ant风格的URL(即?/*/** 等通配符)
- 带{}占位符的URL
springmvc的form表单标签,支持自动回显
请求转发与重定向
使用@RequestParam 绑定请求参数值
使用@RequestHeader绑定请求报头的属性值
使用@CookieValue绑定请求中的Cookie值
Restful:
在web.xml中配置HiddenHttpMethodFilter过滤器,将普通的post请求转换为指定的put或delete请求(post请求中需有参数:_method=put)
1. 带{}占位符的URL
2. @PathVariable
ajax直接发送put/delete请求时,后台会获取不到请求中的参数,此为tomcat内部编码的问题,如果不是get/post请求,则直接返回。
- 解决:在web.xml中配置一个过滤器:org.springframework.web.filter.HttpPutFormContentFilter
- 作用:将put方式请求体中的数据解析包装成一个map集合,重写request.getParameter(),从map中取数据
Controller乱码问题解决:在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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
数据类型转换
数据格式化:日期类型:在属性上添加注解@DateTimeFormat(pattern="yyyy-MM-dd")
JSR303数据校验
- 导入Hibernate Validator的类库
- 在bean的属性上添加注解@Email等
- 请求方法中使用@Valid注解声明要校验的对象
- BindingResult:绑定校验结果的对象
@NotNull
private String ename;
@RequestMapping(value="/save", method=RequestMethod.POST)
@ResponseBody
public Msg save(@Valid Employee emp, BindingResult result) {
if(result.hasErrors()) {
List<FieldError> fieldErrors = result.getFieldErrors();
Map<String, Object> map = new HashMap<>();
for(FieldError fieldError : fieldErrors) {
//错误字段名,错误信息
map.put(fieldError.getField(), fieldError.getDefaultMessage());
}
return new Msg().fail().add("errorField", map);
}
employeeService.save(emp);
return new Msg().success();
}
ajax返回json:@ResponseBody,需要jackson的支持(将java对象转换为json对象),可以封装一个通用的Json对象类
配置视图解析控制器:<mvc:view controller ...>,直接转发页面,不经过Handler
异常处理
- 新的方法处理异常:使用@ExceptionHandler({ArithmeticException.class})
- 新建异常处理类,使用@ControllerAdvice注解
文件上传
1.首先需要进行配置
<!-- 一定要写id,对应文件上传的拦截器 -->
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="2048000"></property>
</bean>
2.使用MultipartFile接收上传的文件,transferTo()方法实现文件上传操作
自定义拦截器
继承HandlerInterceptorAdapter
实现HandlerInterceptor接口
在配置文件中进行配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/admin/**"/>
<bean class="com.ma.shop.interceptor.AutoLoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
使用MockMvc模拟请求
@RunWith(SpringRunner.class)
@WebAppConfiguration
@ContextConfiguration({
"classpath:spring-web.xml",
"classpath:spring-service.xml",
"classpath:spring-dao.xml", })
public class ControllerTest {
@Autowired
private WebApplicationContext context;
//虚拟MVC请求,获取处理结果
private MockMvc mockMvc;
@Before
public void initMockMvc() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testPage() throws Exception{
//模拟请求添加参数并获取返回值
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emp/list").param("pageNo", "1")).andReturn();
MockHttpServletRequest request = result.getRequest();
Employee emp = (Employee) request.getAttribute("emp");
}
}
SpringMVC学习小结的更多相关文章
- flex学习小结
接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- SpringMVC学习系列-后记 开启项目的OpenSessionInView
在系列的 SpringMVC学习系列(12) 完结篇 的示例项目中,由于当时考虑到OpenSessionInView会对性能有一定的影响,所以就没有配置项目的OpenSessionInView.在ma ...
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...
- SpringMvc学习心得(五)控制器产生与构建
SpringMvc学习心得(五)控制器产生与构建 标签: springspring mvc框架 2016-03-22 15:29 140人阅读 评论(0) 收藏 举报 分类: Spring(4) ...
随机推荐
- 【BZOJ 1119】 1119: [POI2009]SLO (置换)
1119: [POI2009]SLO Description 对于一个1-N的排列(ai),每次你可以交换两个数ax与ay(x<>y),代价为W(ax)+W(ay) 若干次交换的代价为每次 ...
- 【UVA 11077】 Find the Permutations (置换+第一类斯特林数)
Find the Permutations Sorting is one of the most used operations in real life, where Computer Scienc ...
- [Codeforces-div.1 167B] Wizards and Huge Prize
[Codeforces-div.1 167B] Wizards and Huge Prize 试题分析 注意到每个物品互相独立,互不干扰之后就非常好做了. 算出一个物品最后的价值期望,然后乘以K即可. ...
- 【树形dp】vijos P1180 选课
题解: http://www.cppblog.com/rakerichard/articles/105004.html 惊了,讨论子树大小能否dp真鸡儿麻烦,按照上面那份题解,可以不用分这么多类,可以 ...
- Promise对象的基本用法
主要作用 1.用来传递异步操作的消息 2.三种状态:pending.Resolved.Rejected,而且只能从第一种状态转到后两者状态之一. 3.缺点 (1)一旦新建就会立即执行 (2)如果不设置 ...
- C#中的Stack
Stack(栈) 是一种先进后出的对象集合,它是一个泛型,所表示的类型可以为int,string这样的常见类型,也可以为用户自定义类型. 属性 描述 Count 获取 Stack 中包含的元素个数. ...
- iOS-Runtime、对象模型、消息转发
Objective-C只是在C语言层面上加了些关键字和语法.真正让Objective-C如此强大的是它的运行时.它很小但却很强大.它的核心是消息分发. Message 执行一个方法,有些语言.编译器会 ...
- FIS的安装
FIS是专为解决前端开发中自动化工具.性能优化.模块化框架.开发规范.代码部署.开发流程等问题的前端工程化构建工具. 最重要的是,它是国产的!还是百度产的~~~亲切吧~~官网:http://fis.b ...
- asp.net core 1.0初识
本文将对微软下一代ASP.NET框架做个概括性介绍,方便大家进一步熟悉该框架. 在介绍ASP.NET Core 1.0之前有必要澄清一些产品名称及版本号.ASP.NET Core1.0是微软下一代AS ...
- 【iOS开发】canOpenURL: failed for URL
控制台输出 如图是在我启动一个 Xcode 7 + iOS 9 的 App 之后,控制台的输出. 这在 Xcode 6.4 + iOS 8 时,是不会有的情况,原因是[为了强制增强数据访问安全, iO ...