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()模型处理,返回model\view     

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

============传参方法设置post\get等

@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

包括:实体类、map\list\array\set等

posted @ 2020-08-15 00:08  小海_macro  阅读(318)  评论(0编辑  收藏  举报