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) ...
随机推荐
- ccpc秦皇岛部分题解
A. 题意:就是有一个大桌子,环绕有顺势站1~m共m个座位,n个选手坐在部分位置上.然后如果有一个人a了一道题,却没有立刻发气球给他,他产生怒气值是发气球给他的时间减去a题时间.现在有一个机器人顺时针 ...
- 【FFT】BZOJ2179- FFT快速傅立叶
[题目大意] 给出n位十进制a和b,求a*b. [思路] FFT.感觉弄起来比较麻烦,不如直接背板子. 注意一下MAXN的取值,我一开始非常随意地就写了60000*2+50,其实n是要扩展到最接近的2 ...
- [CodeForces-759D]Bacterial Melee
题目大意: 有一串n个字母,每个位置的字母可以同化边上的一个字母, 比如:ab可以变成aa或者bb. 相对的两个同化不能同时发生,比如ab不能变成ba. 现在给你一个字符串,问你经过任意次数的同化过程 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Introduction
最近学习了coursera上面Andrew NG的Machine learning课程,课程地址为:https://www.coursera.org/course/ml 在Introduction部分 ...
- strust2的核心和工作原理
在学习strust2之前,我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Strust设计的第一目标就是使MVC模式应用于web程序设计. 技术优势 Struts2有 ...
- Java编程思想学习(四)----第四章:控制执行流程
在Java中,涉及的关键字包括if-else.while.do-while.for.return.break 以及选择语句switch.然而,Java并不支持goto语句(该语句引起许多反对意见,但它 ...
- JavaScript的深拷贝与浅拷贝
深拷贝和浅拷贝是在面试中经常遇到的问题.今天在这里总结一下. 深拷贝与浅拷贝的问题,涉及到JavaScript的变量类型,先来说说变量的类型,变量类型包括基本类型和引用类型. 基本类型:Undefin ...
- Table 'hd_online' is marked as crashed and should be repaired索引损坏
myisam 引擎表的索引损坏,解决方法 找到mysql的安装目录的/usr/local/mysql/bin/myisamchk工具,在命令行中输入: myisamchk -c -r /data/db ...
- Manthan, Codefest 16 A. Ebony and Ivory 水题
A. Ebony and Ivory 题目连接: http://www.codeforces.com/contest/633/problem/A Description Dante is engage ...
- Mac下JAVA开发环境搭建
最近开始学习JAVA, 首先配置下环境! 1.Mac自带的jdk版本老了,需要到oracle官网去下载新的jdk,具体下载那个版本看个人需求,然后安装. 安装完成之后打开Terminal, 执行命 ...