2013-11-15 3 views
0

처음 ServletContextListener를 사용하여 응용 프로그램이 배포 될 때마다 Perticular 함수를 실행하려고합니다.이 간단한 java 클래스 파일을 가져 와서 ServletContextListener를 구현하고 listner를 선언했습니다. web.xml 파일에 있지만 그것을 배포에 2013 년 11 월 (15)심각한 오류 : Java 웹 응용 프로그램의 listenerStart

SEVERE: Error listenerStart in netbeans .. 

Apache tomcat server logs in netbeans.. 

으로 오전 11시 59분 3초 org.apache.catalina.core.StandardContext listenerStart을 오류를주고있다 SEVERE : 클래스의 응용 프로그램 리스너를 구성 오류 app.classes.ContextListenerProcess java.lang.IllegalAccessException : 클래스 org.apache.catalin a.core.DefaultInstanceManager는

package app.classes; 

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import javax.servlet.annotation.WebListener; 


@WebListener() 
class ContextListenerProcess implements ServletContextListener { 

@Override 
public void contextDestroyed(ServletContextEvent sce) { 
} 

@Override 
public void contextInitialized(ServletContextEvent sce) { 
    // Do your startup work here 
    System.out.println("Processing Started ....."); 
} 
} 

여기 내 web.xml 파일입니다 여기에

내 자바 클래스 파일이 ServletContextListener를 구현하고 수정 ""와 클래스 app.classes.ContextListenerProcess의 멤버에 액세스 할 수 없습니다 ContextListenerProcess 클래스를 추가 ...

<listener> 
<listener-class>app.classes.ContextListenerProcess</listener-class> 
</listener> 

제발 너희들은 나를 .. 미리 감사합니다 ..

을 문제를 해결하는 데 도움이
+0

자세한 오류 메시지는 서버 로그를 확인하십시오. –

+0

@ JigarJoshi Sir는 서버 로그로 내 게시물을 업데이트했습니다. – Adi

+0

@WebListener 옆에 괄호가있는 이유는 무엇입니까? – Keerthivasan

답변

0

코드 예를 시도해 보았습니다. 바람둥이가 시작될 때 나는 그것이 성공이 구성을 사용하여 응용 프로그램을 실행 한 후

package app.classes; 

    import javax.servlet.ServletContextEvent; 
    import javax.servlet.ServletContextListener; 
    import javax.servlet.annotation.WebListener; 


    /** 
    * Application Lifecycle Listener implementation class ContextListenerProcess 
    * 
    */ 
    @WebListener 
    public class ContextListenerProcess implements ServletContextListener { 

     /** 
     * Default constructor. 
     */ 
     public ContextListenerProcess() { 
      // TODO Auto-generated constructor stub 
     } 

     public void contextDestroyed(ServletContextEvent sce) { 
     } 

     public void contextInitialized(ServletContextEvent sce) { 
      // Do your startup work here 
      System.out.println("Processing Started ....."); 
     } 
    } 

는이 내 web.xml을

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Use this definition if using a Java EE 6 container This also stops Eclipse 
    from complaining that 3.0 is not a valid version <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" 
    http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> --> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
    <listener> 
     <listener-class>app.classes.ContextListenerProcess</listener-class> 
    </listener> 
    <servlet> 
     <description></description> 
     <display-name>WebListenerServlet</display-name> 
     <servlet-name>WebListenerServlet</servlet-name> 
     <servlet-class>app.classes.WebListenerServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>WebListenerServlet</servlet-name> 
     <url-pattern>/index.html</url-pattern> 
    </servlet-mapping> 
</web-app> 

, 나는 콘솔에서 Processing Started ..... 메시지가 표시됩니다. 난 당신의 코드 사이에만

  <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
     </dependency> 

차이를 추가하고 내 당신이 @WebListener 주석 후 브래킷을 넣어, 당신이 그것을하고 ContextListenerProcess 클래스는 기본 의미에는 액세스 한정자가 없습니다 삭제해야합니다, 그것은 공개한다.

1

ContextListenerProcess 클래스는 개인 패키지가 아닌 공개되어야합니다.

관련 문제