⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 actionservlet.java.svn-base

📁 EasyJWeb是基于java技术
💻 SVN-BASE
字号:
package com.easyjf.web;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.easyjf.util.StringUtils;
import com.easyjf.web.core.DefaultRequestProcessor;
import com.easyjf.web.core.FrameworkEngine;

/**
 * 
 * <p>
 * Title:EasyJWeb核心Servlet
 * </p>
 * <p>
 * Description: EasyJWeb核心Servlet,所有的.ejf访问都将由该Servlet处理
 * 用户必须在web.xml文件指定扩展名为.ejf的访问都指向该类或其子类。
 * 为了有效使用EasyJWeb,一个应用EasyJWeb的应用中,web.xml的配置一般包括以下信息。
 * <code>
 * <!--定义easyjweb的配置文件位置 -->
 <context-param>
 <param-name>easyjwebConfigLocation</param-name>
 <param-value>/WEB-INF/mvc.xml</param-value>
 </context-param>
 <!--定义EasyJWeb的主控Servlet  -->
 <servlet>
 <servlet-name>easyjf</servlet-name>
 <servlet-class>com.easyjf.web.ActionServlet</servlet-class>
 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>easyjf</servlet-name>
 <url-pattern>*.ejf</url-pattern><!--所有.ejf的扩展名都由easyjweb来处理-->
 </servlet-mapping>
 <servlet-mapping>
 <servlet-name>easyjf</servlet-name>
 <url-pattern>/ejf/*</url-pattern><!--所有/ejf/*样式的url都交由EasyJWeb来处理-->
 </servlet-mapping>
 <!-- 定义字符处理Filter -->
 <filter>
 <filter-name>CharsetFilter</filter-name>
 <filter-class>com.easyjf.web.CharsetFilter</filter-class>
 <init-param>
 <param-name>encoding</param-name>
 <param-value>UTF-8</param-value>
 </init-param>
 <init-param>
 <param-name>ignore</param-name>
 <param-value>true</param-value>
 </init-param>
 </filter>
 <filter-mapping>
 <filter-name>CharsetFilter</filter-name>
 <servlet-name>easyjf</servlet-name>
 </filter-mapping>
 * </code>
 * </p>
 * <p>
 * Copyright: Copyright (c) 2006
 * </p>
 * 
 * <p>
 * Company: www.easyjf.com
 * </p>
 * 
 * @author 大峡、stef_wu
 * @version 1.0
 */
public class ActionServlet extends HttpServlet implements
		javax.servlet.ServletContextListener {

	static final long serialVersionUID = 887867880L;

	private static final Log logger = LogFactory.getLog(ActionServlet.class);

	// web.xml中配置文件参数名
	public static final String EASYJWEB_CONFIGURE_KEY = "easyjwebConfigLocation";
	
	public static final String EASYJWEB_PROCESSOR_IN_CONTANIER = "EasyJWeb-Processor";

	/**
	 * EasyJWeb加载器,用来加载EasyJWeb的各种配置文件,缺省配置信息等
	 */
	private FrameworkLoader loader;

	/**
	 * EasyJWeb的核心处理器,由主控Servlet即ActionServlet来调用并进行请求处理工作
	 */
	private RequestProcessor processor;

	/**
	 * 初始化各种配置,包括解析easyjf-web.xml
	 * 
	 * @param servletContext
	 */
	private void initEasyJWeb(ServletContext servletContext) {	
		loader = new FrameworkLoader(this.getConfigures(servletContext));
		loader.setServletContext(servletContext);// 如果是Web应用,需要设置
		// 此上下文。
		loader.initEasyJWeb();
		this.getServletContext().setAttribute(Globals.CONTAINER_CONTEXT,
				loader.getContainer());
		FrameworkEngine.setActionServlet(this);//把Servlet设置到FrameworkEngine中,以便通过FrameworkEngine来控制Servlet
	}

	public void init(ServletConfig config) throws ServletException {
		// 初始化web.xml参数值
		super.init(config);
		initEasyJWeb(config.getServletContext());		
		//初始化Servlet配置
		logger.debug("初始化Servlet配置");
//		logger.debug(ResourcesBundle.getString("com.easyjf.web.actionservlet.init.initialconfig"));
		
	}

	/**
	 * 得到easyJWeb的配置文件
	 * 若未在web.xml中设定easyjwebConfigLocation则使用默认的/WEB-INF/easyjf-web.xml
	 * <context-param> <param-name>easyjwebConfigLocation</param-name>
	 * <param-value> /WEB-INF/easyjf-web1.xml</param-value>
	 * </context-param>
	 */
	private String[] getConfigures(ServletContext servletContext) {
		String paravalue = servletContext
				.getInitParameter(EASYJWEB_CONFIGURE_KEY);
		String[] s = StringUtils.hasLength(paravalue) ? StringUtils
				.tokenizeToStringArray(paravalue, ",") : null;
		return s;
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doRequest(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doRequest(request, response);
	}

	/**
	 * 停止后台应用
	 */
	public void destroy() {
		loader.destroyApps();
		super.destroy();
	}

	/**
	 * 处理用户请求
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void doRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 初始化Request
		try {
			// 初始化上下文根,并设置框架运行模式
			doInitRequest(request, response);
			if (processor == null) {
				/**
				 * 首先尝试从容器中加载框架处理器, 若无法从容器中加载处理器,则使用默认的处理器
				 */
				Object obj = loader.getContainer().getBean(
						EASYJWEB_PROCESSOR_IN_CONTANIER);
				if (obj != null && obj instanceof RequestProcessor) {
					//成功从容器中加载处理器
					logger.info("成功从容器中加载处理器");
//					logger.info(ResourcesBundle.getString("com.easyjf.web.actionservlet.request.loadprocessorsuccessfull"));
					processor = (RequestProcessor) obj;
					processor.setServlet(this);
					processor.setWebConfig(loader.getWebConfig());
				} else {
					processor = new DefaultRequestProcessor(this, loader
							.getWebConfig());
				}
			}
			processor.process(request, response);
		} catch (Throwable error) {
			throw new ServletException(error);
		}
	}

	protected void doInitRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map map = new HashMap();
		map.put(ActionContext.HTTP_REQUEST, request);
		map.put(ActionContext.HTTP_RESPONSE, response);
		ActionContext.setContext(new ActionContext(map));
		LocalManager.setLocale(request.getLocale());
		if (loader.getWebConfig().isDebug()) {// 调试模式每次都要初始化配置文件
			initEasyJWeb(this.getServletContext());
		}		
	}

	public void contextDestroyed(ServletContextEvent sce) {

	}

	public void contextInitialized(ServletContextEvent sce) {
		try {
			initEasyJWeb(sce.getServletContext());
		} catch (Exception e) {
			e.printStackTrace();
			//系统初使化错误
			throw new java.lang.RuntimeException("系统初使化错误");
//			throw new java.lang.RuntimeException(ResourcesBundle.getString("com.easyjf.web.actionservlet.contextinitialized.systeminitialerror"));
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -