2011-08-07 15 views
2

나는 가장 단순하다고 생각되는 것을 가지고있다. hello world 예제 (아래 참조). 그러나 "http : // localhost : 8080/hello"를 통해 Firefox를 요청할 때 은 ""요청한 리소스 (/ hello /)를 사용할 수 없습니다. "오류 오류가 발생했습니다.Tomcat이 인식하지 못함 <url-mapping>

환경 : 새로 윈도우 7에서 톰캣 6.0.32을 설치

기타 정보 : "유사한 질문에"의 1. 아무도 어떤 단서를 제공하지 않습니다. 8080/안녕 내 서블릿 : 실험에서

  1. 는, 그 바람둥이가 로컬 호스트에서 매핑을 수행 하지 않습니다 나타납니다.

  2. 나는 설정 "< 시작시로드 >"서블릿의 init 항목이 가 호출되고, 그러나의 doGet()가 호출되지 않습니다 나에게 보여 주었다 .

  3. 로그 파일에는 오류가 표시되지 않습니다.

  4. 안녕하세요 디렉토리가 이미 webapps에 있고 hello.war이 webapps이고 관리자 응용 프로그램을 사용하여 배포 중입니다. 모두 똑같이 행동합니다.

    1. 이 문서에 따르면, 나는 의 context.xml 파일을 사용할 필요가 없습니다, 나의 실험은 context.xml에와 같은 제작 :

    일부 가능성은 나는 생각했다 리소스를 찾을 수 없습니다. 오류.

  5. 로컬 호스트 : 안녕하세요 /.../ 8080하지만, 그렇다면, 다음은 ... 있어야 무엇 : 8080/안녕하세요 localhost 대신 해야 하는가?

  6. 후행/(예 : hello 대/hello /). URL 패턴을 "/ hello/*"로 변경했지만 동일한 방법으로 실패합니다.

나는 문제가 간단하다고 가정하지만, 나는 을 볼 수 없다.

[Added 8/8/2011] context.xml 사용에 대한 답변이 정확합니다. 감사. 주위를 돌아 보면 같은 효과를 내기 위해 대체 방법이 인 것으로 나타났습니다.이 파일을 내 web.xml 파일에 넣는 것입니다.

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

의 web.xml :

<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 : 패키지 테스트;

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(); 
    } 
} 

답변

4

Java Servlet Application (Java EE의 일부는 아니지만 Java Enterprise Edition의 일부 임)에서 응용 프로그램은 " 이 "컨텍스트 경로"는 모든 요청을 응용 프로그램에 매핑하기 위해 지정되어야합니다.

Apache Tomcat은 server.xml (권장하지 않음) 또는 개별 컨텍스트 파일 (권장)을 통해이 컨텍스트 경로를 구성하기가 매우 쉽습니다. 두 방법 모두 웹 응용 프로그램 디렉토리 (압축 해제 된 웹 응용 프로그램 아카이브 또는 WAR 파일)를 찾을 위치와 컨텍스트 경로에서 서버에 배치 할 위치를 지정합니다.

Vlad가 이미 말했듯이, war 파일을 Tomcat의 webapps 디렉토리에 배포하고 자동 설치 (기본적으로 켜져 있다고 믿는다)하면 Tomcat은 .war 파일을 해당 위치의 디렉토리에 압축을 풀고 전쟁의 이름을 컨텍스트 경로로 사용합니다. 그의 예제 war 파일의 이름은 "helloapp.war"이므로 기본 설정을 사용하면 컨텍스트 경로가 helloapp가되기 때문에 http://localhost:8080/helloapp에 대한 요청을 받게됩니다.

물론 요청이 컨텍스트 경로로 보내지면 무언가가 컨텍스트 경로와 일치해야합니다. 바로 web.xml이 재생되는 곳입니다. 매처로서 루트를 사용할 수 있지만 (컨텍스트 경로에 대한 모든 요청은 동일한 프로세스에서 처리됩니다.) 일반적으로 패턴이 사용됩니다 (예 : * .do, * .action 등). helloapp는

그래서, 컨텍스트 경로는 다음 응용 프로그램이 있고, 응용 프로그램에 도달 (읽기가 디버그 http://localhost:8080/helloapp/login.action 둘 이상의 http://localhost:8080/helloapp/doSomethingElse.action 일부 매개 변수와 내 의견 http://localhost:8080/helloapp 같은 경로를 통해 인식되고 쉽게) 쉽게 구별 실제 요청을 보낼 위치를 확인하려면 web.xml을 조회해야합니다. 위의 예에서 helloapp의 컨텍스트 경로에 webapp가 배포 된 경우 적절한 매핑을 사용하여 액세스하려면 간단히/hello를 추가하면 요청은 http://localhost:8080/helloapp/hello

1

당신은 ROOT.war에 패키지 (또는 루트 디렉토리)의 이름을 바꾸거나 안녕하세요 폴더를 가리 키도록 ROOT.xml의의 context.xml 파일을 수정해야합니다 중 하나.

2

hello 서블릿을 웹 응용 프로그램에 배포하고 있습니다. 웹 애플리케이션을 가정하면 안녕하세요/안녕하세요 나는 내기 앱을 볼 수 있습니다 /로 이동하면 다음 sevlet이 http://localhost:8080/helloapp/hello

0

에 액세스 할 것 폴더 helloapp 또는 Tomcat의 webapps 디렉토리에 아카이브 helloapp.war입니다. 바람둥이를 사용하는 경우 context.xml을 사용하십시오. 웹 응용 프로그램을 사용하기 위해 웹 응용 프로그램을 사용할 필요는 없지만, tomcat 아래에 배포하면 context.xml 파일이있을 때보다 일관되게 작업 할 수 있습니다./yourtomcatinstall/webapps에 /에서

안녕하세요/META-INF// 정보 "

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/hello"> 
</Context> 

와의 context.xml 파일을 생성하고 web.xml 파일에 서블릿의 URL 매핑을 변경 및/또는/* 서블릿에 대해 둘 이상의 URL 매핑을 가질 수 있습니다.

+0

이됩니다. 죄송합니다. 원본 예제는 자신의 웹 응용 프로그램. 기술적으로 url 매핑을 /로 변경할 수는 있지만 webapp에 context.xml을 추가 할 수 있습니다. –

+0

또한 context.xml을 설정하지 않은 경우. .war 파일 이름이 무엇이든 루트 URL이됩니다. 따라서 war 파일의 이름이 HelloServlet.war 인 경우 tomcat은 webapps/HelloServlet 디렉토리에 배포하고 루트 URL은/HelloServlet이됩니다. 따라서/HelloServlet/hello에서 서블릿에 액세스 할 수 있습니다. –

+0

1./hello/hello가 서블릿을 호출했습니다. 2. 또한 context.xml을 추가했습니다. 문서가 이것에 명확하게 되었으면 좋겠지 만 오. –

관련 문제