准备用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);
}
}
*创建日期: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 >
< 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 >