首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat 6不识别<url-映射>

Tomcat 6不识别<url-映射>
EN

Stack Overflow用户
提问于 2011-08-07 18:44:47
回答 4查看 4K关注 0票数 2

我有一个我认为是最简单的hello world示例(见下文)。但是当通过firefox请求"http://localhost:8080/hello“时,它会给我”请求的资源(/hello/)不可用“错误。

环境: Windows 7上新安装的tomcat 6.0.32。

其他信息: 1.没有一个“相似的问题”提供任何线索。

  1. 的实验来看,tomcat似乎没有在本地主机上执行映射:8080/ hello到我的servlet。
  2. 设置了"“,它显示了servlet的init条目正在被调用,但是doGet()从未被调用。日志文件
  3. 没有出现错误。
  4. --我已经尝试用webapp中的hello目录启动tomcat,在webapp中使用hello.war,以及使用管理器应用程序进行部署。所有的行为都是一样的。--

我考虑过的一些可能性:

根据文档,我不需要使用一个error.

  • localhost:8080/hello文件,我用一个context.xml做的实验产生了相同的资源,没有找到的应该是localhost:8080/./hello,但是如果是,那么什么是.应该是?
  1. 拖尾/(例如/hello相对于/hello/)。我将url-模式更改为"/hello/*",但失败的方式与此相同。

我想问题很简单,但我看不见。

2011年8月8日,关于使用context.xml的答案是正确的,谢谢。环顾四周,实现相同效果的另一种方法似乎是将其放入我的web.xml文件中。

代码语言:javascript
复制
<context-param>
<param-name>ContextPath</param-name>
<param-value>/dts</param-value>
</context-param>

web.xml:

代码语言:javascript
复制
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>test.HelloServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

HelloServlet.java:包装试验;

代码语言:javascript
复制
import java.io.*;

import javax.servlet.http.*;
import javax.servlet.*;

public class HelloServlet extends HttpServlet {

  public void init()
  {
    System.out.println("\nHelloServlet.init");
  }

  public void doGet (HttpServletRequest req,
                     HttpServletResponse res)
    throws ServletException, IOException
  {
    System.out.println("\nHelloServlet.doGet");
    PrintWriter out = res.getWriter();
    out.println("Hello, world!");
    out.close();
  }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-07 20:03:41

对于Java应用程序(的一部分,但不是其总和),应用程序在所谓的“上下文路径”下有Servlet。为了将任何请求映射到应用程序,必须指定此“上下文路径”。

Apache使这个上下文路径非常容易配置,无论是通过server.xml (不推荐)还是单独的上下文文件(推荐)。这两种方法都指定了在哪里找到web应用程序目录(一个未打包的web应用程序存档或WAR文件),以及将它放在服务器上的上下文路径的位置。

正如Vlad已经说过的那样,如果您将war文件部署到Tomcat的webapp目录中,并在其上自动安装(我相信它是默认的),Tomcat将将.war解压缩到该位置下的目录中,并使用war的名称作为其上下文路径。他的示例war文件名为"helloapp.war",因此,使用默认设置,它将接收对http://localhost:8080/helloapp的任何请求,因为它的上下文路径变为helloapp。

当然,一旦请求被发送到上下文路径,就需要与其匹配。这就是web.xml进来玩的地方。虽然可以使用根作为匹配器(对上下文路径的每个请求都由同一个进程处理),但通常使用模式(如*.do、*.action等),以便很容易区分对helloapp的单个请求(与通过某些参数和通过相同的http://localhost:8080/helloapp路径识别两者相比,http://localhost:8080/helloapp/login.actionhttp://localhost:8080/helloapp/doSomethingElse.action更容易阅读和调试)

因此,上下文路径到达应用程序,然后应用程序必须对web.xml进行查找,以查看向何处发送实际请求。在您的示例中,如果您的webapp部署在helloapp的上下文路径上,为了使用正确的映射访问它,您只需附加/hello,这样请求就变成了http://localhost:8080/helloapp/hello

票数 4
EN

Stack Overflow用户

发布于 2011-08-07 18:56:22

您正在webapp中部署hello servlet。假设webapp位于helloapp文件夹中或Tomcat的webapps目录中的归档helloapp.war中,那么您的sevlet可以在http://localhost:8080/helloapp/hello上访问

票数 2
EN

Stack Overflow用户

发布于 2011-08-07 18:47:56

您需要将包重命名为ROOT.war (或根目录),或者修改ROOT.xml context.xml文件以指向hello文件夹。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6974915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档