配置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. 实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vi ...

  2. Problem B: 颠倒字符串

    #include<stdio.h> #include<string.h> //用来调用strlen(str)函数 int main() { int i,n; ]; while( ...

  3. 控制台+Owin搭建WebAPI接口服务

    当没有iis环境.想快速启动几个api接口测试又觉得新建一个api项目麻烦?来使用控制台做宿主,快速改几个api测试吧! 1.新建控制台项目 2.安装以下相关依赖 Microsoft.AspNet.W ...

  4. 移动端touchstart事件穿透问题,解决方案

    [来源]:在开发移动端网站时,会经常徘徊在click和touchstart之间:因为touchstart虽然好用和快速响应:但是其缺点也是显而易见的,当我们大面积的使用touchstart的时候就会遇 ...

  5. quartz做集群配置较短的时间间隔会重复执行任务的问题

    quartz.properties org.quartz.jobStore.misfireThreshold = 60000 这个参数(单位为毫秒)设置了以后就是超时1min的就不执行,小于1min会 ...

  6. jquery避免跟其他库冲突

    方法一: var $j=JQuery.noConflict(); $j('#msg').hide();//此处$j就代表JQuery 方法二: JQuery.noConflict(); JQuery( ...

  7. asp.net core 1.0初识

    本文将对微软下一代ASP.NET框架做个概括性介绍,方便大家进一步熟悉该框架. 在介绍ASP.NET Core 1.0之前有必要澄清一些产品名称及版本号.ASP.NET Core1.0是微软下一代AS ...

  8. c# 冒号:C#中两个冒号(::)的作用

    global::System.Console.WriteLine(number); 冒号在什么地方用. 点是空间下类,表示下一层的意思? 这里面::前面是GAC的标示符global,用法比较特殊,和. ...

  9. 解决安卓TextView高度和textSize大小不一致问题

    在设计安卓界面的时候我发现一个TextView在布局上占用的高度和属性textSize的大小不一样,要比textSize要来的大(比如textSize="12dp",实际的高度大概 ...

  10. 在MySQL中使用子查询和标量子查询的基本用法

    一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没 ...