• Spring MVC——交互层框架


    (1) MVC:web分层的一个核心也是非常“伟大”的一种设计模式

    ① 模型

    ② 视图

    ③ 交互

    ① 优势:

    1) 和Spring一脉相承

    2) 灵活性,更加优雅

    3) 兼容性

    1. SpringMVC的完整业务流程

    (1) 请求抵达web.xml                                                                                                            -前端控制器                  -web.xml中配置的servlet、filter在服务器启动的时候提前做一些配置过滤:包括获取bean拦截器等

    (2) Web.xml找到DispatcherServlet                                                                                        -页面控制器处理器        -获取controller当中的方法,

    (3) DispatcherServlet调用组件解析SpringMVC的配置文件                                                           -以及解析页面访问请求

    (4) 将配置文件的解析结果保存在HandlerMap当中(Controller,拦截器)                                         -(handmap匹配)--》handerChain进行chain()模型处理,返回modelview     

    (5) 匹配请求,寻找对应的Handler,即交互层Controller,执行该Controller                                       -

    (6) Controller调用Service获取业务数据模型Model

    (7) Service返回的业务模型,由Controller完成组装,组装成ModelAndView。即,模型和视图。

    (8) Controller将ModelAndView返回给DispatcherServlet,DispatcherServlet根据返回的视图信息

       ,将对应的数据模型,渲染到视图上,将视图的渲染结果交还给客户端。

    image


    uSpring MVC特点

    n清晰地角色划分

    n灵活的配置功能

    n提供了大量的控制器接口和实现类

    n真正的View层实现无关(JSP、Velocity、Xslt等)

    n国际化支持

    n面向接口编程

    nSpring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起

    操作:

    【1】pom依赖配置

          -spring-core、spring-context、spring-beans、spring-aop

          -javax.servlet-api     

          -AOP相关:spring-context-support、spring-web、spring-webmvc、spring-tx、spring-aspects

          -文件上传相关:commons-fileupload、commons-io

          -Json数据处理:jackson-mapper-asl、jackson-core、jackson-databind、jackson-annotations

    【2】其他配置文件:web.xml 对监听器、页面控制器的配置

    <!-- 配置配置文件 -->
         <context-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath*:/applicationContext.xml</param-value>
         </context-param>
        
         <!-- 监听器 -->
         <listener>
             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
         </listener>
        
         <!-- 页面控制器 -->
         <servlet>
             <servlet-name>mvc</servlet-name>
             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
             <init-param>
                     <param-name>contextConfigLocation</param-name>
                     <param-value>classpath*:/applicationContext.xml</param-value>
             </init-param>
             <load-on-startup>1</load-on-startup>
         </servlet>
         <servlet-mapping>
             <servlet-name>mvc</servlet-name>
             <url-pattern>*.do</url-pattern>   
         </servlet-mapping>

    applicationContext.xml配置

    <context:component-scan base-package="com.m.controller"/> //包扫描器

    ======简化*.do的路径配置

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

         </bean>

    ========文件上传配置

    <bean id="multipartResolver"
             class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
             <!--上传文件的最大大小,单位为字节 -->
             <property name="maxUploadSize" value="17367648787"></property>
             <!-- 上传文件的编码 -->
             <property name="defaultEncoding" value="UTF-8"></property>
         </bean>

    =========json数据处理配置

    <bean id="mappingJacksonHttpMessageConverter"
         class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
             <property name="supportedMediaTypes">
                 <list>
                     <value>text/html;charset=UTF-8</value>
                 </list>
             </property>
         </bean>
         <bean
         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
             <property name="messageConverters">
                 <list>
                     <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
                 </list>
             </property>
         </bean>

    【3】常用SpringMVC注解配置

    @Controller
    @Scope("prototype")
    【controller类上】@RequestMapping("/test2") + 【方法上】@RequestMapping("/t1")

    ========url不带参数名

    @RequestMapping("/t5/{arg1}/{arg2}/{arg3}")

    public void test5(@PathVariable String arg1,
                 @PathVariable String arg2,
                 @PathVariable String arg3)

    ============传参方法设置postget等

    @RequestMapping(value="/t6/{arg1}/{arg2}/{arg3}",
                 method={RequestMethod.POST,RequestMethod.GET})

    ============传参必须设置字段:params

    @RequestMapping(value="/t7/{arg1}/{arg2}/{arg3}",
                 method={RequestMethod.POST,RequestMethod.GET},
                 params={"random=123"})

    ===========Ant风格:?0/1个  *多个  **任意多个/a/b/c/

    @RequestMapping(value="/t8/{arg1}/{arg2}/{arg3}/id?",
                 method={RequestMethod.POST,RequestMethod.GET},
                 params={"random=123"})

    @RequestMapping(value="/t9/{arg1}/{arg2}/{arg3}/id*/{arg4}",
                 method={RequestMethod.POST,RequestMethod.GET},
                 params={"random=123"})

    @RequestMapping(value="/t10/{arg1}/{arg2}/{arg3}/**/{arg4}",
                 method={RequestMethod.POST,RequestMethod.GET},
                 params={"random=123"})

    ============多个dao方式

    @RequestMapping(value={"/test12","/test13"})

    页面转发:

    【1】request.getRequestDispatcher("/index.jsp").forward(request, response);   + request.setAttribute方法  与  el操作

    【2】ModelAndView :通过配置该对象进行页面转发,返回ModelAndView对象

    ModelAndView mAndView = new ModelAndView("/index.jsp");
             mAndView.addObject("msg", "hello this is ssm");
             return mAndView;

    【3】ModelMap:配置属性,返回转发页面路径字符串

    map.addAttribute("msg", "this is modleMap3");
    return "/index.jsp";

    【4】对【3】的转发增强——

          --返回: forward:/index.jsp

          --内部转发:return "forward:/test3/t5.do";

            url传参:"forward:/test3/t7.do?arg1=macro";

    文件处理:

    file.transferTo(new File("e://",file.getOriginalFilename()));

    file.getName()  //属性名

    file.getOriginalFilename()  //文件名

    file.getContentType()  //文件类型

    file.getSize()  //文件大小

    json数据处理

    @ResponseBody

    包括:实体类、maplistarrayset等

  • 相关阅读:
    Xcode编译报错信息总结
    iOS组件化方案
    xcodebuild命令
    Mac下配置MAMP Pro+PHPStorm
    Sublime Text PHP Mac系统环境配置
    JS生成二维码
    为IE和chrome编写单独的样式
    几个简单的VBS脚本程序以及其JS实现
    vue组件中使用iframe元素
    nginx简易部署
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/13507155.html
Copyright © 2020-2023  润新知