一,控制反转(IoC),将对象层的职责转移到框架层
1, 创建维护对象的职责 ->(DI)依赖注入
2, 事务管理和安全管理 ->(AOP)面向方面
二,Spring MVC 分层
1,Web层(Controller):获得http参数,调用服务层,获得返回数据,指明返回界面。
2,服务层:调用领域模型层。每一个方法通常是一个use case。每一个方法通常是一个事务。
3,领域模型层:基于系统业务逻辑,纯Java设计。
4,数据持久层:调用DB,转换result为Java对象。
5,用户界面层(View):将数据和View结合生成最终返回数据。
三,hello world
1,配置web.xml
1>配置Spring容器
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
默认根据/WEB-INF/applicationContext.xml初始化Spring容器,也可指定:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring.xml </param-value> </context-param>
2>配置SpringMVC中央处理器 DispatcherServlet
<servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.*</url-pattern> </servlet-mapping>
Spring将根据/WEB-INF/<servlet-name>-servlet.xml加载Controller
2,配置spring-servlet.xml
1>配置URI和Controller的映射关系
<bean name="/hello" class="com.hellobbboy.springmvctest.controllers.HelloController"></bean>
2>配置ViewReslover
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
3,编写Controller
public class HelloController extends AbstractController{ @Override protected ModelAndView handleRequestInternal(HttpServletRequest req,HttpServletResponse res) throws Exception{ ModelAndView mav = new ModelAndView("hello"); mav.addObject("name","SpringMVC"); return mav; } }
4,编写JSP hello.jsp
hello ${name}
四,抽象接口
设计原则:不侵入,习惯优于配置
1,流程接口
1>HandlerMapping:URI到处理器的映射接口
a>BeanNameUrlHandlerMapping,SpringMVC默认,mapping关系配置在<servlet-name>-servlet.xml。
<bean name="/user" class="com.hellobbboy.springmvctest.controllers.HelloController"></bean>
缺陷为Controller只有单例模式。
b>SimpleUrlHandlerMapping,该Bean和mapping关系配置在applicationContext.xml。
单例模式:urlMap
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> <map> <entry key="/home" value-ref="homeController" /> <entry key="/user" value-ref="userController" /> </map> </property> </bean>
原型模式:mappings
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/home">homeController</prop> </props> </property> </bean>
c>继承AbstractHandlerMapping,重写Object getHandlerInternal(HttpServletRequest request) 方法。
2>HandlerAdapter:处理器接口,适配器模式。可将处理器扩展为非Controller,如一些其它框架的处理器。
a>SimpleControllerHandlerAdapter,SpringMVC默认实现,支持Controller作为处理器。
b>实现HandlerAdapter接口,实现ModelAndView handler(HttpServletRequest req, HttpServletResponse res, Object handler)方法。
3>ViewResolver: 视图名称到视图实例的映射
a>InternalResourceViewResolver
4>HandlerExceptionResolver:异常处理接口
a>SimpleMappingExceptionResolver
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 默认处理页面 --> <property name="defaultErrorView" value="error"/> <!-- 异常对象变量名,默认为exception --> <property name="exceptionAttribute" value="ex"/> <property name="exceptionMappings"> <props> <prop key="IOException">ioerror</prop> <prop key="java.sql.SQLException">sqlerror</prop> </props> </property> </bean>
2,功能接口
1>LocaleResolver:解析请求中的Locale
a>AcceptHeaderLocaleResolver,默认配置
2>MultipartResolver:文件上传
3>ThemeResolver:解析请求中的主题
a>FixedThemeResolver,默认配置