Spring MVC 知识总结

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);

      }
时间: 2024-10-07 07:39:47

Spring MVC 知识总结的相关文章

Spring MVC知识

f-sm-1. 讲下SpringMvc和Struts1,Struts2的比较的优势 性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差不多,比Struts1要高 f-sm-2. 讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么 SpringMvc的是DispatchServlet,Struts1的是ActionServlet,Struts2的是StrutsPrepareAndExecuteFilter f

Spring MVC知识梳理

同上一篇博客,复习梳理SpringMVC知识点,这次的梳理比较快,很多细节没有顾虑到,后期可能会回来补充 1. 整体架构 1.1 在学习了SSM框架后我们来理清三者的应用层面 浏览器发送请求,请求到达SpringMVC处理,然后调用业务层逻辑实现,跟着持久层操作获取数据,最后逆序响应到浏览器.前面我们复习了Mybaits和Spring框架,我们当然不陌生了,现在就来了解下SpringMVC到底有什么作用 1.2 MVC MVC模型中,M是把浏览器传的参数封装成的pojo类型,V则代表视图,C就是

Spring MVC之基础知识:HTTP

故事还得从30年前的某个夜晚说起......这是我们经常在电视里看到的经典台词.借用一下,对于Spring MVC,我们还得从HTTP协议说起. HTTP协议 HTTP协议是一个应用层.基于请求/响应模型.无状态的协议.无状态意味着每个请求都是独立的,换而言之,各个请求之间如果需要互相传递信息,协议本身是无法帮我们完成的.这就是为什么需要额外的技术用于保存请求之间的状态,例如:cookie在客户端保存某些状态信息或是session在服务器保存状态信息. 统一资源定位符(URL) 统一资源定位符(

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

学习了一个多月的框架知识了,这两天很想将它整合一下.网上看了很多整合案例,基本都是基于Eclipse的,但现在外面公司基本都在用Intellij IDEA了,所以结合所学知识,自己做了个总结,有不足之处欢迎指正. 首先,我是参考了http://blog.csdn.net/zhshulin/article/details/37956105这篇做的Intellij IDEA翻版.Intellij IDEA的许多操作方式与习惯与eclipse区别很大,所以很容易走入误区.直接上操作吧. 1.基本概念

Spring MVC基础知识整理?View与Controller数据交互

概述 Spring MVC是由View—Controller—Model组成,其中View和Controller的数据交互,成为了关注的核心点.MVC中,我们将View中的数据传递到Controller,可以采用POST或者Get,传递相应的参数.Controller通过绑定来,匹配前台传递的参数.后台Controller也可以将值传递到前台页面. View值传递Controller 绑定传值的常用方式有如下 @RequestParam,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上

Spring MVC基础知识整理?Spring+SpringMVC+Hibernate整合操作数据库

概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibernate使用方便,配置响应的XML文件即可.由于spring3.x,基于asm的某些特征,而这些asm还没有用jdk8编译,所以采用Spring 3+JDK8就会报错,提示错误信息( java.lang.IllegalArgumentException),具体解决方案有:1.Spring 3+JDK7

Spring MVC基础知识整理?国际化和异常处理

概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. 国际化 Spring对国际化的语言采用配置的方式存储到配置文件中,在springservletconfig.xml文件,添加下面语句: <bean id="messageSource" class="org.springframework.context.support.

Extjs5.0从入门到实战开发信息管理系统(Extjs基础、Extjs5新特性、Spring、Spring mvc、Mybatis)视频教程

Extjs5.0从入门到实战开发信息管理系统(Extjs基础.Extjs5新特性.Spring.Spring mvc.Mybatis)视频教程下载   联系QQ:1026270010 Extjs作为一款优秀的JS前端开发框架以其良好的架构.丰富的UI组件库.完善的文档和社区支持等诸多优点拥有广泛的市场应用空间,开发人员无需过多的关注HTML.CSS甚至各种常用JS算法,只需把精力放在业务逻辑上,利用各种组件的相互组合调用便可轻松而高效的开发出系统的前端页面. Extjs5在之前版本的基础上又推出

spring mvc踩坑记

前言 主要介绍自己在学习spring mvc过程中踩到的一些坑,涉及到当时遇到这个错误是如何思考的,对思路进行总结,下次遇到类似的错误能够提供一些思路甚至快速解决. 环境准备 jdk8,spring4.3.3.RELEASE,spring mvc与spring版本一致,maven3.2.5,tomcat7 目标: 1.测试spring mvc的json参数绑定功能 2.测试spring mvc的返回json功能 项目目录(已经推送到github:https://github.com/Coming