SpringMVC_快速入门Spring集成web环境集成思路- 解决spring在web项目中,Servlet频繁创建容器,加载配置文件的问题
通过监听器,在服务创建时加载Spring容器,并将spring容器对象放入ServletContextListener域中
在web.xml中配置全局初始化参数(context-param),再通过ServletContext获取出来
- ApplicationContext接收的对象名称耦合
创建WebApplicationContextUtils,通过传入servletContext对象获取ApplicationContext对象 Spring提供ContextLoaderListener该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils供使用者获得应用上下文对象。 步骤SpringMVC使用流程- 导入SpringMVC相关坐标(充当前端控制器)
- 配置SpringMVC核心控制器DispatcherServlet
- 创建Controller类和视图层页面
- 编写Controller(POJO)
- 将Controller使用注解配置到Spring容器中(@Controller)
- 配置spring-mvc.xml文件(配置组件扫描)
- 客户端发起请求测试
执行流程(*)- 客户端请求前端控制器(DispatcherServlet)
- 前端控制器(DispatcherServlet)在处理器映射器(HandlerMapping)中请求查询Handler,
- 处理器映射器(HandlerMapping)返回处理器执行链(HandlerExecutionChain)到前端控制器(DispatcherServlet)
- 前端控制器(DispatcherServlet)在处理器适配器(HandlerAdaptor)请求执行Handler
- 处理器适配器(HandlerAdaptor)请求处理器(Handler/contrlloer)
- 处理器(Handler/contrlloer)将ModelAndView响应至处理器适配器(HandlerAdaptor)
- 处理器适配器(HandlerAdaptor)返回ModelAndView至前端控制器(DispatcherServlet)
- 前端控制器(DispatcherServlet)请求视图解析器(ViewResolver)
- 视图解析器(ViewResovler)返回视图View对象
- 前端控制器(DispatcherServlet)对视图页面jsp进行渲染(将模型数据填充到视图中)
- 前端控制器(DispatcherServlet)将页面响应回客户端
关键Bean - Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;
- HandlerMapping:请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;
- HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;
- ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;
- LocalResover:本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;
- ThemeResovler:主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;
- MultipartResolver:文件上传解析,用于支持文件上传;
- HandlerExceptionResolver:处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);
- RequestToViewNameTranslator:当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;
- FlashMapManager:用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景。
注解解析@RequestMapping:放到方法或者类上,建立请求URL和处理请求方法之间的对应关系 位置#####属性 value:请求的url路径,等同于path
method:请求方式
- 枚举方式(method = RequestMethod.POST)
params:请求参数条件
- params = {"username"} :请求参数中必须有username存在,
- 否则报异常: Parameter conditions "name" not met for actual request parameters:
- params = “{id!5}” :请求参数中的id不等于5
组件扫描优化<context:component-scan base-package="work.hsy"><!-- 包含此注解类 --><context:include-filter type="annotation"expression="org.springframework.stereotype.Controller"/> <!-- 不包含此注解类 --><context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller"/> </context:component-scan>XML配置解析视图解析器配置跳转方式return "user.jsp" :默认转发(forward) return "forward:user.jsp"
可选择重定向Redirect:return "redirect:user.jsp" 配置内部资源视图解析器<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 拼接前缀 --> <property name="prefix" value="/admin/"/> <!-- 拼接后缀 --> <property name="suffix" value=".jsp"/></bean>
|