配置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数据校验

  1. 导入Hibernate Validator的类库
  2. 在bean的属性上添加注解@Email等
  3. 请求方法中使用@Valid注解声明要校验的对象
  4. 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

异常处理

  1. 新的方法处理异常:使用@ExceptionHandler({ArithmeticException.class})
  2. 新建异常处理类,使用@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()方法实现文件上传操作

自定义拦截器

  1. 继承HandlerInterceptorAdapter

  2. 实现HandlerInterceptor接口

  3. 在配置文件中进行配置

<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学习小结的更多相关文章

  1. flex学习小结

    接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...

  2. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  3. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  4. SpringMVC学习系列-后记 解决GET请求时中文乱码的问题

    SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...

  5. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  6. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  7. SpringMVC学习系列-后记 开启项目的OpenSessionInView

    在系列的 SpringMVC学习系列(12) 完结篇 的示例项目中,由于当时考虑到OpenSessionInView会对性能有一定的影响,所以就没有配置项目的OpenSessionInView.在ma ...

  8. SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码

    在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...

  9. SpringMvc学习心得(五)控制器产生与构建

    SpringMvc学习心得(五)控制器产生与构建 标签: springspring mvc框架 2016-03-22 15:29 140人阅读 评论(0) 收藏 举报  分类: Spring(4)  ...

随机推荐

  1. 【DFS】【DP】岳麓山上打水

    [vijos1159]岳麓山上打水 描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信 ...

  2. HDU 6057 Kanade's convolution(FWT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6057 [题目大意] 有 C[k]=∑_(i&j=k)A[i^j]*B[i|j] 求 Ans ...

  3. [UOJ347]通道

    锟题x1 以下用$d_k(x,y)$表示$x,y$在第树$k$上的距离,$h_k(x)$表示$x$在树$k$上的深度 先做两棵树,即最大化$d_1(x,y)+d_2(x,y)=h_1(x)+h_1(y ...

  4. JDK源码学习笔记——ArrayList/Vector

    一.类定义 public class ArrayList<E> extends AbstractList<E> implements List<E>, Random ...

  5. 求数组的平均值 Exercise07_08

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:求数组的平均值 * */ public class Exercise07_ ...

  6. winform 中设置窗体的默认焦点

    转载:http://www.cnblogs.com/weekzero/p/3504513.html winform的窗体中,有时候需要设置默认焦点,有时候需要取消默认焦点. 设置默认焦点,最简单的方法 ...

  7. 如何ping测有端口的网站

    参考:http://jingyan.baidu.com/article/c1a3101e878dcede656deb05.html 参考2:http://www.haoid.cn/post/261 现 ...

  8. linux面试题目--1

    Linux面试题目 填空题1. 在Linux系统中,以 (文件)方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用i节 ...

  9. Docker创建centos的LNMP镜像

    前段时间重装了系统,今天刚好有时间,就用docker安装一个lnmp开发环境,下面是我的安装笔记. 1. 安装docker 这个就不说了,不会的可以看下我之前的文章<Docker介绍及安装> ...

  10. VB6.0中数组的定义实測

    作者:iamlasong 1.环境 Visual Basic 6.0精简版,由于仅仅做一些小工具,认为这个已经够了.我认为.编程语言.数据库等东西,不一定要用最新的,适合.够用就好,比方Win8都出来 ...