2009-07-11 10 views
2

Tomcatをインストールしてテストしました。いくつかの.htmlファイルと.jspファイルを書き、サーバで試しました。彼らは正しく一緒に働くようです。たとえば、私が試しているこれらのファイルは、サーバーにファイルをアップロードすることを許可し、その名前をデータベース(MySQL)に書き込みます。これが完了すると、別のファイルをアップロードするためのボタンが表示されるか、データベースに保存されているファイルの名前を調べることができます。サーブレット用のTomcat設定

サーブレットを実行する必要があるときに問題が発生します。私は基本的なものを試しています:

package HelloWorldServlet; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 

public class HelloWorldServlet extends HttpServlet { 

    public void init(ServletConfig conf) 
    throws ServletException 
    { 
    super.init(conf); 
    } 
    public void service(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException, IOException 
    { 
    res.setContentType("text/html"); 
    PrintWriter out = res.getWriter(); 

    out.println("<html>"); 
    out.println("<body>"); 
    out.println("<h1>Hello World</h1;>"); 
    out.println("</body>"); 
    out.println("</html>"); 
    } 
} 

そこから.classファイルが得られます。私はこのファイルをwebapps/HelloWord/web-inf/classesに入れます。

実際にweb.xmlファイルを変更する方法と、このサーブレットを.htmlまたは.jspページから呼び出す方法はわかりません。

答えて

3

まず、Web-infディレクトリは、大文字の(WEB-INF)である必要があります。

基本web.xmlが次のようになります。

<?xml version="1.0" encoding="ISO-8859-1"?> 

<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 

<web-app> 
    <servlet> 
     <!-- 
     This is arbitrary name for your servlet, 
     used in servlet-mapping below 
     --> 
     <servlet-name>HelloWorld</servlet-name> 

     <!-- Name of your servlet class --> 
     <servlet-class>HelloWorldServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>HelloWorld</servlet-name> 

     <!-- 
     Here you say location (under context) where your servlet 
     can receive requests. 
     --> 
     <url-pattern>/hello-world</url-pattern> 
    </servlet-mapping> 
</web-app> 

あなたのweb.xmlが<your-app>/WEB-INF/web.xmlパスに保存する必要があります。今

ブラウザは、我々はそれが/hello-worldにマップされているので、呼び出され、そしてアプリケーションが(したがって/ HelloWorldのコンテキストにマッピングされた)HelloWorldディレクトリに展開されているため、サーバー上のサーブレットをhttp://localhost/HelloWorld/hello-worldにアクセスするたび。

+0

こんにちは。私はあなたが言ったようにすべてをやった、今私は別のエラーを取得しています。私がこのページに自分のコードを貼り付けたとき、私は最初の行をforogにしました: "package HelloWorldServlet;" それは物を違うものにしていますか?そうでなければ、私が得ているエラーを投稿します。ありがとう –

+1

@Charles - パッケージを追加すると、サーブレットの完全修飾クラス名がWEB-INF/classes/HelloWorldServlet/HelloWorldServlet.classファイルにある必要があるHelloWorldServlet.HelloWorldServletに変更されます。 – McDowell

+0

ありがとうございました! –

1

まず、Servletクラスを名前にマッピングします。次に、名前をURLパターンにマップします。 URLパターンは、単一のパスであることも、「グロブ」のような/パス/パターン*など、単に/ *

何かすることができます:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="TestApp" version="2.4" 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"> 
    <display-name>Test App</display-name> 
    <servlet> 
     <servlet-name>HelloWorld</servlet-name> 
     <servlet-class>HelloWorldServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>HelloWorld</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
</web-app>