zoukankan      html  css  js  c++  java
  • SpringMVC归纳

    SpringMVC归纳

    操作流程

    配置前端控制器

    web.xml中配置

     

    配置处理器映射器

    springmvc配置文件中配置

     

    配置处理器适配器

    springmvc配置文件中配置

     

    配置注解适配器和映射器

     

    以下标签可以代替以上这两个配置,并且该标签还配置了json相关信息。

     

     

    配置视图解析器

    springmvc配置文件中配置

     

    Handler的写法

    1.实现Controller接口

     

    2.实现HttpRequestHandler接口

     

    3.使用@Controller注解

     

     

    Handler方法的创建形式

    1.返回值为ModelAndView

     

    2.返回值为String,使用return控制分发和重定向(默认为分发)

     

    分发:return "request:itemsList.action";

     

    重定向:return "redirect:itemsList.action";

     

     

    3.使用返回值为void 的方法,用request添加模型数据和跳转页面;

     

    常用功能

    窄化请求映射

    Controller类上面加上@RequestMapping注解

     

     

    限制HTTP请求

    @RequestMapping注解中配置method属性

     

    参数绑定(形参与传递过来的参数名称不一致)

    在需要配置的参数前添加@RequestParam注解,系统会将“传递过来的参数名称与该注解配置的value值相同的参数”的值赋给该配置参数。

     

    数据回显

    SpringMVC框架中,Handler中的方法形参会被自动填充到request域中,通过@ModelAttribute可以指定pojo回显到request中的key名,但是简单类型如Integer不支持回显,只能通过model设置属性方法。

     

    Handle中的方法前加上@ModelAttribute注解,可以将该方法的返回值添加到request域中,并且该方法每次都会执行,而且是最先执行的。

     

    参数绑定

    1.处理器适配器调用springmvc提供的参数绑定组件将key/value数据转成controller方法的形参;

    2.参数绑定组件:在springmvc早期版本中是使用PropertyEditor(只能将字符串转成java对象),而后期版本使用converter(可以进行任意类型的转换),springmvc提供了很多的converter,特殊情况下需要自定义converter,如日期时间格式转换。

    自定义参数绑定

    实现Converter接口

     

    springmvc配置文件中配置

    1.

     

    2.

     

     

    post请求乱码

     

    将上述配置在web.xml中进行配置即可;

    get请求乱码

    第一种办法是修改tomcat配置文件添加编码与工程编码一致,如下:

    <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080"

    protocol="HTTP/1.1" redirectPort="8443"/>

    另外一种办法对参数进行重新编码;

    String userName=new String(request.getParamter("username").getBytes("ISO8859-1"),"utf-8")

    数组绑定

     

     

    List绑定

     

    Map绑定

     

     

    校验框架

    Springmvc.xml中配置

     

    PO类添加校验规则

     

    添加错误信息属性文件

     

    Handler配置

     

    获取错误信息

     

    ItemsQuery类中包装了一个ItemsCustom对象,然后我校验ItemsQuery对象,结果是校验不成功,所以该校验框架只能校验直接设置了校验属性的对象

    分组校验

    创建接口

     

    PO类添加校验规则

     

    Handler配置

     

    如果校验的属性没有添加分组,则处于无分组;那么在Handler中不指定分组,则程序会调用无分组的属性。

    文件上传

    配置multipart类型解析器

     

    Jsp页面配置

     

    Handler配置

     

    需要以下jar

     

    创建图片虚拟目录

    Tomcatserver.xml中配置一下这条语句,即可在web应用中实用pic作为docBase指定路径的虚拟路径;

     

     

    实现json交互

    @RequestBodyjson数据转换为java对象

    @ResponseBodyjava对象转换为json数据

    相关jar

     

     传入的数据是json,传出的数据是json

     

     传入的数据是key/value,传出的数据是json

     

    <mvc:annotation-driven/>标签已经配置了json转换器,无需手动配置了;

    springmvcurl映射中,//*的区别

    /可以用来实现RESTful架构,但是会导致程序不能直接访问静态资源文件,如jscssimg文件;它不会匹配到*.jsp,即*.jsp不会进入springDispatcherServlet类 。

    /*会匹配*.jsp,会出现返回jsp视图时再次进入springDispatcherServlet 类,导致找不到对应的controller所以报404错或堆栈异常。

    springmvc中可以配置多个DispatcherServlet,比如: 配置多个DispatcherServlet//*,先匹配的是/*这个。

    详解:当我在客户端调用URL/user/list然后返回user.jsp视图,当配置的是/DispathcherServlet拿到这个请求然后返回对应的controller,然后依据Dispather TypeForward类型转发到user.jsp视图,即就是请求user.jsp视图(/user/user.jsp),此时Dispather没有拦截/user/user.jsp,因为此时你配置的是默认的/,就顺利的交给ModleAndView去处理显示了。当配置的是/*DispathcherServlet拿到这个请求然后返回对应的controller,然后通过Dispather Type通过Forward转发到user.jsp视图,即就是请求user.jsp视图(/user/user.jsp),此时Dispather已经拦截/user/user.jspDispatcher会把他当作Controller去匹配,没有匹配到就会报404错误或堆栈异常。

    总之,关于web.xmlurl映射的小知识:
    < url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
    < url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js*.html)

    使用/时,开启对静态文件的扫描

     

     

    RESTful架构

     

    拦截器

     

    perHandle()方法返回true,则代表放行,返回false,则代表不放行。

    拦截器的执行先后顺序

    ① 全部放行

    preHandle

    HandlerInteceptor2.......preHandle

    HandlerInteceptor2.......postHandle

    postHandle

    HandlerInteceptor2.......afterCompletion

    afterCompletion

    相当于栈,先进后出

    ② 拦截器1放行,拦截器2不放行

    preHandle

    HandlerInteceptor2.......preHandle

    afterCompletion

    只要一个拦截器不放行,那么所有的拦截器都不会执行

    常见问题

     

     

  • 相关阅读:
    CentOS-6.8 最详细安装教程(贴镜像文件+多图)
    SSM 框架整合完整流程讲解(IDEA + Maven)
    【万字长文】Spring MVC 层层递进轻松入门 !
    Spring AOP 由浅入深学习教程【新手向】
    Spring 注解和XML两种方式配置IOC
    【万字长文】Spring框架 层层递进轻松入门 (IOC和DI)
    用idea搭建SSM项目,原来这么简单
    Java并发编程:什么是CAS?这回总算知道了
    Java并发编程:Java的四种线程池的使用,以及自定义线程工厂
    Java并发编程:Java线程池核心ThreadPoolExecutor的使用和原理分析
  • 原文地址:https://www.cnblogs.com/syjp/p/11082795.html
Copyright © 2011-2022 走看看