spring框架搭建
1.spring的jar包相关功能说明
spring.jar--整个spring模块,包含所有jar的功能.
spring-core.jar--spring的核心模块,包含Ioc容器.
spring-aop.jar--spring的AOP模块.
spring-context.jar--spring的上下文,包含ApplicationContext容器.
spring-dao.jar--spring的DAO模块,包含DAO模块对JDBC的支持.
spring-orm.jar--spring的ORM模块,支持hibernate,JDO等ORM工具.
spring-web.jar--spring的web模块,包含web application context.
spring-webmvc.jar--spring的MVC框架模块.
2.spring MVC中的组件
<1>spring MVC的核心控制器就是DispatcherServlet,它负责接收Http请求,并组织协调spring MVC的各组件协调完成处理请求的工作.
核心控制器还有一项重要的工作就是加载配置文件初始化上下文应用对象ApplicationContext.它主要负责拦截用户请求,将请求封装
成对象,然后通过ApplicationContext与spring MVC各个组件,将它装配到DispatcherServlet的实例中.
web.xml中配置核心控制器
#####################配置开始###############################
<servlet>
<!-- 定义Servlet名称 -->
<servlet-name>dispatcherServlet</servlet-name>
<!-- Servlet具体实现类 -->
<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>
<!-- 采用通配符映射所有以html类型的请求 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
######################配置结束#####################################
在上面的配置文件中声明的是一个dispatcherServlet的servlet对象,并采用通配符的方式将所有html类型的请求都映射到了
dispatcherServlet对象上.另外这个servlet初始化了一个contextConfigLocation属性,该属性加载WEB-INF文件夹下的
applicationContext.xml配置文件,想要初始化多个配置文件,则可以使用逗号将其分开,这样就将配置信息加载到上下文环境中.
=================================================================================
分解应用上下文
将所有的Bean都放置到一个配置文件中,会使得这个配置文件非常的笨重,将各个配置文件分散到应用系统的各个层中,有益于简化维护
工作,为了保证这些配置文件都被载入,你需要在web.xml配置一个上下文载入器,上下文载入器将载入除DispatcherServlet载入的配置
文件外其他上下文配置文件eg:ContextLoaderListener和ContextLoaderServlet
如果你将程序发布到一个支持servlet2.3标准的容器中,并且为servlet设置servlet监听器,你可以如下配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
如果你的应用系统发布到一个老一点的web容器,容器只支持servlet2.2或者支持servlet2.3,但是它不能再servler之前初始化监听器
那么你将这样配置
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
不管使用哪种上下文配置,你都需要告诉spring配置文件的位置,如果没有指定,上下文将在applicationContext.xml处寻找spring
配置文件,为了将配置文件发布到应用系统的各个层中,你可以拥有两种解决办法
方法一:在servlet上下文中设置contextConfigLocation参数来为上下文载入器指定一个或多个配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/ooxx.xml,/WEB-INF/xxoo.xml</param-value>
</context-param>
方法二:就是在默认地址下写一个配置文件,在里面加载所有的配置文件
eg:###########################################################开始
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<import resource="classpath:spring-hibernate.xml"/>
<import resource="classpath:net/lans/ctm/conf/ctm-component.xml"/>
<import resource="classpath:net/lans/ctm/project/conf/ctm-project.xml"/>
<import resource="classpath:net/lans/ctm/sysManager/conf/ctm-sysManager.xml"/>
<import resource="classpath:net/lans/ctm/recruitlab/config/ctm-recruitlab.xml"/>
<import resource="classpath:net/lans/ctm/sectionroom/conf/ctm-sectionroom.xml"/>
<import resource="classpath:net/lans/ctm/document/conf/ctm-document.xml"/>
<import resource="classpath:net/lans/ctm/labmanager/conf/ctm-labmanager.xml"/>
<import resource="classpath:net/lans/ctm/drugControl/conf/ctm-drug.xml"/>
<import resource="classpath:net/lans/ctm/qmanager/conf/ctm-qmanager.xml"/>
<import resource="classpath:net/lans/ctm/financial/conf/ctm-financial.xml"/>
</beans>
###########################################################结束
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<2>spring MVC控制器映射又称为处理器映射,它是一种映射策略,spring MVC中内置了多种控制器映射策略eg,SimpleUrlHandlerMapping
为Url映射控制器,BeanNameUrlHandlerMapping为文件名映射控制器,ControllerClassNameHandlerMapping为短类名控制器.
另外,在spring MVC中还允许用户定义的处理器映射.
(1)配置BeanNameUrlHandlerMapping(spring配置文件中没有定义控制器映射,DipatcherServlet会默认创建该控制器映射)
BeanNameUrlHandlerMapping主要将URL请求映射到处理器,它将在spring中查找与URL请求名称相同的处理器.可以使用如下
代码在spring配置文件中定义一个控制器映射:
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
接下来浏览器中请求http://127.0.0.1:8080/mrsoft/uerLogin.html这个URL地址,接着BeanNameUrlHandlerMapping将
自动查找名称为userLogin.html的处理器bean.
缺点:BeanNameUrlHandlerMapping的使用非常简单,他将处理器的名称直接绑定到URL请求中,功能单一,不够灵活,更加
不利于代码的维护,所以在大多数情况下不适用该控制器映射.
(2)配置SimpleUrlHandlerMapping
SimpleUrlHandlerMapping使用mappings属性来定义URL到处理器的映射关系,其中mappings属性的类型为preperties.
这样处理器就可以标准的使用bean名称,而不需要与URL中的请求名称相同了.在配置文件中定义一个SimpleUrlHandlerMapping
关键代码如下:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<prop key="/index.html">forwardController</prop>
<prop key="/stu/*.html">forwardController</prop>
<prop key="*.html">forwardController</prop>
</property>
</bean>
(3)使用多映射器(可以配置映射器的优先级order的属性值越小那么优先级就越高)
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="order"><value>1</value></property>
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="order"><value>0</value></property>
</bean>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<3>spring MVC中的业务控制器分为很多种.核心控制器会根据不同的业务请求调用不同的业务控制器,所有的业务控制器都必须实现
Controller接口.用户还可以扩展自己的业务控制器 .
核心控制器只负责拦截用户的请求,但是无法完成业务操作,因此需要用到业务控制器.业务控制器由用户来定义,用户定义的业务
控制器只要实现org.springframework.mvc.Controller接口即可.他的源代码如下
public interface Controller{
ModelAndView handlerRequest(HttpServletRequest request,HttpServletResponse response) throws Exception;
}
一些常用业务控制器:
AbstractController(简单控制器),ParameterizableViewController(参数映射控制器),SimpleFormController(表单控制器)
UrlFilenameViewController(文件名映射控制器),MultiActionController(多动作控制器).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<4>spring MVC与其他大部分MVC框架一样,都没有提供专门的模型组件.spring的模型对象由普通的Map对象来充当,大部分业务控制器会
返回一个ModelAndView对象,用来负责传递模型层处理后的结果集合与制定的视图层名称.
在ListCoursesController中ModelAndView对象时这么创建的:
new ModelAndView("courseList","courses",courses);
ModelAndView构造函数的第一个参数是用于显示这个控制器的输出表单的视图组件的逻辑名,在这里视图逻辑名叫做courseList.
视图解析器将根据这个名字查找真正的视图对象.接下来的两个参数用于表示传递给视图的数据对象.这两个参数组成一个名称/数值
对.第二个参数是第三个参数数据对象的名字.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<5>视图的作用就是现实结果,spring支持多种格式的视图,如jsp,JSTL,Excel,PDF等.大部分控制器会返回一个ModelAndView对象,该对象
里仅有一个视图的逻辑名称,这个名称并没有与制定的视图关联.他们的关联操作就是通过视图解析器来完成.通过视图解析器可以在不同
的视图技术之间自由的切换.
spring中有4中ViewResolver实现:
InternalResourceViewResolver--将逻辑视图名解析成一个用模板文件渲染的视图对象(如JSP).
BeanNameViewResolver--将逻辑视图名解析成一个DispatcherServlet应用上下文中的一个视图Bean.
ResourceBundleViewResolver--将逻辑视图名解析成ResourceBundle中的视图对象.
XmlViewResolver--从一个XML中解析一个视图Bean,这个文件是从DispatcherServlet应用上下文中分离出来的.