一,控制反转(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,默认配置