Spring简介

SpringMVC和Struts2一样都是属于表现层的框架,将前段发出的请求分发给对应的后端处理器即Controller

处理流程

  • 用户请求被前端控制前拦截,然后根据对应的拦截路径去处理器映射器中寻找对应的Handler,然后通过处理器适配器执行指定的Handler处理器适配器会将执行后的结果返回给前端控制器,前端控制器选择对应的视图解析器渲染和解析视图,最后将结果相应给用户。

配置文件

  • web.xml

  • 需要创建springmvc.xml文件放在根目录下,更改<param-value>classpath:springmvc.xml</param-value> 来指定配置文件的位置。

  • 路径问题

    • /* 拦截所有 jsp js png .css 真的全拦截 建议不使用

    • *.action *.do 拦截以do action 结尾的请求 肯定能使用 ERP

    • / 拦截所有 (不包括jsp) (包含.js .png.css) 强烈建议使用

springMVC的三大组件和核心

  • 核心 : DispatcherServlet(前端控制器)

  • 三大组件 :

    • ViewResolver : 视图解析器

    • HandlerMapping : 处理器映射器组件(查找路径名对应的Handler)

    • HandlerAdapter : 处理器适配器组件(执行Handler)

@RequestMapping

  • value : 访问此方法的访问路径,可以是数组

  • method : 可以设置表单提交方式(post/get) 如果表单不符合,就会出现异常,可以是数组

  • 可以添加在类上面,类似struts2的namespace 则下面的方法都需要有类上父路径才能访问

第一个Controller

  • 第一个Controller

  • @RequestMapping(value = "test.action") // 在方法上面添加注解 value 为访问路径

  • @Controller (需要添加Controller,并且在springMVC中配置注解扫描)

Controller返回值

  • Controller是单例的, 当每个线程进来的时候会从这个程序创建一个副本,然后线程访问这个副本.

  • ModelAndView : 返回view 和 model (数据)

    • mav.setViewName("test.jsp"); // 返回视图

    • mav.addObject("test", "this is mmmmm"); // 封装数据, 内部为封装的request.setAttribute

  • Model : 常用

    • public String UserList(Model model){}

    • 这样就可以直接return ""; 来返回视图

    • model.addAttribute("userList",id); 内部为封装的request.setAttribute

    • 重定向 : return 'redirect:/item/itemlist.action' // 提交表单最好使用重定向,这样可以防止表单重复提交

    • forward : return 'forward:/item/itemlist.action' // 默认

  • void : ajax

    • 不返回视图

参数绑定

  • 由于Controller是单例的,所以我们需要将参数封装到方法属性中

    • public String UserList(User user,Model model,String id){}

    • User : 前段的input name和user内的属性名相同,可以自动封装

    • String id : 接受超链接传过来的值

  • 也可以传递request,response,session

    • public ModelAndView toEdit(Integer id,HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model){}

    • public ModelAndView updateitem(QueryVo vo){} 封装pojo

    • vo : User s , 前端 s.name

  • 参数绑定 : 数组

    • 直接在形参传递数组,可以接受例如checkbox之类的多选的值
  • 参数绑定 : list

    • 只能使用包装类来提交,不能再形参直接传递list

    • 前段用 itemList[0].name 作为name, 适用于批量修改

自定义参数绑定

  • 使用 <mvc:annotation-driven />

  • 如果某些数据的格式不正确(比如日期),则可以自定义日期转换

  • 首先在SpringMVC.xml 中配置类型转换器

  • 然后自定义转换器类,实现需要进行的转换

  • SpringMVC.xml 配置

  • 转换类

post提交乱码

  • 在web.xml中配置编码过滤器

  • xml

异常处理

异常处理器

  • 将下层抛上来的异常做一个统一的处理

  • 过程 :

    • 建一个类,并且实现HandlerExceptionResolver接口,实现对应的方法

      •   	public ModelAndView resolveException(HttpServletRequest request,
        HttpServletResponse response, Object obj,
        Exception e) {
        /*
        * request / response : 发生异常的响应
        * obj : 发生异常的地方
        *
        * */ ModelAndView andView=new ModelAndView();
        andView.addObject("error", e);
        andView.setViewName("/error.jsp");
        return andView;
        }
    • 在springMVC配置文件中配置这个bean

      • <bean class="com.lyh.exception.CustomerException"></bean>
    • 当有异常时就会按照你所想要的方式去处理

自定义异常

  • 知道异常为什么出现,然后可以进行对应的操作

  • 只需要自定义一个异常类,然后在异常处理器判断这个发生的异常是否是我们自定义的异常类,然后进行对应的操作

上传文件

  1. 设置表单name,设置表单post 以及enctype="multipart/form-data"

  2. 在controller中的的参数中设置MultipartFile multipartFile , 注意, 属性名要和name名相同

  3. 在springmvc中配置 , 在这里可以设置参数来限制上传大小,类型之类

    	<!-- 上传图片实现类  id 固定-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 控制上传图片的大小 B
    <property name="maxUploadSize" value="5000"></property>
    -->
    </bean>
  4. 实现上传 multipartFile.transferTo(new File("D:\\upload\\"+ name+"."+suf)); //保存到指定地点

  5. controller代码

json

  • 属性添加注解@RequestBody

    • 接受json,自动转化为对象(接受的要为json字符串,js中转换字符串的方式JSON.stringify(data))
     	前段:
    <script type="text/javascript">
    $(document).ready(function(){
    var saveDataAry=[];
    var data1={"user":"ququ","age":1};
    $.ajax({
    type:"POST",
    url:"${pageContext.request.contextPath }/jsonTest.do",
    dataType:"json",
    contentType:"application/json", // 需要设置头为json
    data:JSON.stringify(data1), // 转换Json对象为字符串
    success:function(data){
    }
    });
    });
    </script>
    	@RequestMapping(value="json.action")
    public void json(@RequestBody User user){
    }
  • 方法添加注解 @ResponseBody , 返回json, 自动转换为json字符串

    @ResponseBody
    public User json(@RequestBody User user){
    return user;
    }

拦截器

自定义拦截器

  • 实现接口 HandlerInterceptor , 其中三个方法分别对应方法执行前 , 执行后 , 页面渲染后

  • 配置拦截器

    	<mvc:interceptors>
    <mvc:interceptor>
    <mvc:mapping path="/*.action"></mvc:mapping>
    <mvc:exclude-mapping path="/userList.action"></mvc:exclude-mapping>
    <bean class="com.lyh.interceptor.InterceptorOne"></bean>
    </mvc:interceptor>
    </mvc:interceptors>
  • 拦截器的执行位置 : 对应方法执行前 , 执行后 , 页面渲染后

多个拦截器执行顺序

  • 拦截器内的跳转需要使序 :

    • 每个阶段都会执行所有拦截器的这个阶段的方法,执行完毕以后再进行下一个阶段的拦截

    • perHandler 按照拦截器定义顺序调用

    • postHandler 按照拦截器定义的逆序调用

    • afterCompletion 按照拦截器定义的逆序调用

    • postHandler 是在拦截器链所有拦截器返回成功调用

    • afterCompletion只有在preHandler返回为true的时候才调用

springMVC和Struts的区别

  • springMVC是单例, Struts2为多例

  • springMVC参数绑定在形参 , Struts2 绑定成员变量

  • springMVC没有值栈 Struts2 有值栈

  • springMVC的入口是一个Servlet, Struts2为一个Filter

SpringMVC知识一锅烩的更多相关文章

  1. SpringMVC知识大览

    SpringMVC大览 springMVC的基础知识 什么是SpringMVC? springmvc框架原理(掌握) 前端控制器.'处理映射器.处理适配器.视图解析器 springmvc的入门程序 目 ...

  2. SpringMVC 知识整理

    SpringMVC架构设计 MVC是一种架构模式,它把业务的实现和展示相分离. SpringMVC与struts2的区别 Struts2是类级别的拦截, 一个类对应一个request上下文,Sprin ...

  3. SpringMVC知识(1)

    1.SpringMVC的工作流程 流程 : 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器. ...

  4. 二:SpringMVC知识整理

    springmvc复习: 1.SpringMVC介绍 2.SpringMVC入门程序 1)创建web工程 2)导入jar包 3)在web.xml中配置前端控制器(指定上下文件的路径 classpath ...

  5. 「黑客必备技能」Python正则表达式详解

    说在前面 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能. 正则表达式在不同的语言中使 ...

  6. 【CTO辩论会】移动开发人员忠于技术or 背离技术

    第一期CTO辩论会结束后,大家在微信群中讨论,学什么编程语言好.有位官人直呼"劳力者治于人,苦差,不学也罢". 在IT.科技变革世界的今天,移动开发人员成为一个很时髦的工种. 就连 ...

  7. Redis面试热点工程架构篇之数据同步

    温馨提示 更佳阅读体验:[决战西二旗]|Redis面试热点之工程架构篇[2] 前言 前面用了3篇文章介绍了一些底层实现和工程架构相关的问题,鉴于Redis的热点问题还是比较多的,因此今天继续来看工程架 ...

  8. 不要再说不会Spring了!Spring第一天,学会进大厂!

    工作及面试的过程中,作为Java开发,Spring环绕在我们的身边,很多人都是一知半解,本次将用14天时间,针对容器中注解.组件.源码进行解读,AOP概念进行全方面360°无死角介绍,SpringMV ...

  9. 地址标记,SpringMVC转发与调用相关知识存档

    1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...

随机推荐

  1. JavaScript案例开发之扑克游戏

    随着时代的发展,知识也在日益更新,但是基础知识永远不会过时,它是新时代的基石,更是我们进一步学习的保障,下面带着大家用JavaScript开发一款真正的扑克游戏,和大家一起分享,希望你们能够喜欢:闲话 ...

  2. Dubbo服务接口的设计原则

    1.接口粒度 1.1 服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo暂未提供分布式事务支持.同时可以减少系统间的网络交互. 1.2 服务 ...

  3. 在Ubuntu终端彻底删除软件

    在Ubuntu终端彻底删除软件 1.删除软件 方法一.如果你知道要删除软件的具体名称,可以使用 sudo apt-get remove --purge 软件名称 sudo apt-get autore ...

  4. 【工具篇】.NET开发常用工具

    1   问题概述 本篇文章主要介绍,笔者在开发工作中,常用的开发工具.见下表: 2   工具介绍 2.1  接口调试工具  ——  Postman 2.1.1 推荐网站 https://www.get ...

  5. sql server作业实现数据同步

    作业介绍  SQL SERVER的作业是一系列由SQL SERVER代理按顺序执行的指定操作.作业可以执行一系列活动,包括运行Transact-SQL脚本.命令行应用程序.Microsoft Acti ...

  6. javascript字符串对象

    String字符串对象 1. 字符串粗体展示: var a = "陈冠希喜欢拍电影";   document.writeln(a.bold()+"<br/>& ...

  7. cocos2dx - shader实现任意动画的残影效果

    本节主要讲利用cocos2dx机制实现opengl es shader脚本的绘制 这里先看下最终效果:                      这里分别实现了灰度效果及残影的效果. 一.绘制基类 这 ...

  8. 【爬虫入门手记03】爬虫解析利器beautifulSoup模块的基本应用

    [爬虫入门手记03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.Bea ...

  9. 11-05-sdust-个人赛赛后随想

    第二次打个人赛 这次居然打秃了,被A题卡的体无完肤.....结果之后转D题心里挂着A题...D题也被卡. 然后第二天不甘心,翘课来机房敲昨天的题,结果两题完全重新敲,都是10分钟左右敲完代码,A题1掉 ...

  10. HandlerMapping 和 HandlerAdapter

    HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,将它们封装在HandlerExecutionChain 对象中给前端控制器返回. ...