由于struts2、hibernate通过默认配置文件不支持通配符配置,所以下面介绍一下servlet基于spring通配符读取器读取xml的扩展功能。
<!-- 自定义配置文件包路径,可配置多个不同的参数和路径 -->
<context-param>
<param-name>projectPackageName</param-name>
<param-value>com/test/web/*/</param-value>
</context-param>
public class ApplicationListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent servletContext) {
String projectPackageName = servletContext.getInitParameter("projectPackageName");
String classpath = "classpath*:" + projectPackageName + "**" + configName;
Resource[] resources = this.resolver.getResources(classpath);
List configs = new ArrayList();
for (Resource resource : resources){
String file = resource.getURL().getPath();
configs.add(config);
}
//configs可放在全局静态变量中
}
}
1.struts2解析xml扩展点
<!-- configProviders:该参数表示自定义的ConfigurationProvider类,用户可以提供一个或多个实现了ConfigurationProvider接口的类,并将这些类名设置成configProviders属性值。若果有多个ConfigurationProvider类,中间用逗号(,)分隔。-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>configProviders</param-name>
<param-value>
com.test.web.ActionConfigProvider
</param-value>
</init-param>
</filter>
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.util.ResourceUtils;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
public class ActionConfigProvider extends XmlConfigurationProvider {
private static Logger logger = Logger.getLogger(ActionConfigProvider.class);
public ActionConfigProvider() {
super();
Map<String, String> mappings = new HashMap<String, String>();
mappings.put("-//OpenSymphony Group//XWork 2.1.3//EN", "xwork-2.3.dtd");
mappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.3//EN", "struts-2.3.dtd");
setDtdMappings(mappings);
}
@Override
protected Iterator<URL> getConfigurationUrls(String fileName) throws IOException {
List<URL> urls = new ArrayList<URL>();
//假设moduleConfigs是静态变量configs中取出已经被扫描到的struts相关的配置文件List
for (String s : moduleConfigs) {
urls.add(ResourceUtils.getURL("classpath:" + s));
}
return urls.iterator();
}
}
2.hibernate解析xml扩展点
<!-- 自定义的xml处理器 -->
<bean id="mappingAutowiring" class="com.test.web.framework.context.MappingAutowiring">
<property name="mappingResources" ref="mappingResources" />
</bean>
<bean id="mappingResources" class="com.test.web.framework.context.MappingFactoryBean" />
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
public class MappingAutowiring implements BeanPostProcessor {
private static Logger log = Logger.getLogger(MappingAutowiring.class);
private String[] mappingResources;
public void setMappingResources(String[] mappingResources) {
this.mappingResources = mappingResources;
}
//IOC实例化每个对象时都会经过此方法
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof LocalSessionFactoryBean) {
((LocalSessionFactoryBean) bean).setMappingResources(this.mappingResources);
}
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.FactoryBean;
@SuppressWarnings("rawtypes")
public class MappingFactoryBean implements FactoryBean {
private static Logger log = Logger.getLogger(MappingFactoryBean.class);
@SuppressWarnings("unchecked")
public Object getObject() throws Exception {
//假设moduleConfigs是静态变量configs中取出已经被扫描到的hibernate相关的配置文件List
//将List moduleConfigs转为数组返回
return array;
}
public Class<?> getObjectType() {
return String[].class;
}
public boolean isSingleton() {
return true;
}
}
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--<property name="configLocation" value="classpath:hibernate.cfg.xml"/> 这个属性值可不写,被上述类处理过程结果取代-->
</bean>
3.spring解析xml扩展点
<!--返回在web.xml 中参数contextClass自定义类对应的对象这个类,这个类实现了XmlWebApplicationContext。-->
<!--XmlWebApplicationContext继承了AbstractRefreshableWebApplicationContext类中定义的方法protected String[] getConfigLocations(),这个方法默认可以加载contextConfigLocation中定义的xml 文件,如果你重写了这个方法还可以在任意地方加载你想要的xml文件。-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/applicationContext.xml</param-value><!-- 可直接写通配符 -->
</context-param>
<context-param>
<param-name>contextClass</param-name>
<param-value>
com.test.web.framework.context.BeansContext
</param-value>
</context-param>
import java.net.URL;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.web.context.support.XmlWebApplicationContext;
public class BeansContext extends XmlWebApplicationContext {
private static Logger log = Logger.getLogger(BeansContext.class);
private static final String CLASS_PATH_PREFIX = "classpath:";
public String[] getConfigLocations() {
//假设moduleConfigs是静态变量configs中取出已经被扫描到的spring相关的配置文件List
String[] defaultConfigs = super.getConfigLocations();//XmlWebApplicationContext读取默认的contextConfigLocation配置文件
//将moduleConfigs和defaultConfigs数组合并返回。
return locations;
}
protected String[] getDefaultConfigLocations() {
return new String[0];
}
}
分享到:
相关推荐
Struts2.1、Spring3.0 和 Hibernate3.3 的整合是企业级Java应用开发中常见的技术组合,常被称为S2SH框架。这个整合旨在实现MVC(Model-View-Controller)架构,以提高应用的可维护性和可扩展性。下面我们将详细探讨...
S2SH整合指的是Struts2、Spring和Hibernate这三个开源框架的集成应用,它们分别是MVC(Model-View-Controller)架构中的控制层、业务层和数据持久层的优秀解决方案。在Java Web开发中,S2SH整合能提供一个强大、灵活...
6. **配置文件**: S2SH整合还需要对各框架的配置文件进行设置,例如`struts.xml`、`spring-servlet.xml`、`hibernate.cfg.xml`等。这些配置文件定义了Action、服务和数据源的映射,以及事务管理等关键设置。 7. **...
**S2SH整合详解** S2SH,全称为Struts2、Spring和Hibernate的整合,是Java Web开发中一种常见的框架组合,用于构建高效、可维护的Web应用程序。这三个框架分别负责不同的职责:Struts2作为MVC(模型-视图-控制器)...
**S2SH框架详解** **一、什么是S2SH框架** S2SH是Struts2、Spring和Hibernate三个开源框架的缩写组合。这个框架集合是Java Web开发中常用的一种技术栈,它提供了完整的MVC(Model-View-Controller)架构支持,用于...
这个"S2SH实现增删改查的例子"是学习如何整合这三个框架并实现基本数据操作的教程。 首先,让我们详细了解每个组件的作用: 1. **Struts2**:这是一个基于MVC设计模式的Web应用框架,它负责处理HTTP请求,将这些...
s2sh框架的整合工作通常涉及多个步骤,包括设置各个框架的配置文件,例如Spring的bean定义XML,Struts的struts.xml,以及Hibernate的hibernate.cfg.xml。类包可能已经预配置了这些,从而减少了手动配置的工作量。 ...
"S2SH权限操作"是指在这样的技术栈中实现用户权限管理的功能,确保系统资源的安全访问。 Struts2是MVC(Model-View-Controller)架构的一部分,负责处理HTTP请求,管理视图和业务逻辑的交互。它提供了拦截器...
在S2SH整合中,Hibernate 3.5.6版本作为ORM(对象关系映射)工具,允许开发者通过对象模型来操作数据库,而无需编写SQL。它支持懒加载、缓存策略和复杂查询,使得数据库操作更加便捷。 **整合过程** S2SH的整合...
【S2SH框架详解(适合初学者)】 S2SH框架是Java Web开发中的一个经典组合,由Struts 2、Spring和Hibernate三大框架组成,提供了模型-视图-控制器(MVC)架构的支持,实现了业务逻辑、数据访问和用户界面的解耦。本...
【标题】:“s2sh框架实现新闻发布系统” 在IT领域,构建一个新闻发布系统是常见的需求,而使用s2sh框架(Struts2 + Spring + Hibernate)则是实现这一目标的常见技术选择。S2SH框架结合了Struts2的MVC(Model-View...
在S2SH框架中,Hibernate作为数据持久层,负责将Java对象与数据库表进行映射,提供CRUD(创建、读取、更新、删除)操作,使得数据库操作更加便捷、高效。 **S2SH集成过程** 集成S2SH框架通常包括以下几个步骤: 1. ...
总结来说,“s2sh所需jar包”是一个包含了Struts2、Spring和Hibernate框架以及相关支持库的集合,它们共同构成了一个能够处理Web请求、管理对象依赖、执行数据库操作的完整Java Web应用开发环境。在实际开发中,正确...
### S2SH XML配置文件详解 #### 一、概述 S2SH,即Struts2 + Spring + Hibernate,是Java Web开发中一个经典的三层架构框架组合。本文将深入解析一个典型的S2SH项目的XML配置文件内容,帮助初学者更好地理解和掌握...
**S2SH整合详解** S2SH,全称为Spring、Struts、Hibernate的组合,是经典的Java Web开发框架。这个框架结合了Spring的依赖注入、事务管理,Struts的MVC设计模式,以及Hibernate的对象关系映射(ORM)工具,为开发者...
这个名为"s2sh框架源码"的压缩包文件很可能包含了一个完整的项目实例,用于帮助学习者深入理解如何将这三个框架协同工作以构建高效、模块化的Web应用程序。 **Spring框架**:Spring是一个全方位的轻量级应用框架,...
这三者结合,被称为S2SH整合,能够构建出高效、灵活且可维护的Java Web应用程序。 **Struts2框架**: Struts2是Struts1的升级版,它引入了拦截器(Interceptor)的概念,增强了动作(Action)与结果(Result)的...
它通过映射XML配置文件,将数据库操作转化为对Java对象的操作,减少了手动编写SQL语句的工作量,增强了数据库操作的灵活性和可维护性。 在“S2SH在线考试系统”中,`onlineexam.sql`文件很可能是数据库脚本,包含了...
【S2SH商城系统】是一种基于Java技术的电子商务平台,其名称中的"S2SH"是Struts2、Spring和Hibernate三个框架的缩写。这个系统是开发者为了方便学习和实践而设计的,提供了完整的源代码和数据库脚本,对于想要深入...
**S2SH框架详解** S2SH框架是Java Web开发中的一个经典组合,由Struts、Spring和Hibernate三个开源框架组成。这个框架组合为开发者提供了一个全面的解决方案,用于构建可扩展、模块化且易于维护的Web应用程序。下面...