Servlet未在浏览器中加载

时间:2012-10-02 06:18:20

标签: java java-ee

我刚刚开始研究servlet,我是一个新手。 我开发了一个带有下拉菜单的html页面,用户可以从中选择啤酒的颜色,并且有一个调用servlet的提交按钮。这是它的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 servlet,其代码在下面给出

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 /目录学习/啤酒-V1 / WEB-INF /班/ COM /例子/网站/ BeerSelect.class
(学习只是一个文件夹,我将所有小的servlet和jsp项目保存在webapps中 在内部学习我有我的不同项目,如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

我做错了什么。请帮忙。

2 个答案:

答案 0 :(得分:1)

如果您将Beer-v1作为Tomcat的webapp文件夹的直接子文件夹,它应该可以使用。
然后尝试访问[tomcaturl] / Beer-v1 / [yourhtmlform] .html。

因为您将servlet映射到上下文根(/),所以/learning/Beer-v1/SelectBeer.do没有映射。

恕我直言,将您的工作区文件夹结构置于 Tomcat的webapp文件夹中并不是一个好主意。这是部署的webapps的特殊文件夹,Tomcat期望这个文件夹的一种标准结构(例如,根目录中的WEB-INF)。

我认为最好使用Eclipse或自动将应用程序(从文件系统)部署到Tomcat的东西。这样,您可以根据需要管理工作区。

Eclipse维护着一个所谓的“工作空间”,它存储了您使用它创建的所有项目。第一次启动Eclipse时,它会询问您使用哪个文件夹作为工作区。然后,您可以在当前使用它时命名您的“学习”文件夹。

向Eclipse添加服务器执行环境(例如Tomcat安装)时,可以配置Eclipse的部署方式。默认配置是将webapp复制到Eclipse特定的工作区子文件夹。

答案 1 :(得分:1)

尝试在表单操作中添加斜杠

action="SelectBeer.do"

action="/SelectBeer.do"