参考文章:http://www.oschina.net/question/84460_9608

孔浩视频

1. 几个关键类:

RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter 替代 DefaultAnnoationHandlerMapping 和 AnnotationMethodHandlerAdapter

DispatcherServlet , InternalResourceViewResolver

2. 默认配置文件名称:

*-servlet.xml

3. 可以使用<init-param>元素,手动指定配置文件的路径;

4. 基本配置

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

5. 传入参数的方式:

1). (@RequestParam("username") String username) // @RequestParam("username")中的参数会被认为是地址的一部分,如果不传此值,会报错

2). (String username)

3). (User user) // 页面以spring的form表单提交

4). (@ModelAttribute("user")User user) // 等于将user放到model中,可以处理页面跳转到添加页面时,无值可取的错误

5). @RequestMapping(value = "/{uniqueId:^\\d+$}",method = RequestMethod.GET)

public ModelAndView edit(@PathVariable("uniqueId") String uniqueId,

@RequestMapping(value="/{username}/update",method=RequestMethod.GET)

(@PathVariable String username,Model model) {

6). public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session)

可以传入HttpServletRequest、HttpServletResponse、HttpSession,值得注意的是,如果第一次访问页面,HttpSession没被创建,可能会出错;

将值传递给页面:

1). 参数中加map(Map<String,Obect)),map中添加要传递给页面的参数。取值方式:${key}

2). Model model ,model.addAttribute("username",username)

3). public String testParam(PrintWriter out, @RequestParam("username") String username) { //out直接输出

6. Controller中方法的返回值:

void:多数用于使用PrintWriter输出响应数据;

String 类型:返回该String对应的View Name;

任意类型对象:

返回ModelAndView:

7. 拦截器:

preHandle:拦截器的前端,执行控制器之前所要处理的方法,通常用于权限控制、日志,其中,Object o表示下一个拦截器;

postHandle:控制器的方法已经执行完毕,转换成视图之前的处理;

afterCompletion:视图已处理完后执行的方法,通常用于释放资源;

在MVC的配置文件中,配置拦截器与需要拦截的URL:

        <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/index.htm" />
<bean class="com.minx.crm.web.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>

8. Spring标签:

<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>,使用<spring:message code="key" />调用

Spring form标签:<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>,使用方式如下:

<form:form method="post" modelAttribute="user" enctype="multipart/form-data">
Username:<form:input path="username"/><form:errors path="username"/><br/>
Password:<form:password path="password"/><form:errors path="password"/><br/>
Attach:<input type="file" name="attachs"/><br/> <input type="file" name="attachs"/><br/> <input type="file" name="attachs"/><br/>
<input type="submit" value="添加用户"/>
</form:form>

9. 国际化:

在MVC配置文件中,配置国际化属性文件:

<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="message">
</bean>

那么,Spring就会在项目中搜索相关的国际化属性文件,如:message.properties、message_zh_CN.properties

10. 自定义视图(JstlView,ExcelView)

启用jstl支持, 在InternalResourceViewResolver中加入,貌似新版可以不加,默认启用:

 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

11. 异常:

局部异常处理,举例如下:

             @ExceptionHandler(value={UserException.class})
public String handlerException(UserException e,HttpServletRequest req) {
req.setAttribute("e",e);
return "error";
}

全局异常处理:

             <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- UserException异常由error处理-->
<prop key="zttc.itat.model.UserException">error</prop>
</props>
</property>
</bean>

页面获取异常:

  发现错误:<h1>${exception.message}</h1>

12. 返回json数据:

需要jackson的jar包,url以params="json"中的json结尾:

  @RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")
@ResponseBody
public User show(@PathVariable String username) {
return users.get(username);
}

13. 静态资源处理:

方法一:

       <!-- 将静态文件指定到某个特殊的文件夹中统一处理,/resources/以/结尾 -->
<mvc:resources location="/resources/" mapping="/resources/**"/>

方法二:

<mvc:default-servlet-handler>:当在web.xml 中DispatcherServlet使用<url-pattern>/</url-pattern> 映射时,能映射静态资源(当Spring Web MVC框架

没有处理请求对应的控制器时(如一些静态资源),转交给默认的Servlet来响应静态文件,否则报404找不到资源错误,)

14. 验证:

           @Validated User user,BindingResult br ;两个必须放在一起,将验证结果放到br中
public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException {
if(br.hasErrors()) {
//如果有错误直接跳转到add视图
return "user/add";
}
}
页面显示错误信息的代码: <form:errors path="username"/>

15 返回页面的两种方式:

return "user/show";

return "redirect:/user/users";

16. map集合取值

(map.put("users",users),users为也是个map):

   <c:forEach items="${users }" var="um">

      ${um.value.username }

       ----<a href="${um.value.username }">${um.value.nickname }</a>

       ----${um.value.password }

       ----${um.value.email }--<a href="${um.value.username }/update">修改</a>

       <a href="${um.value.username }/delete">删除</a><br/>

   </c:forEach>

 17.  字符编码处理:   

      <filter>
<filter-name>CharacterFilter</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>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 19. 文件上传

页面要求:POST请求;enctype="multipart/form-data":

      只上传一个文件:

      jsp页面:<input type="file" name="attach"/>

      类:@RequestParam("attachs")MultipartFile attach

      上传多个文件:

       jsp页面:Attach:<input type="file" name="attachs"/><br/>    <input type="file" name="attachs"/><br/>    <input type="file" name="attachs"/><br/> 

       类:

       //在具体添加用户时,是post请求,就访问以下代码

       @RequestMapping(value="/add",method=RequestMethod.POST)

       //一定要紧跟Validate之后写验证结果类

       public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException {

             if(br.hasErrors()) {

                    //如果有错误直接跳转到add视图

                    return "user/add";
} String realpath = req.getSession().getServletContext().getRealPath("/resources/upload"); System.out.println(realpath); for(MultipartFile attach:attachs) { if(attach.isEmpty()) continue; File f = new File(realpath+"/"+attach.getOriginalFilename()); FileUtils.copyInputStreamToFile(attach.getInputStream(),f); } users.put(user.getUsername(), user); return "redirect:/user/users"; } @RequestParam("attachs")MultipartFile[] attachs 数组的时候不会自动赋值,不可以使用MultipartFile[] attachs

20. 返回json数据

需要jackson的jar包,url以params="json"中的json结尾:

      @RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")

      @ResponseBody

      public User show(@PathVariable String username) {

            return users.get(username);

      }

Spring MVC 知识总结的更多相关文章

  1. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

  2. Spring MVC知识

    f-sm-1. 讲下SpringMvc和Struts1,Struts2的比较的优势 性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差 ...

  3. Spring MVC知识梳理

    同上一篇博客,复习梳理SpringMVC知识点,这次的梳理比较快,很多细节没有顾虑到,后期可能会回来补充 1. 整体架构 1.1 在学习了SSM框架后我们来理清三者的应用层面 浏览器发送请求,请求到达 ...

  4. spring、spring mvc、mybatis框架整合基本知识

    学习了一个多月的框架知识了,这两天很想将它整合一下.网上看了很多整合案例,基本都是基于Eclipse的,但现在外面公司基本都在用Intellij IDEA了,所以结合所学知识,自己做了个总结,有不足之 ...

  5. Spring MVC基础知识整理➣拦截器和自定义注解

    概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...

  6. spring笔记4 spring MVC的基础知识4

    //todo 5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等 spring MVC 默认使用AcceptHeaderLocalResolver,根据报文头的Accep ...

  7. spring笔记3 spring MVC的基础知识3

    4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...

  8. spring笔记2 spring MVC的基础知识2

    2,spring MVC的注解驱动控制器,rest风格的支持 作为spring mvc的明星级别的功能,无疑是使得自己的code比较优雅的秘密武器: @RequestMapping处理用户的请求,下面 ...

  9. spring笔记1 spring MVC的基础知识1

    1,spring MVC的流程 优秀的展现层框架-Spring MVC,它最出彩的地方是注解驱动和支持REST风格的url.   流程编号 完成的主要任务 补充 1 用户访问web页面,发送一个htt ...

随机推荐

  1. MySQL- INSTR 函数的用法

    测试数据库: MYSQL数据库 INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX); STR 被搜索的字符串 SUBST ...

  2. c#基础 第四讲

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  3. Windows配置MinGW环境变量

    先安装MinGW 1.添加3个系统变量(根据自己的实际路径) MinGW_INCLUDE_PATH MinGW_LIBRARY_PATH MinGW_PATH 2.将MinGW_PATH添加到Path ...

  4. TOMCAT------>web资源访问

    1.web应用达成war包 通过命令行打war包:jar -cvf xxx.war xxx 因为放到webapps里电脑会自动识别,自动解压 2.relodeable="true" ...

  5. Spoken English Practice(1、This is between you and me, Don't let it out. 2、Don't let your dreams be dreams, no matter how hard it gets, say to yourself, I'm going to make it.)

    绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/7/12) ...

  6. End-to-End Speech Recognition in English and Mandarin

    w语音识别.噪音.方言,算法迭代. https://arxiv.org/abs/1512.02595 We show that an end-to-end deep learning approach ...

  7. 新团建立时间 timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    w 不根据当前时间戳更新. `wtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,

  8. SqlServer SqlBulkCopy批量插入 -- 多张表同时插入(事务)

    这段时间在解决一个多个表需要同时插入大量数据的问题,于是在网上找了下,查到说用SqlBulkCopy效率很高,实验后确实很快,10万条数据只要4秒钟,用ef要用40秒.但是我的还需两张表同时插入,且需 ...

  9. 【css】长文本左侧显示省略号

    classnames: https://blog.csdn.net/duola8789/article/details/71514450 react普通样式 行内样式: https://blog.cs ...

  10. css冲突2 要关闭的css在项目代码以外,但是是通过<link>标签引入的css(例如bootstrap):解决方法,在APP.css中使用全局样式

    css冲突,导致html字体过小. 通过浏览器检查发现,导致字体过小的css来自bootstrap. 现要关闭bootstrap的css: 直接在APP.css中添加: html{ font-size ...