Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat 6未识别<;url映射>;_Java_Tomcat_Servlets - Fatal编程技术网

Java Tomcat 6未识别<;url映射>;

Java Tomcat 6未识别<;url映射>;,java,tomcat,servlets,Java,Tomcat,Servlets,我有我认为最简单的方法 hello world示例(见下文)。但当要求 "http://localhost:8080/hello“通过firefox, 它给了我 “请求的资源(/hello/)不可用” 错误 环境:Windows 7上新安装的tomcat 6.0.32 其他资料: 1.“类似的问题”都没有提供任何线索 从实验来看,tomcat似乎不是 从localhost:8080/hello映射到我的servlet 我设置“” 这表明servlet的init条目正在 已调用,但从未调用doGe

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

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

其他资料: 1.“类似的问题”都没有提供任何线索

  • 从实验来看,tomcat似乎不是 从localhost:8080/hello映射到我的servlet

  • 我设置“” 这表明servlet的init条目正在 已调用,但从未调用doGet()

  • 日志文件没有显示任何错误

  • 我试过用hello来启动tomcat 目录已在webapps中,其中hello.war位于 webapps,并使用manager应用程序进行部署。 所有人的行为方式都是一样的

  • 我曾考虑过一些可能性:

  • 根据文件,我应该 不需要使用context.xml文件,我的实验 使用context.xml生成了未找到的相同资源 错误

  • localhost:8080/hello应该改为 localhost:8080/../hello,如果是,那么是什么 这个应该是吗

  • 尾随/(例如/hello对/hello/)。我变了 url模式设置为“/hello/*”,但同样失败 对

  • 我想问题很简单,但我不能 看到了

    [于2011年8月8日增补] 关于使用context.xml的回答是正确的;谢谢 环顾四周,似乎有另一种方式 要达到同样的效果,就是把这个 放入我的web.xml文件

    <context-param>
    <param-name>ContextPath</param-name>
    <param-value>/dts</param-value>
    </context-param>
    

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

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

    如果你转到/hello/hello,我打赌你会看到你的应用程序。如果您使用的是tomcat,请使用context.xml。 webapp可能不需要使用它,但如果在tomcat下部署,那么当您有context.xml文件时,事情就会更加协调一致

    <context-param>
    <param-name>ContextPath</param-name>
    <param-value>/dts</param-value>
    </context-param>
    
    在/yourtomcatinstall/webapps/hello/META-INF/中创建一个包含以下信息的context.xml文件”

    
    

    并将web.xml中servlet的url映射更改为/和/或/*一个servlet可以有多个url映射。

    对于Java servlet应用程序(Java EE-Java Enterprise Edition的一部分,但不是总和),应用程序在所谓的“上下文路径”下有servlet“必须指定才能将任何请求映射到应用程序

    ApacheTomcat可以通过server.xml(不推荐)或单个上下文文件(推荐)轻松配置此上下文路径。这两种方法都指定在何处查找web应用程序目录(未打包的web应用程序归档文件或WAR文件),以及将其放置在服务器上上下文路径的何处

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

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


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

    对不起,原始示例是从我自己的一个Web应用程序粘贴的。从技术上讲,您可以将url映射更改为/但我仍然会向您的Web应用程序添加context.xml。此外,如果您没有设置context.xml。无论.war文件名是什么,都将是根url。因此,如果您的war文件名为HelloServlet.war,tomcat将在webapps/HelloServlet目录中部署它,并且您的根url将是/HelloServlet。因此,您将能够访问位于:/HelloServlet/hello.1的servlet。/hello/hello确实调用了servlet。2.添加context.xml也起到了作用;希望文档在这方面更加清晰,但是哦,很好。
    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();
      }
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/hello">
    </Context>