J2EE三大框架配置文件管理示例

 三大框架在整合时通常都是用spring管理hibernate和struts,配置文件一般也是采用spring的配置文件,这样一个spring的配置文件的内容多而且杂,观察起来很不清楚。现在将三大框架的配置文件分开,这样看起来就很清晰。

三大框架在web.xml中的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
	<display-name>STRUTS2</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	
	<!-- 系统初始化 -->
	<servlet>
		<servlet-name>InitServlet</servlet-name>
		<servlet-class>com.STRUTSFRAMEWORK2.common.init.InitServlet</servlet-class>
		<init-param>
			<param-name>log4j</param-name>
			<param-value>WEB-INF/log4j.properties</param-value>
		</init-param>
		<init-param>
			<param-name>hibernate</param-name>
			<param-value>WEB-INF/hibernate.cfg.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<!-- 字符拦截器 -->
	<filter>
		<filter-name>CharacterFilter</filter-name>
		<filter-class>com.STRUTSFRAMEWORK2.common.filter.character.CharacterFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- Struts2拦截器 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- Spring配置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:/applicationContext.xml,
			classpath:/com/STRUTSFRAMEWORK2/web/*/applicationContext*.xml
		</param-value>
	</context-param>
</web-app>

其中InitServlet和CharacterFilter的代码如下:

InitServlet:

package com.STRUTSFRAMEWORK2.common.init;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.PropertyConfigurator;

public class InitServlet extends HttpServlet {

	/*** serialVersionUID: ***/
	private static final long serialVersionUID = -6389389969009997855L;

	public static final String FILE_SEPARATOR = System.getProperties()
			.getProperty("file.separator");

	private static String contextPath;

	private static String hibernatePath;

	private static String serverConfig;

	private static String classPath;

	@Override
	public void init(ServletConfig config) throws ServletException {

		super.init(config);

		String prefix = config.getServletContext().getRealPath("/");
		InitServlet.contextPath = prefix;

		if (FILE_SEPARATOR.equals("\\")) {
			// 获取内容服务器配置文件的路径
			serverConfig = prefix + "\\WEB-INF\\config.properties";
		} else if (FILE_SEPARATOR.equals("/")) {
			serverConfig = prefix + "/WEB-INF/config.properties";
		}

		// Log4J
		String log4jFile = config.getInitParameter("log4j");
		String log4jConfigPath = prefix + log4jFile;
		PropertyConfigurator.configure(log4jConfigPath);

		// Hibernate Path
		hibernatePath = prefix + config.getInitParameter("hibernate");

		classPath = Thread.currentThread().getContextClassLoader()
				.getResource("").getPath();
	}

	@Override
	public void destroy() {
		super.destroy();
	}

	public static final String getContextPath() {
		return InitServlet.contextPath;
	}

	public static final String getHibernatePath() {
		return InitServlet.hibernatePath;
	}

	public static final String getServerConfig() {
		return serverConfig;
	}

	public static final String getClassPath() {
		return classPath;
	}

}

CharacterFilter:

package com.STRUTSFRAMEWORK2.common.filter.character;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterFilter implements Filter {

	protected String encoding = null;
	protected FilterConfig filterConfig = null;
	protected boolean ignore = true;

	@Override
	public void destroy() {
		this.encoding = null;
		this.filterConfig = null;
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		if (ignore || (request.getCharacterEncoding() == null)) {
			String encoding = selectEncoding(request);
			if (encoding != null) {
				request.setCharacterEncoding(encoding);
			}
		}
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		this.encoding = filterConfig.getInitParameter("encoding");
		String value = filterConfig.getInitParameter("ignore");
		if (value == null) {
			this.ignore = true;
		} else if (value.equalsIgnoreCase("true")) {
			this.ignore = true;
		} else if (value.equalsIgnoreCase("yes")) {
			this.ignore = true;
		} else {
			this.ignore = false;
		}
	}

	protected String selectEncoding(ServletRequest request) {
		return (this.encoding);
	}
}


在src(源代码文件夹)下加入applicationContext.xml和struts.xml文件,这两个文件的角色是spring和struts的“总管家”

struts.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

	<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
	<constant name="struts.multipart.maxSize" value="104857600"></constant>
         <!-- 示例 -->
	<include file="/com/STRUTSFRAMEWORK2/web/test/struts-test.xml"></include>
</struts>


applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:aop="http://www.springframework.org/schema/aop"
		xsi:schemaLocation="http://www.springframework.org/schema/beans 
				http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/aop
				http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" default-autowire="autodetect">
	<!-- 上面的"default-autowire"和下面的"aop:aspectj-autoproxy"必不可少 -->
  	<aop:aspectj-autoproxy  proxy-target-class="true"/>
  	
  	<!-- 示例 -->
  	<bean id="dao" class="com.STRUTSFRAMEWORK2.common.dao.impl.CommonDaoImpl">
  	</bean>
</beans>

 

在web.xml文件中已经指定了spring的配置文件在classpath下的applicationContext.xml和com.STRUTSFRAMEWORK2.web包下(包括所有的子包),spring会自动搜索。
 

贴上com.STRUTSFRAMEWORK2.web.test下(“test模块”的“管理文件”)struts-test.xml(在总管家注册),applicationContext_test.xml(spring自动搜索)

struts-test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="test" extends="struts-default" namespace="/sshframework/api">
		<action name="testCheck" class="com.STRUTSFRAMEWORK2.web.test.action.TestAction">
			<result name="success">/pages/testpages/success.jsp</result>
			<result name="error">/pages/testpages/error.jsp</result>
			<result name="fail">/pages/testpages/fail.jsp</result>
		</action>
	</package>
</struts>


applicationContext_test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:aop="http://www.springframework.org/schema/aop"
		xsi:schemaLocation="http://www.springframework.org/schema/beans 
				http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/aop
				http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
		<!-- 使用spring管理 -->
</beans>

这样的好处是每个模块的配置文件不会相互干扰,系统结构清晰,O(∩_∩)O哈哈~
 

 

 

 

 

 

你可能感兴趣的:(spring,框架,Hibernate,struts,String,encoding)