2012-01-18 8 views
3

これは初めてのサーブレットです。コードはここにあります。Tomcat 7は私に404を与え続けています。何が間違っていますか?

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
public class Ch1Servlet extends HttpServlet { 
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 
    PrintWriter out = response.getWriter(); 
    java.util.Date today = new java.util.Date(); 
    out.println("<html> " +"<body>" +"<h1 align=center>HF\'s Chapter1 Servlet</h1>" +" " + "<br>" + today + "</body>" + "</html>"); 
    } 
} 

私は javac -classpath /usr/share/tomcat7/common/lib/servlet-api.jar -d classes src/Ch1servlet.java
が、私はその後、私のWEB-INFフォルダ内のクラスフォルダに.classファイルを入れて、このコマンドを使用してコンパイル。私はここで間違って何をやっている File Tree

:?ここ

は私のweb.xml

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 
    <servlet> 
     <servlet-name>Chapter1 Servlet</servlet-name> 
     <servlet-class>Ch1Servlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Chapter1 Servlet</servlet-name> 
     <url-pattern>/Serv1</url-pattern> 
    </servlet-mapping> 
</web-app> 

Tomcat7は私にThe requested resource (/ch1/Serv1/) is not available.

ファイルツリーを言ってhttp://127.0.0.1:8080/ch1/Serv1/に404を与え続けていますか

+0

'http:// localhost:8080/Serv1 /'についてはどうでしょうか?また、 'servlet-class'の完全修飾名をパッケージとともに使用するべきです(私はあなたのサーブレットがデフォルトパッケージにないことを望みます)。 – Viruzzo

+0

ch1ディレクトリの構造を見せて、どこに置くか教えてください。また、このch1ディレクトリの場所と、tomcatログの内容を教えてください。ああ、私はViruzzoに同意します:決してデフォルトパッケージを使用しないでください。 –

+0

warファイル(またはフォルダ)の名前を確認します。これはch1である必要があります。 –

答えて

6

あなたはパッケージ内のサーブレットクラスを置く必要があります。パッケージレスのサーブレットが動作するかどうかは、TomcatとJVMの古いバージョンの特定の組み合わせに依存します。本/チュートリアルでこの例を見ると、確かに古くなっています。

package com.example; 

// ... 

public class Ch1Servlet extends HttpServlet { 
    // ... 
} 

/com/example/Ch1Servlet.javaファイルが必要です。次のようにそれをコンパイルし

javac -classpath /usr/share/tomcat7/common/lib/servlet-api.jar -d classes src/com/example/Ch1servlet.java 

(しかし私は、これはTomcatの4.xの/ 5.xの典型的だった、common LIBがやっているのだろうか、しかし、あなたが手動で変更された場合、それは、Tomcat 6以降、Tomcatの存在ではありません時代遅れのチュートリアルの指示に従うために構造、、それを元に戻す!)

は、あなたのWebアプリケーションの/WEB-INF/classesフォルダ内にそのentirityによって生成されたクラスでcomフォルダを置きます。したがって、/WEB-INF/classes/com/example/Ch1Servlet.classが必要です。その後

<servlet-class>でサーブレットクラスの完全修飾名(FQN)を指定するためにあなたの/WEB-INF/web.xmlを編集:

<?xml version="1.0" encoding="UTF-8"?> 
<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_3_0.xsd" 
    version="3.0" 
> 
    <servlet> 
     <servlet-name>Chapter1 Servlet</servlet-name> 
     <servlet-class>com.example.Ch1Servlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Chapter1 Servlet</servlet-name> 
     <url-pattern>/Serv1</url-pattern> 
    </servlet-mapping> 
</web-app> 

(私はTomcatの7サポートサーブレットを遵守するだけでなく、ルート宣言を固定していることに注意してくださいそれ以外のバージョンでは、互換性モードが最小になる)

+0

それは働いた。どうもありがとうございます。私が疑問に思うのは、 "Tomcat 7に準拠するためにルート宣言を修正しました"という部分ですが、その部分は何ですか?バージョン属性?私の本は時代遅れだと言っていたので、あなたの変更をDETAILにしてください。 – prometheuspk

+1

」要素。 Tomcatは3.0のコンテナですが、あなたのものはServlet 2.4のために宣言されました。サーブレット2.4は2003年のものです。Head First JSP 2008は単なる再版です。あなたはcoreservlets.comでいいチュートリアルを見つけることができます。サーブレットwikiページhttp://stackoverflow.com/tags/servlets/infoから始めてください。チュートリアルのリンクは下部にあります。 – BalusC

+0

+1のためのあなたの答えを丁寧に詳述するために+1: – prometheuspk

0

あなたはこのように、server.xmlで、あなたのCH1コンテキストをconfigコン必要があります。

<Context docBase="Your_web_apps_directory" path="/ch1" reloadable="false"/> 
+0

どのタグ内にありますか? 'server'、' host'、 'realm' ?? – prometheuspk

+0

ホストタグで見つけることができます。 – xuanyuanzhiyuan

関連する問題