2011-06-20 16 views
8

इस कार्य को प्राप्त करने के तरीके पर कई दस्तावेज हैं लेकिन मैं अभी भी अपनी समस्या का समाधान नहीं कर सका। मैं सर्वलेट के साथ काम करने के लिए नया हूं इसलिए शायद मुझे कुछ याद आया।लोड स्प्रिंग बीन एक सर्वलेट में

मैं लाल 5 का उपयोग करता हूं जो एक स्लेटलेट बनाने के लिए टोमकैट 6 का उपयोग करता है जो एक स्प्रिंग बीन का उपयोग करता है जो डेटाबेस मैनिप्लेशंस के लिए एक MySQL डीबी क्लास का उपयोग करता है।

जब मैं पोर्ट 5080 का उपयोग कर लाल 5 को इंगित करता हूं तो यह नियमित टॉमकैट सर्वर के रूप में कार्य करता है और मैं jsp और servlet पृष्ठों को ब्राउज़ कर सकता हूं।

मेरे web.xml निम्नलिखित प्रासंगिक जानकारी होती है:

<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>fbauth</servlet-name> 
    <servlet-class>com.xpogames.FbAuth</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>fbauth</servlet-name> 
    <url-pattern>/fbauth</url-pattern> 
</servlet-mapping> 

मेरी applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="/WEB-INF/red5-web.properties" /> 
</bean> 

<bean id="idDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName"><value>${db.driver}</value></property> 
    <property name="url"><value>${db.url}</value></property> 
    <property name="username"><value>${db.username}</value></property> 
    <property name="password"><value>${db.password}</value></property> 
    <property name="poolPreparedStatements"><value>true</value></property> 
    <property name="maxActive"><value>10</value></property> 
    <property name="maxIdle"><value>10</value></property> 
</bean> 

<bean id="MysqlDb" class="com.xpogames.MysqlDb"> 
    <property name="idDataSource" ref="idDataSource"/> 
</bean> 


</beans> 

मेरी FbAuth सर्वलेट:

पैकेज com.xpogames;

java.lang.IllegalStateException: Context attribute is not of type WebApplicationContext 

मुझे लगता है मैं वसंत सेम सही ढंग से प्राप्त करने में कठिनाई नहीं कर रहा हूँ:

import java.io.IOException; 

import java.io.PrintWriter; 


import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.context.ApplicationContext; 
import org.springframework.web.context.WebApplicationContext; 
import org.springframework.web.context.support.WebApplicationContextUtils; 

public class FbAuth extends HttpServlet { 
private static final long serialVersionUID = 1L; 

public FbAuth() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); 
    MysqlDb mysqlDb = (MysqlDb)webApplicationContext.getBean("MysqlDb"); 
    out.println(mysqlDb.testme()); 
    out.println("Hello, world!"); 
    out.close();   
} 

} 

मैं निम्नलिखित त्रुटि मिलती है।

कोई विचार?

धन्यवाद!

अद्यतन

यह मेरा नया init समारोह है:

public void init(ServletConfig config) throws ServletException { 
    super.init(config); 
    ServletContext servletContext = this.getServletContext(); 
    this._context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 
} 

बहुत बहुत शुक्रिया! :)

उत्तर

9

मैं सर्वलेट की init() विधि में निम्न का उपयोग करता हूं। Init() विधि को Servlets जीवन चक्र में केवल एक बार कहा जाता है।

ApplicationContext context = 
    WebApplicationContextUtils.getRequiredWebApplicationContext(
     this.getServletContext()); 

इसके अलावा, आप अपने web.xml में "contextConfigLocation" क्या ज़रूरत है?

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:/**/spring-config.xml 
     </param-value> 
</context-param> 
+0

संदर्भ-परम जोड़ना और ओवरराइडिंग init (ServletConfig) ने समस्या को हल किया है। आपका बहुत बहुत धन्यवाद! – ufk

2

आपके कक्षा पथ पर वसंत के कई संस्करण हो सकते हैं: जांचें कि आप गलती से 2 अलग-अलग वसंत जार लोड नहीं कर रहे हैं।

+0

नमस्ते। मैंने जांच की और मेरे क्लासपाथ में केवल वसंत ढांचे 3.0.5 – ufk

1
WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext()); 
webApplicationContext .getBean("Name") 
संबंधित मुद्दे