servlet中取到Spring配置

本文介绍如何在Servlet中加载Spring配置,并利用这些配置从数据库获取工作流程数据,构建XML格式的流程树。通过正确地在init()方法中初始化上下文,可以成功访问到Spring管理的Bean。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          准备用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.youkuaiyun.com/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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值