2011-10-21 25 views
6

tôi nhận được một ngoại lệ bất cứ khi nào tôi cố gắng nhận tham số bối cảnh từ we.XML vào một lớp ServletContextListener, tôi thực sự có thời gian khó khăn để hiểu tại sao ta không làm việc, đây là ngoại lệ trong Apache Tomcat 7.0.11 log:ClassNotFoundException với ServletContextlistener

Oct 21, 2011 1:24:23 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Error configuring application listener of class alaa.ServletContextListener 
java.lang.ClassNotFoundException: alaa.ServletContextListener 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
at 
    org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415) 
at  

at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4618) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5184) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5179) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 

Dưới đây là một phần của web.xml của tôi:

<context-param> 
    <param-name>catName</param-name> 
    <param-value>meshmesh</param-value> 
</context-param> 
<context-param> 
    <param-name>catBreed</param-name> 
    <param-value>egyptian</param-value> 
</context-param> 
<listener> 
    <listener-class>alaa.CatLisenter</listener-class> 
</listener> 
<session-config> 
     <session-timeout> 
     30 
     </session-timeout> 
</session-config> 

Dưới đây là ServletContextListener.java tôi:

package alaa; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
public class CatLisenter implements ServletContextListener { 

@Override 
public void contextInitialized(ServletContextEvent sce) { 
    ServletContext sc = sce.getServletContext(); 
    String name = sc.getInitParameter("catName"); 

    String breed = sc.getInitParameter("catBreed"); 

    Cat maCat = new Cat(); 
    maCat.setName(name); 
    maCat.setBreed(breed); 

    sc.setAttribute("cat", maCat); 
} 

@Override 
public void contextDestroyed(ServletContextEvent sce) { 
    throw new UnsupportedOperationException("Not supported yet."); 
} 
} 



Here's Cat.java : 





package alaa; 

public class Cat { 
private String name; 
private String breed; 


public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getBreed() { 
    return breed; 
} 


public void setBreed(String breed) { 
    this.breed = breed; 
} 
} 

many thanks 
+0

Bạn có chắc chắn người nghe của bạn đang được triển khai? –

Trả lời

7

Cố gắng xóa thư mục công việc tomcat và dọn dẹp. Sau đó, xuất bản dự án của bạn và chạy lại.

+0

Tôi đã làm như bạn đã nói với tôi, tệp ngữ cảnh đã xoá từ \ Apache Tomcat 7.0.11 \ conf và chạy lại webApp của tôi, và nó hoạt động hoàn hảo, nhờ một triệu. – Rehme

5

Tôi đoán là bạn đã đóng gói bình servlet-api trong thư mục webapp (trong WEB-INF/lib) và điều này gây ra xung đột vì servlet-api đã có trong thùng chứa. Hãy chắc chắn rằng bạn không bao gồm bất kỳ lọ servlet-api hoặc jsp-api (hoặc Java EE api) nào trong ứng dụng web của bạn khi bạn triển khai nó.

+0

Chưa tạo bất kỳ trang servlet hoặc jsp nào, Đây có phải là ý của bạn không? Tôi đang tìm cách tạo một servlet để tôi có thể nhận được thuộc tính ServletContext sau đó lấy lại các cá thể mèo. – Rehme

+0

@RealSilhouette không, đó không phải là ý tôi. Bản xây dựng cuối cùng mà bạn đang triển khai cho tomcat, nó có bao gồm bất kỳ tệp jar nào trong thư mục WEB-INF/lib có tên là servlet-api.jar hoặc jsp-api.jar không? Nếu vậy, bạn không đóng gói chiến tranh của bạn một cách chính xác như những lọ đã tồn tại trong container tomcat, gây ra xung đột. Bạn đang xây dựng như thế nào? Maven? Thông qua IDE? – pap

+0

Có xung đột ở đâu? Nó nói rằng lớp nghe không được tìm thấy (giả sử điện thoại của tôi hiển thị mọi thứ chính xác :( –

1

tôi đã cùng một vấn đề chạy JUnit trong một môi trường Tomcat 7 và tôi giải quyết nó thêm phần phụ thuộc trong maven (pom.xml) như thế này:

<dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>tomcat-servlet-api</artifactId> 
     <version>7.0.54</version> 
     <scope>provided</scope> 
    </dependency> 
0

tôi đã cùng một vấn đề khi tôi cố gắng với nhật thực toàn phần Phiên bản LUNA và tomcat 7. Mã giống nhau mà không có bất kỳ thay đổi bổ sung nào được thực hiện trong nhật thực JUNO với tomcat 7.

0

Xác minh không gian trong đĩa. Khi nhật thực sao chép thư mục libs nếu không có không gian trong đĩa, lỗi này có thể xảy ra

1

Nếu bạn đang làm việc trong Eclipse, Sau đó chỉ cần dọn dẹp dự án của bạn.

làm theo bước đơn giản này, Đi tới Dự án> sạch ...> sạch tất cả các dự án> Ok

Các vấn đề liên quan