SpringMVC学习小结
2024-08-28 18:02:00
配置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");
}
}
最新文章
- 关于JavaScript设计模式(一)
- MicroPHP 2.2.0 发布
- 一般处理程序获取session值
- 大写金额字符串生成 C#实现
- 【linux命令】:查看当前登录用户的信息,本文介绍3种方法
- 淘宝API开发(三)
- word2vec 入门基础(一)
- JAVA优雅停机的实现
- LINUX 笔记-ubuntu 配置 jdk 环境
- python模块collections中namedtuple()的理解
- Selenium2Lib库之鼠标事件常用关键字实战
- JS时间的获取及格式
- [IoC容器Unity]第二回:Lifetime Managers生命周期
- 如何定义一个有效的OWIN Startup Class
- 分布式配置hadoop2.5.0 2.6.x
- Chrome_调试js出现Uncaught SyntaxError: Unexpected identifier
- Zookeeper简介与集群搭建【转】
- POJ 2417 Discrete Logging BSGS
- [leetcode]449. Serialize and Deserialize BST序列化反序列化二叉搜索树(尽量紧凑)
- 784. Letter Case Permutation
热门文章
- 内存分哪些区 C++,ios,java
- noip 2008 传纸条
- CodeForces - 1000D Yet Another Problem On a Subsequence
- 【线段树+离散化】POJ2528-Mayor&#39;s posters
- 使用redis时出现java.util.ArrayList cannot be cast to java.lang.Long
- 活动中使用提示框(Toast)
- Educational Codeforces Round 8 E. Zbazi in Zeydabad 树状数组
- BZOJ 4032: [HEOI2015]最短不公共子串 后缀自动机 暴力
- win7怎么设置1440*900分辨率
- app生成工具