2009-03-04 12 views
10

Java web geliştirmeye girmeye çalışıyorum ama Tomcat ve son derece basit bir sunucu ile garip bir sorun haline geliyor gibi görünüyor.Tomcat, Servlet'imi bulamıyor ve istisnalar atıyor, ancak neden?

Caused by: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name MyServlet 
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:2393) 
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:2373) 
    ... 40 more 
Mar 4, 2009 10:37:58 AM org.apache.catalina.startup.ContextConfig applicationWebConfig 
SEVERE: Parse error in application web.xml file at jndi:/localhost/mywebapp/WEB-INF/web.xml 
java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name MyServlet 

iyi mantıklı: catalina günlüğü denemek ve uygulamayı yüklemek bu her zaman püsküren edilir. Servletimi bulamıyor gibi görünmüyor. Ancak, sunucu uygulaması doğru yerde görünüyor.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app 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_2_5.xsd" version="2.5"> 
    <description>My first web app in Java.</description> 
    <display-name>My Web App</display-name> 

    <servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>MyServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/myservlet</url-pattern> 
    </servlet-mapping> 
</web-app> 

Gördüğünüz gibi ben: Açıkça Başvuru için

WEB-INF/sınıfları/MyServlet.class de görebilirsiniz, bu Şu anda kullanarak web.xml dosyasıdır işleri basit tutuyorum ... ama bu istisnayı sürekli olarak atıyor. Java'da çıplak kemikleri olan bir web uygulaması neye benziyor?

Bir tür bir obje değildi kesinlikle emin olmak için Güncelleştirme, Tomcat yeni bir kopyasını başladı ve tekrar denedi. ,

SEVERE: Error deploying web application archive mywebapp.war 
java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class MyServlet) 

Ben -target 1.5 ile yeniden inşa MyServlet sınıf için benim .class dosyası terk .WAR paketlenen ve her şey mükemmel çalıştı: Bunu yaptıktan sonra, bu günlük dosyalarında görünen başladı.

Yardımlarınız için çok teşekkür ederim! Sorun giderme konusunda iyi bir ders hiç kimseyi incitmez.

+0

İyi dedektif iş spligak :-) – toolkit

cevap

17

Güncelleştirilmiş bilgiler dikkate alındığında, sorununuzun, sınıfınız için kullandığınız derleyicinin potansiyel olarak JDK'nın çalışan bir Tomcat'den daha yeni bir sürümü olduğu anlaşılıyor.

Tomcat'i başlatmak için kullanılan JDK sürümünü kontrol edin ve daha sonra, sunucu uygulamanızı derlemek için kullandığınız sürüm arasındaki sürüm farklarını uzlaştırmak için bir şey yapıp yapamayacağınızı kontrol edin.

Bu, sorununuzu gidermelidir.

+0

Olduğu şey budur. Ben 1.6 bina ve 1.5 çalışan Tomcat olduğuna inanıyorum. Bu sorunu çözdüm ve her şey iyi çalışıyor ve çalışıyor gibi görünüyor. Teşekkürler! – spligak

0

<servlet> bloğu olmadan başka bir yerde dolaşan eski bir web.xml sürümü olabilir mi?

Belki de tomcat'ın dizinlerindeki find . -type f -name web.xml (veya pencerelere benzer) yapın?

1

MyServlet sınıfı bir pakette bulunuyorsa, sunucu adı düğümlerinde paket nokta sınıfı gösterimi ile listelemeniz gerekir.

+0

Kesinlikle bir nokta gösterimi için hareket etmeyi planlıyorum, sadece bu sorunu çözmeden önce çok fazla değişmekten kaçınarak koşarak böyle basit bir uygulama elde etme kabiliyetimden öfkelendim. Giriş için teşekkürler! – spligak

3

Aşağıdaki satırlar 'un altındaweb.xml adresinizden mi? Tomcat, "MyServlet" adı verilen sunucuya /myservlet numaralı haritaları eşleyen, ancak bu adla herhangi bir sunucu tanımını bulamadığı için şikayetçi olduğunu gösterir. Durum önemlidir. Sağladığınız şey doğru görünüyor, ancak durumun doğru olduğundan emin olmak için web.xml numaranızı tekrar kontrol edin. dizinde mywebapp/WEB-INF/web.xml

<servlet> 
    <servlet-name>MyServlet</servlet-name> <-- Check this name 
    <servlet-class>MyServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> <-- Compare against this name 
    <url-pattern>/myservlet</url-pattern> 
</servlet-mapping> 

yılında tekrar kontrol edin Tomcat kullanıyor web.xml, işte bu değilse, bize bildirin. Fakat bu isimler büyük/küçük harfe duyarlıdır.

1

Birkaç ipuçları: servlet'dir sınıf HttpServlet

  • uzatır mı

    ?
  • Dosya sistemi hakları hakkında - olası bir sorun var mı?
  • Belki de, adlandırılmış paketi (myservlet.MyServlet) Genelde

için sınıf taşımak günlüklerinde daha istisnalar aramaya denemek için de deneyin.

+0

Eksik olduğum çok önemli bir istisna oluştu. Yukarıdaki güncellememi kontrol et. – spligak

İlgili konular