404 autodeploying servlet on glassfish
문제
Glassfish Application Server에 만든 서블릿을 배치하려고했는데 약간의 걸림돌이있는 것 같습니다. 코드는 자동 배포 폴더에 미세 배포되며 배포되면 다음은 로그 파일에 기록됩니다.
[#|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.|#]
따라서 명백한 오류는 없지만 그 후에는 서블릿이 묶어야하는 경로에 액세스하여 404를 얻습니다. 내가 겪어야 할 또 다른 단계가 있습니까?
내 전쟁 파일의 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>
해결책
이 배포에는 몇 가지 문제가있었습니다. 첫째, 두 번째 구성 파일이 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>
이보다 훨씬 더 복잡해 질 가능성이있는 것 같습니다 ( 문서).
둘째, 헤더를 변경해야했습니다. 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>
이것이 서블릿 사양 2.4임을 나타내는 헤더에 유의하십시오.
마지막으로,이 서블릿에 직접 액세스 할 수없는 것 같습니다. 당신은 준비해야합니다 MyServlet/
(또는 서블릿 별 이름) 경로의 시작 부분. 따라서이 서블릿에 액세스하려면 방문해야합니다 /MyServlet/hello
.
다른 팁
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이 있든 없든 관계없이 작동합니다.
제휴하지 않습니다 StackOverflow