代码之家  ›  专栏  ›  技术社区  ›  Ceilingfish

404自动向Glassfish部署servlet后

  •  0
  • Ceilingfish  · 技术社区  · 16 年前

    我试图将我创建的servlet部署到Glassfish应用程序服务器上,但我似乎遇到了一些障碍。代码可以很好地部署到auto-deploy文件夹,部署后,以下内容将写入日志文件:

    [#|2009-03-16T13:41:29.303+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|[AutoDeploy] Selecting file /opt/glassfish-2.1.b60e/domains/imageTransformer/autodeploy/image-transformer.war for autodeployment.|#]
    
    [#|2009-03-16T13:41:29.304+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|Autoundeploying application :image-transformer|#]
    
    [#|2009-03-16T13:41:29.360+0000|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=23;_ThreadName=Timer-7;|
    classLoader = WebappClassLoader
      delegate: true
      repositories:
        /WEB-INF/classes/
    ----------> Parent Classloader:
    EJBClassLoader : 
    urlSet = []
    doneCalled = false 
     Parent -> java.net.URLClassLoader@39cf701c
    
    |#]
    
    [#|2009-03-16T13:41:29.361+0000|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=23;_ThreadName=Timer-7;|
    SharedSecrets.getJavaNetAccess()=java.net.URLClassLoader$7@5e7408d9|#]
    
    [#|2009-03-16T13:41:29.487+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|[AutoDeploy] Successfully autoundeployed : /opt/glassfish-2.1.b60e/domains/imageTransformer/autodeploy/image-transformer.war.|#]
    
    [#|2009-03-16T13:41:29.612+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|deployed with moduleid = image-transformer|#]
    
    [#|2009-03-16T13:41:29.783+0000|INFO|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=23;_ThreadName=Timer-7;|[AutoDeploy] Successfully autodeployed : /opt/glassfish-2.1.b60e/domains/imageTransformer/autodeploy/image-transformer.war.|#]
    

    所以没有明显的错误,但是在那之后,通过访问servlet应该绑定到的路径,我得到了404。还有其他的步骤需要我去做吗?

    我的war文件中的web.xml如下所示:

    <web-app>
         <servlet>
           <servlet-name>MyServlet</servlet-name>
             <servlet-class>my.servlet.MyServlet</servlet-class>
         </servlet>
    
        <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
     </web-app>
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   Amos M. Carpenter leergou    10 年前

    这个部署有几个问题。首先,需要在 WEB-INF 目录,命名 sun-web.xml . 其内容必须符合以下几点:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd">
    <sun-web-app error-url="">
        <context-root>/MyServlet </context-root>
    </sun-web-app>
    

    它似乎有可能变得比这复杂得多(见 the documentation )

    其次,我必须更改 web.xml 文件,因此它相应地读取:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
            version="2.4">
        <servlet>
            <servlet-name>MyServlet</servlet-name>
            <servlet-class>my.servlet.MyServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    </web-app>
    

    注意标题表明这是servlet规范2.4。

    最后,似乎您不能直接访问这个servlet;您必须预先准备 MyServlet/ (或servlet特定的名称)到路径的开头。所以要访问这个servlet需要您访问 /MyServlet/hello .

        2
  •  0
  •   GGendreau    10 年前

    我修改了web.xml;我只是添加了ORDS配置目录的完整路径。

    <display-name>Oracle Application Express Listener</display-name>
    <context-param>
        <param-name>config.dir</param-name>
        <!-- Enter the location where configuration settings should be stored -->
        <param-value>/odata/apps/ords/config</param-value>
    </context-param>
    

    不管sun-web.xml是否存在,它都可以工作。