java - Tomcat servlet - 状态 404 请求的资源不可用

标签 java tomcat servlets

<分区>

SO 上有多个类似的问题,但没有一个解决了我的问题,我想不出还有什么可能导致此错误。

我正在尝试编写一个只打印“Hello World”的简单 servlet:

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

public class PrintServlet extends HttpServlet {


     public void doGet(HttpServletRequest request,
              HttpServletResponse response) throws ServletException, IOException {
         PrintWriter out = response.getWriter();
         out.println("Hello World");
     }
}

我所做的是编译 java 文件,将编译后的文件移动到 /usr/local/apache-tomcat-7.0.65/webapps/examples/WEB-INF/classes,然后添加这些到位于 /usr/local/apache-tomcat-7.0.65/webapps/examples/WEB-INF 的 web.xml 文件:

<servlet>
  <serlet-name>PrintServlet</servlet-name>
  <servlet-class>PrintServlet</servlet-name>
</servlet>

<servlet-mappinng>
<servlet-name>PrintServlet</servlet-name>
<url-pattern>/servlet/PrintServlet</url-pattern>
</servlet-mapping>

并尝试使用 http://localhost:8080/servlet/PrintServlet 访问 servlet。

我收到错误消息:状态 404 请求的资源不可用。

我看不出哪里可能有错误,我只是在学习教程。有人可以帮帮我吗?

编辑:

catalina.out 中的日志文件(通过调用 tail -f catalina.out 获取此文件,不确定如何打开此文件)。

Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/examples has finished in 130 ms
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.65/webapps/host-manager
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/host-manager has finished in 80 ms
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.65/webapps/manager
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/manager has finished in 96 ms
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.65/webapps/ROOT
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /usr/local/apache-tomcat-7.0.65/webapps/ROOT has finished in 62 ms
Dec 10, 2015 4:46:02 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Dec 10, 2015 4:46:02 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Dec 10, 2015 4:46:02 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 918 ms

调用./startup.sh时的启动信息:

Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.65
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.65
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.65/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.65/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.65/bin/tomcat-juli.jar
Tomcat started.

最佳答案

在你的 web.xml 中你说你有这个:

<servlet>
  <serlet-name>PrintServlet</servlet-name>
  <servlet-class>PrintServlet</servlet-name>
</servlet>

看到 PrintServlet 的区别了吗?

应该是这样的:

<servlet>
  <serlet-name>test.PrintServlet</servlet-name>
  <servlet-class>PrintServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

更正此问题,重新启动并报告它是否有效;-)

如果这不起作用:

我想你可以使映射更简单:

<servlet-mappinng>
  <servlet-name>PrintServlet</servlet-name>
  <url-pattern>/print</url-pattern>
</servlet-mapping>

应该解析为 http://localhost:8080/examples/print

并向您的 servlet 添加一些调试输出:

package test;

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

public class PrintServlet extends HttpServlet {

     static {
       System.out.println("STACKOVERFLOW:> I've been loaded!");
     }

     public void doGet(HttpServletRequest request,
              HttpServletResponse response) throws ServletException, IOException {
         PrintWriter out = response.getWriter();
         out.println("Hello World");
     }
}

重新编译,放入 examples/WEB-INF/classes,重启 tomcat 并观察该行是否出现。或者日志是否显示错误信息?

关于java - Tomcat servlet - 状态 404 请求的资源不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203344/

相关文章:

java - plMortgage 计算器 GUI 问题很多

java - 使用 cookie 传递值

java - JSOUP 在 HTML 文件中找到所有具有 ALT 属性的图像?

java - Tomcat 启动挂起

tomcat - 当从 WAR 服务时,JSP 页面无法正确呈现

java - 抽象方法与监听器

java - 尝试加载外部库会杀死 JRE

Java : different init parameters to same servlet based on different URL patteren

java - 如果用户尝试通过 url 更改参数

Java servlet,从文件读取,数组越界