servlet中取到Spring配置

canca17年前 (2007-11-23)Spring246

转自: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>

相关文章

Spring IOC配置文件5分钟搞掂

以下并非普通的Spring配置文件。下面这个文件就是Spring IOC的全部应用例子。 <?xml version="1.0" encoding="utf-8"?><!DOCTYP...

IOC容器,其实很简单

  前几天看easyjweb代码,看到容器那块,顺便自己也写了个简单的IOC容器练练手。今天正好有时间就写出来大家看看,我也好冒充一下高手。 这是个很简单的IOC容器,基本功能有:自动加载所...

Spring OpenSessionInView

OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。