一、
javaee在web.xml文件中的加载顺序是:
1、<context-param>
2、<listener>
3、<filter>
4、<servlet>
由于在spring3以后去掉了ContextloaderServlet,我们在启动Spring时只能采用ContextLoaderListener(如下:)
<!--配置spring资源文件位置,然后 加载spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
在使用之前我写的博文中采用的是使用proxool提供的<servlet>来进行加载,(在加载spring方面避开了使用listener,这种方式有他的缺点)
但是结合这里listener就报错:proxool无法加载的问题。
我们知道proxool要先于spring来进行加载,但是如果使用listener来实现spring的加载,那么如何来调整这种顺序呢?
解决办法就是我们也使用listener来加载proxool,这个listener就需要我们自己来实现了。
public class ProxoolInitListener implements ServletContextListener {
private static final String XML_FILE_PROPERTY = "xmlFile";
private static final String PROPERTY_FILE_PROPERTY = "propertyFile";
public void contextDestroyed(ServletContextEvent sce) {
System.out.println(" proxool database pool destroyed......");
}
public void contextInitialized(ServletContextEvent sce) {
try {
System.out.println(" proxool database pool initialized.....");
ServletContext context = sce.getServletContext();
String appDir = sce.getServletContext().getRealPath("/");
Properties pro = new Properties();
Enumeration<?> names = context.getInitParameterNames();
while (names.hasMoreElements()) {
String name = String.valueOf(names.nextElement());
String value = context.getInitParameter(name);
if (name.equals(XML_FILE_PROPERTY)) {
File file = new File(value);
if (file.isAbsolute()) {
JAXPConfigurator.configure(value, false);
} else {
JAXPConfigurator.configure(appDir + File.separator
+ value, false);
}
} else if (name.equals(PROPERTY_FILE_PROPERTY)) {
File file = new File(value);
if (file.isAbsolute()) {
PropertyConfigurator.configure(value);
} else {
PropertyConfigurator.configure(appDir + File.separator
+ value);
}
}else if (name.startsWith("jdbc")) {
pro.setProperty(name, value);
}
}
if (pro.size() > 0) {
PropertyConfigurator.configure(pro);
}
} catch (ProxoolException e) {
e.printStackTrace();
}
}
}
这样我们只需要在web.xml配置中进行如下配置,并配置顺序先于spring listener进行配置可以解决该问题。
<!-- 配置proxool资源文件文职,然后加载proxool listener -->
<context-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool-conf.xml</param-value>
</context-param>
<listener>
<listener-class>org.smart.framework.listener.ProxoolInitListener</listener-class>
</listener>
<!--配置spring资源文件位置,然后 加载spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>