2012-05-06 11 views
0

私のシステムにはTomcatが7あり、すべてのファイルはWebアプリケーションの下にあります。ファイル構造はJavaサーブレット404エラー

のwebapps/WelcomeForm /ウェブ/ WelcomeForm.html

WEB-INF/web.xmlのある

のlib /クラス/ハロー/ HelloWorldServlet.java HelloWorldServlet.class

ウェブフォルダにはWelcomeForm.htmlが格納されています。

WEB-INFはweb.xmlを保持します。

libには、サーブレット-api.jarをして

クラスはHelloWorldServlet.javaを保持して保持しています。

htmlファイルが細かい実行されますが、それはメッセージを返すように私はJavaファイルを実行することはできません。

HTTP Status 404 - /hello 

type Status report 

message /hello 

description The requested resource (/hello) is not available. 

ファイルのコードは以下の通りです:

WelcomeForm.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <title>Welcome Form</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
      <form method="POST" action="/hello"> 
     <font size="10" color="red">Hello World!</font><BR> 

    Type your first name and click submit button <input TYPE=TEXT NAME="username" SIZE=20> 
      <P><input type="submit" value="Submit"> 


     </form> 

    </body> 
</html> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <servlet> 
     <servlet-name>HelloWorld</servlet-name> 
     <servlet-class>hello.HelloWorldServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>HelloWorld</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
</web-app> 

HelloWorldServlet.java

package hello; 

import java.io.IOException; 
import javax.servlet.ServletException; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.annotation.*; 
import javax.servlet.http.*; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.PrintWriter; 

public class HelloWorldServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html"); 

     doPost(request,response); 
     } 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    String name = request.getParameter("username"); 
    PrintWriter out = response.getWriter(); 
    out.write("Your Name is :"); 
    out.print(name); 

    }  
} 

は私が間違って何をしているのですか?

+0

あなたの 'lib'ディレクトリから' servlet-api.jar'を削除し、 'action ="/hello "'を 'action =" hello "'に変更できますか? –

+0

TomaszのようにAPI jarを削除する必要があります.JSTL経由でURLを生成しない場合は、web-app-relativeであることを確認する必要があります。サーブレットファイルは/ WEB-INF/classesか/ WEB-INF/lib/classesにありますか?実際の書式設定がないため、あなたの投稿からは不明です。これは/ WEB-INF/classes(パッケージ階層の下)になければなりません。 –

+0

デプロイ時にエラーが発生したようです。 Tomcatサーバーのログファイルを確認してください。 Webアプリのデプロイメントがいつ始まり、失敗したのかを示します。 – kapand

答えて

0

ブラウザのURLを確認してください。あなたは文脈がありません。

あなたはhttp://localhost:8080/test/index.jspで動作しています。testはコンテキストパスです。

サーブレットを呼び出すときはhttp://localhost:8080/test/helloのようになります。

あなたの場合、それはそうではありません。

したがって、cotextpathを追加すると問題が解決します。

action="<%=request.getContextPath()%>/hello"

か、

を使用することができ、例えばaction="hello"

したがって、「/」をactionに追加すると、常にコンテキストパスが追加されます。

関連する問題