(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根据返回的视图信息
,将对应的数据模型,渲染到视图上,将视图的渲染结果交还给客户端。
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等