Spring MVC基础

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

猜你喜欢

转载自hellobbboy.iteye.com/blog/2343399
今日推荐