servlet中取到Spring配置
转自:http://blog.csdn.net/sd_lichangyou/archive/2006/10/25/1350519.aspx
------------------------------------------------------------------------------------------------------
准备用servlet来初始化流程树,主要要解决的问题是如何在servlet中调用web.xml文件中spring的配置。刚开始一直连ServletContext都得不到。下班前最后几分钟发现一直是在servlet的构造函数中调,应该在init()中调用,这下能得到了spring的配置。读到了applicationContext.xml中配置的bean。
代码如下,注意要在init中初始化配置,init()比servlet的构造方法执行的早
/**//*
*创建日期:Oct 24, 2006 2:52:27 PM
*创建作者:李长有
*作者blog:http://blog.csdn.net/sd_lichangyou
*/
package lcy.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import lcy.common.IXmlKits;
import lcy.common.XmlUtil;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.data.dao.impl.WorkflowLcdyDaoImpl;
import com.web.bo.WorkflowLcdy;
import com.web.vo.WorkflowLcdyBean;
public class LoadFlowTree extends HttpServlet ...{
/** *//**
*
*/
private List allLc;
private static final long serialVersionUID = 1L;
private XmlUtil xmlfactory;
private ServletContext application;
private WebApplicationContext wac;
private WorkflowLcdyDaoImpl lcdydd;
/** *//**
* Constructor of the object.
*/
public LoadFlowTree() throws ServletException...{
}
/** *//**
* Destruction of the servlet. <br>
*/
public void destroy() ...{
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
//System.out.println(allLc.size());
response.setContentType("text/xml; charset=GBK");
lcdydd=(WorkflowLcdyDaoImpl)wac.getBean("workflowLcdyDao");
allLc=lcdydd.getAllWorkflowLcdy();
System.out.println(allLc.size());
java.io.PrintWriter out = response.getWriter();
xmlfactory = new XmlUtil(IXmlKits.FLOW_CFG_XML);
Document doc = xmlfactory.getDoc();
Element root = doc.getRootElement();
Element flow=null, flowurl, step=null, stepurl;
String flowurlData = "flow.faces";
String stepurlData = "step.faces";
Iterator iLcTree = allLc.iterator();
if(!allLc.isEmpty())...{
while (iLcTree.hasNext()) ...{
WorkflowLcdy flowTree = (WorkflowLcdy) iLcTree.next();
try ...{
flow = new Element("item");
Attribute flowText = new Attribute("text", flowTree.getMc());
Attribute flowOpen = new Attribute("open", "1");
Attribute flowId = new Attribute("id", flowTree.getId());
flow.setAttribute(flowText);
flow.setAttribute(flowId);
flow.setAttribute(flowOpen);
// 流程的url属性
flowurl = new Element("userdata");
Attribute nameFlowurl = new Attribute("name", "file");
flowurl.setAttribute(nameFlowurl);
flowurl.setText(flowurlData);
flow.addContent(flowurl);
// 根据流程的步骤个数添加step
int steps = Integer.parseInt(flowTree.getBzgs());
for (int j = 0; j < steps; j++) ...{
//myGUID=new RandomGUID();
String stepMc = String.valueOf(j + 1);
step = new Element("item");
Attribute stepText = new Attribute("text", stepMc + " ");
Attribute stepOpen = new Attribute("open", "1");
Attribute stepId = new Attribute("id", flowTree.getId()+stepMc);
step.setAttribute(stepText);
step.setAttribute(stepOpen);
step.setAttribute(stepId);
// 环节的url属性
stepurl = new Element("userdata");
Attribute nameStepurl = new Attribute("name", "file");
stepurl.setAttribute(nameStepurl);
stepurl.setText(stepurlData);
step.addContent(stepurl);
flow.addContent(step);
}
} catch (Exception e) ...{
System.err.println(e + "error");
} finally ...{
}
root.addContent(flow);
}
}
System.out.println(doc.getContentSize());
Format format = Format.getCompactFormat();
format.setEncoding("GBK");
format.setIndent(" ");
XMLOutputter outp = new XMLOutputter();
outp.output(doc, out);
System.out.println("success");
}
public void testSess(HttpServletRequest req,HttpServletResponse res)...{
HttpSession session = req.getSession(true);
WorkflowLcdyBean myMap = (WorkflowLcdyBean) session.getAttribute("LCDY_BEAN");
System.out.println(myMap.getClass().getName());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void init() throws ServletException ...{
application = getServletContext();
wac = WebApplicationContextUtils.getWebApplicationContext(application);
}
}
web.xml配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--config spring -->
<description>Empty web.xml file for Web Application</description>
<servlet>
<description>lcy config flowTree</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>Dispatchermy</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- config pring log4j
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>mvc.WebRoot</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener> -->
<!-- config dwr -->
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>Faces Servlet_tmp</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<!-- config dwr and jsf -->
<filter>
<filter-name>DwrFacesFilter</filter-name>
<filter-class>uk.ltd.getahead.dwr.servlet.FacesExtensionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DwrFacesFilter</filter-name>
<url-pattern>/dwr/*</url-pattern>
</filter-mapping>
<!--config jsf and jdf -->
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<filter>
<filter-name>adfFaces</filter-name>
<filter-class>oracle.adf.view.faces.webapp.AdfFacesFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>adfFaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet>
<servlet-name>resources</servlet-name>
<servlet-class>oracle.adf.view.faces.webapp.ResourceServlet</servlet-class>
</servlet>
<!-- lcy load flowTree from db servlet -->
<servlet>
<description>lcy config flowTree</description>
<display-name>lcy Servlet</display-name>
<servlet-name>LoadFlowTree</servlet-name>
<servlet-class>lcy.servlet.LoadFlowTree</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>resources</servlet-name>
<url-pattern>/adf/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoadFlowTree</servlet-name>
<url-pattern>/servlet/LoadFlowTree</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Dispatchermy</servlet-name>
<url-pattern>/servlet/Dispatchermy</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>
org.apache.myfaces.component.html.util.ExtensionsFilter
</filter-class>
<init-param>
<param-name>maxFileSize</param-name>
<param-value>20m</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.web.vo.AppContextListener</listener-class>
</listener>
</web-app>