【问题标题】:Java - Servlet 404 error [duplicate]Java - Servlet 404 错误 [重复]
【发布时间】:2015-09-01 05:23:16
【问题描述】:

我是 servlet 编程的新手。

以下是我的示例 servlet 代码

Sample.Java

public class Sample extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        res.setContentType("text/html");  
        PrintWriter pw=res.getWriter();  

        String name=req.getParameter("name");//will return value  
        pw.println("Welcome "+name);  
        pw.close();  
    }
}

Web.xml

<web-app>
<servlet>
<servlet-name>sampleservlet</servlet-name>
<servlet-class>Sample</servlet-class>
<load-on-startup>1</load-on-startup> 
</servlet>
<servlet-mapping>
<servlet-name>sampleservlet</servlet-name>
<url-pattern>/Sample</url-pattern>
</servlet-mapping>
</web-app>

Index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form action="Sample" method="get">  
Enter your name<input type="text" name="name"><br>  
<input type="submit" value="login">  
</form>  
</body>
</html>

我的问题

当我右键单击我的项目然后单击Run as -&gt; Run on server 时,我选择了服务器,它要求我选择一个服务器,然后我选择要运行的服务器。在 Eclipse 窗口中打开一个浏览器窗口,其地址 URL 为http://localhost:8080/Sample/

当我点击 login 时,它给了我这样的错误,

HTTP 状态 404 - /Sample/welcome


类型状态报告

消息 /示例/欢迎

说明请求的资源不可用。


Apache Tomcat/7.0.62

截图

为什么会出现这样的错误?

其他详情

服务器:apache-tomcat-7.0.62 IDE:Eclipse Java EE 开普勒

我尝试解决问题的步骤

我试过这些,

  1. Getting HTTP Status 404 error when trying to run servlet

结果

我在WEB-INF 文件夹中没有看到.class 文件。

  1. Tomcat giving 404 error with servlets

结果 在“tomcat7\work\Catalina\localhost\your app”这个路径下,work文件夹是空的。

如果我需要发布更多详细信息,请告诉我。

IDE 中的目录结构

【问题讨论】:

  • 查看项目结构/树会很有帮助。也许通过 IDE 的屏幕截图
  • 您是否在web.xml 文件中输入了条目?
  • @Stan 我已经添加了项目结构的截图。
  • 这很奇怪。您已经写了form action = Sample,但它正在寻找Sample/welcome。尝试首先重命名您的 Servlet 或项目,不要保持它们的名称相同。然后让我们看看会发生什么。
  • 通过点击登录,网址将类似于localhost:8080/Sample/Sample?name=StackOverflow,因为您的表单操作是示例......

标签: java eclipse tomcat servlets


【解决方案1】:

您的代码在 tomcat 7 和 eclipse 中对我有用。 也许您的 index.html 与您发布的不一样,因为它的目标是 Sample/welcome 而不是 Sample/Sample。

提示:

  • 确保您的 index.html 发布版本与您的代码中的版本相同。修改内容并确保其发布正常。
  • 直接在浏览器中加载 http://localhost:8080/Sample/Sample?name=Random 以查看 servlet 是否正常工作。
  • 双击服务器上的 Tomcat7。转到您的服务器路径。例如C:\Java\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\Sample\WEB-INF\classes (你的 Sample 类应该在那里)仔细检查你是否在这些文件夹中有权限。
  • 将您的项目导出为 WAR 并将其直接部署在您的 tomcat 中,无需使用 Eclipse。
  • 清理/构建您的项目
  • 在 Servers/server.xml 下的 Package Explorer 中,您应该有一个已声明的上下文,例如&lt;Context docBase="Sample" path="/Sample" reloadable="false" source="org.eclipse.jst.jee.server:Sample"/&gt;&lt;/Host&gt; 如果您不仔细检查这些文件夹中的权限。重新从头开始添加您的 tomcat7 服务器。

【讨论】:

  • 我已将&lt;form action="Sample" method="get"&gt; 更改为&lt;form action="Sample/Sample]" method="get"&gt;,我遇到了上述相同的错误。如果我做错了什么,请告诉我。
  • 我尝试了您的第二个提示。我仍然遇到同样的错误。有什么问题?
  • @Codester 使用
    请输入您的姓名
    代替,让我知道如果您看到“请输入...”,我认为服务器没有正确刷新您的更改。
  • &lt;html&gt; &lt;body&gt; &lt;form action="Sample" method="get"&gt; Please, Enter your name&lt;input type="text" name="name"&gt;&lt;br&gt; &lt;input type="submit" value="login"&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; 我仍然遇到同样的错误。
【解决方案2】:

试试这个,你不需要为任何 servlet 编写 XML 文件;)

只需添加注释@WebServlet("/urlpattern") 并在JSP 中从&lt;form action="urlpattern"&gt; 调用此URL 模式

仅当您在 Eclipse 上工作时。

@WebServlet("/Sample")
public class Sample extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

    res.setContentType("text/html");  
    PrintWriter pw = res.getWriter();  

    String name = req.getParameter("name"); //will return value  
    pw.println("Welcome "+name);  
    pw.close();  
}}

希望对你有帮助。

【讨论】:

猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 2014-02-01
  • 2012-05-15
  • 2021-05-11
  • 1970-01-01
  • 2014-08-21
  • 2014-04-03
  • 1970-01-01
相关资源
最近更新 更多