配置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. bzoj 2159: Crash 的文明世界

    Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 480  Solved: 234[Submit][Status][Discuss] Descripti ...

  2. [xsy2123]毛毛虫

    题意:有一棵带点权的树,链修改是把$(x,y)$这条链和与其相邻的节点都加上一个数,查询是问$(x,y)$这条链和与其相邻的节点的权值和 学到了一个新姿势? 考虑树链剖分,在剖重链时每次给当前节点的儿 ...

  3. ConcurrentHashMap(Java8)源码分析

    1. 常量.成员变量 private static final int MAXIMUM_CAPACITY = 1 << 30; // 和HashMap一样 private static f ...

  4. Java中的服务器与客户端的简单连接

    Java中重点之一就是服务器与客户端的连接,因为是在同一台PC上,所以就设置服务器的地址为“localhost”,注意,我当时试着设置其他名称,但都不行,这个原因还请老司机告一下.另外还要注意,服务端 ...

  5. 模式匹配之Kmp算法

    Kmp: 算法定义借鉴wikipedia: http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm#KMP_ ...

  6. 微信小程序,工具未检测合法域名,400 (Bad Request)错误

    1.工具未检测合法域名 这个我就不多说了,如果你新建的时候没有填写AppID的话这个我就不太清楚了 如果新建项目的时候填写了AppID的话,出现这种错误,那你应该去小程序后台 设置->开发者设置 ...

  7. CSS揭秘之多重边框&连续的图像边框

    1.多重边框 我们可以通过使用border-image来写一个多重边框,或使用多个元素来模拟多重边框,不过我们有更好的办法来制作一个多重边框,那就是使用box-shadow的第四个参数(称为扩张半径) ...

  8. Android ANR优化 1

    1, 你碰到ANR了吗 在App使用过程中, 你可能遇到过这样的情况: ANR 恭喜你, 这就是传说中的ANR. 1.1 何为ANR ANR全名Application Not Responding, ...

  9. [Android Pro] 获取手机已经安装的应用 和 获取当前正在运行的所有进程(一个uid对应多个pid)

    1: 获取PackageManager 获取全部静态已安装的应用: PackageManager pm = getPackageManager(); List<PackageInfo> i ...

  10. CorelDRAW和Illustrator比较, 9 CorelDRAW Graphics Alternatives

    至于要不要学Illustrator,完全凭个人意愿.如果你精通Coreldraw,学不学都一样.因为二者几乎可以完全替代. CDR:是一个纯图形设计软件.排版比其他二个软件好用. 一般来讲CDR更适合 ...