配置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. VB查询数据库之登陆窗体——机房收费总结(一)

    机房收费系统已经做了很长一段时间了,虽然到目前为止,仍然没有结束,但已经结节尾声了.我感觉现在有必要回首总结一下整个机房收费系统. 除了结账做了一半,报表接触一点之外,其他的都基本上差不多了.从做过的 ...

  2. 【贪心】【set】zoj3963 Heap Partition

    贪心地从前往后扫,每到一个元素,就查看之前的元素中小于等于其的最大的元素是否存在,如果存在,就将它置为其父亲.如果一个结点已经是两个儿子的父亲了,就不能在set中存在了,就将他删除.如果然后将当前元素 ...

  3. 94.Txx考试

    2894 Txx考试  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description Txx是一个成绩很差的人,考试便成了他 ...

  4. mysql服务常用命令

    一.查出当前mysql正在执行的sql命令mysql> show full processlist; 然后找出要终止的语句的idmysql> kill id号 未登录的情况下>mys ...

  5. XCode6 ,iOS之PCH文件配置

    1: 创建PCH文件 NewFile-->Other中的PCH File-->Next-->Create 2:配置PCH文件 项目中的TARGETS-->Build Setti ...

  6. fedora19/opensuse13.1 配置openvpn client

    Date: 20140207Auth: Jin 1.install # yum -y install openvpn #zypper install openvpn 2.copy user key # ...

  7. CString.Format %s 字符串 要用char *

    CString.Format %s 字符串 错了,应该是:std::string str;CString sql;sql.Format("%s",str.c_str());所以正确 ...

  8. virtualbox4.2.18 ubuntu12.04 The system is running in low-graphics mode

    参考1:http://askubuntu.com/questions/225090/the-system-is-running-in-low-graphics-mode-error-in-virtua ...

  9. 万里长征第二步——django个人博客(第一步 ——创建主页)

    运行命令行工具,输入:pip install virtualenv  --安装virtualenv库. virtualenv blog_project_venv ——使用virtualenv创建一个虚 ...

  10. all-oone-data-structure(好)

    哈哈,我用了HashMap, 双向链表,还有了HashSet来保存key的集合. 现在这道题目还只有 9.3%的AC率,难度为HardTotal Accepted: 9 Total Submissio ...