【问题标题】:Servlet not working :HTTP Status 404 [duplicate]Servlet 不工作:HTTP 状态 404 [重复]
【发布时间】:2013-08-10 01:08:40
【问题描述】:

我使用 tomcat 7 和 javac 编译器开发了一个小型 Web 应用程序,我成功编译了我的 servlet 并正确部署了类文件。我的 html 表单会运行,但是当我单击 html 上的提交按钮时,它应该运行 servlet,然后在页面上打印一些建议,但会产生此错误:

HTTP 状态 404 - HTTP 状态 404 - /beer-v1/%E2%80%9DSelectBeer.do%E2%80%9D


输入状态报告

消息 /beer-v1/%E2%80%9DSelectBeer.do%E2%80%9D

说明请求的资源不可用。


Apache Tomcat/7.0.34


输入状态报告

消息 /beer-v1/SelectBeer.do

说明请求的资源不可用。


Apache Tomcat/7.0.34

这是我的html代码:

    <h1 align=”center”>Beer Selection Page</h1>

    <form method=”POST”

          action=”SelectBeer.do”>

        Select beer characteristics<p>

            Color:

            <select name=”color” size=”1”>

                <option value=”light”> light </option>

                <option value=”amber”> amber </option>

                <option value=”brown”> brown </option>

                <option value=”dark”> dark </option>

            </select>

            <br><br>

        <center>

            <input type="submit" value="ok" />

        </center>

    </form></body></html>

和我的部署描述符:

<servlet>

    <servlet-name>Ch3 Beer</servlet-name>

    <servlet-class>com.example.web.BeerSelect</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>Ch3 Beer</servlet-name>

    <url-pattern>/SelectBeer.do</url-pattern>

</servlet-mapping>

最后我的 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);
 }
}

我使用 Java 6 javac 编译器 请帮帮我。

【问题讨论】:

  • 您部署的战争文件的名称是什么?从错误消息看起来像 servlet 上下文路径是beer-v1。因此,你的war文件应该是beer-v1.war,否则你必须在Tomcat中设置正确的上下文路径。
  • 我没有将我的应用程序打包到 war 文件中,我只是将实际文件部署到了 tomcat 服务器
  • 在你的 web.xml 中你可以试试这个&lt;url-pattern&gt;*.do&lt;/url-pattern&gt; 并回发结果
  • 您也可以试试这个:在 web.xml 中将 &lt;url-pattern&gt; 更改为 /SelectBeer(不带 .do 扩展名)并在 html 表单中将操作设置为 SelectBeer
  • 您究竟做了什么来部署文件。您应该知道,如果 web.xml 根本没有部署,也会发生同样的事情。

标签: java html xml servlets java-ee-6


【解决方案1】:

不要忘记在您的 html 文件的 head 部分明确声明适当的字符集。

<head><meta charset="utf-8"> <title>... </head>

%E2%80%9D 表示右双引号字符的十六进制表示法(使用 UTF-8)。因此,似乎 Tomcat 正在尝试将“SelectBeer.do”`转换为 UTF-8,但找不到编码声明。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    将动作写在下面的表格中并再次测试

    action="/SelectBeer.do"

    【讨论】:

    • 嗨 sujikin,不幸的是它不起作用
    • 我尝试在 Eclipse 的新项目中复制与您的代码完全相同的代码。它工作得很好。这一定是一个非常简单的错误。有什么方法可以在线分享您的项目?
    • sujikin,我不应该使用 IDE,我正在准备 OCE Web 组件考试,他们建议我们不要将 IDE 用于快速学习目的
    • 如果您可以分享您的代码,那么我可以进一步评论。使用您在此处提供的代码,我可以毫无问题地编译和运行。
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2015-10-11
    • 2016-02-11
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2012-06-01
    • 2013-06-02
    相关资源
    最近更新 更多