1

私はサーブレットの作業を始めたばかりで、初心者です。ユーザーがビールの色を選択できるドロップダウンメニューを備えたhtmlページを開発しました。サーブレットを呼び出す送信ボタンがあります。そのhtmlコードは次のとおりです。

<html>
<head>
<title>Beer Selection</title>
</head>
<body>
<h2>Beer Selection Page</h2>
<p>Select beer charecteristics:</p>
<hr>
<form method="POST" action="SelectBeer.do">
    <b>Color :</b><!--Keeping it outside the form unnecessarily creates a line break between color and Drop-down menu-->
    <select name="color">
        <option>Light</option>
        <option>Brown</option>
        <option>Amber</option>
        <option>Dark</option>
    </select><br>
    <input type="SUBMIT" value="SUBMIT">
</form>
</body>
</html>

次のデプロイメント記述子を作成しました

<?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/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>MyBeer</servlet-name>
<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyBeer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
</web-app>

コードが以下に示されている BeerSelect.java サーブレットも正常にコンパイルしました。

package com.example.web;

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

public class BeerSelect extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println("Beer Selection Advice<br>");
    String c=request.getParameter("color");
    out.println("<br>Got Beer color"+c);
}
}

私は tomcat 7.0.21 を使用しており、ディレクトリを次のように作成しました: tomcat/webapps/learning/Beer-v1/form.html および
tomcat/webapps/learning/Beer-v1/WEB-INF/web.xml および
tomcat/ webapps/learning/Beer-v1/WEB-INF/classes/com/example/web/BeerSelect.class
(learning は、webapps 内のすべての小さなサーブレットと jsp プロジェクトを保持する単なるフォルダーですBeer-v1、DateDisplay、HotelMgmt など)

今、tomcat内でform.htmlを実行すると正しく表示されますが、送信をクリックすると表示されます

HTTP Status 404 - /learning/Beer-v1/SelectBeer.do

type Status report

message /learning/Beer-v1/SelectBeer.do

description The requested resource (/learning/Beer-v1/SelectBeer.do) is not available.
Apache Tomcat/7.0.21

私は何を間違っていますか。助けてください。

4

2 に答える 2

1

Beer-v1Tomcatのフォルダーの直接のサブフォルダーとして持っている場合は機能するはずですwebapp
[tomcaturl]/Beer-v1/[yourhtmlform].html にアクセスしてみてください。

サーブレットをコンテキスト ルート ( /) にマップしたため、 のマッピングはありません/learning/Beer-v1/SelectBeer.do

私見では、ワークスペース フォルダー構造をTomcat の webapp フォルダーに配置するのはあまり良い考えではありません。これは、デプロイされた Web アプリケーション用の特別なフォルダーであり、Tomcat は、このフォルダーに一種の標準構造を想定しています (たとえば、ルート ディレクトリ内の WEB-INF)。

Eclipse か、アプリケーションを (ファイルシステムから) Tomcat に自動的にデプロイするものを使用する方がよいと思います。このようにして、ワークスペースを好きなように管理できます。

Eclipse は、Eclipse で作成したすべてのプロジェクトを格納する、いわゆる「ワークスペース」を維持します。Eclipse を初めて起動すると、ワークスペースとして使用するフォルダーを尋ねられます。次に、現在使用している「学習」フォルダーに名前を付けることができます。

サーバー実行環境 (Tomcat インストールなど) を Eclipse に追加すると、Eclipse のデプロイ方法を構成できます。デフォルトの構成では、webapp を Eclipse 固有のワークスペース サブフォルダーにコピーします。

于 2012-10-02T07:16:21.960 に答える
1

フォームアクションにスラッシュを追加してみてください

action="SelectBeer.do"

action="/SelectBeer.do"
于 2012-10-02T10:25:46.737 に答える