2012-05-05 2 views
-1

내 시스템에는 tomcat 7이 있고 모든 채우기는 webapp에 있습니다. 파일 구조는내 시스템에서 서블릿을 실행할 수 없습니다 어떻게 수정합니까?

웹 어플리케이션/ WelcomeForm/ 웹/ WelcomeForm.html WEB-INF/ web.xml을 lib 디렉토리/ 클래스/ 안녕하세요/ HelloWorldServlet.java HelloWorldServlet.class

입니다 웹 폴더에는 WelcomeForm.html이 있습니다. WEB-INF는 web.xml을 보유합니다. lib에는 servlet-api.jar가 있고 classes에는 HelloWorldServlet.java가 있습니다. HMTL 파일은 잘 실행하지만 메시지를 반환으로 내가 자바 파일을 실행할 수 없습니다 :

HTTP 상태 404 -/안녕하세요

유형 상태 보고서

메시지/안녕하세요

설명을 요청한 리소스를 (/ hello)를 사용할 수 없습니다.

파일에 대한 코드는 다음과 같습니다 :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <title>Welcome Form</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
      <form method="POST" action="<%=request.getContextPath()%>/hello"> 
     <font size="10" color="red">Hello World!</font><BR> 

    Type your first name and click submit button <input TYPE=TEXT NAME="username" SIZE=20> 
      <P><input type="submit" value="Submit"> 


     </form> 

    </body> 
</html> 

web.xml을

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <servlet> 
     <servlet-name>HelloWorld</servlet-name> 
     <servlet-class>hello.HelloWorldServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>HelloWorld</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
</web-app> 

HelloWorldServlet.java

package hello; 

import java.io.IOException; 
import javax.servlet.ServletException; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.annotation.*; 
import javax.servlet.http.*; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.PrintWriter; 

public class HelloWorldServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
response.setContentType("text/html"); 

     doPost(request,response); 
     } 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    String name = request.getParameter("username"); 
    PrintWriter out = response.getWriter(); 
    out.write("Your Name is :"); 
    out.print(name); 

    }  
} 

내가 뭘

WelcomeForm.html

잘못된?

+0

가상 디렉터리 경로 란 무엇입니까? – Adil

+0

C : \ Users \ Matthew \ Downloads \ apache-tomcat-7.0.26-windows-x64 \ apache-tomcat-7.0.26 \ webapps \ labs \ lab10 \ WelcomeForm – user1305085

+0

제공하는 서블릿의 URL은 무엇입니까? – Adil

답변

1

트리가 잘못되었습니다. webapp의 폴더 (또는 war)는 Tomcat의 webapps 폴더에 있어야합니다.

(귀하의 경우 Welcome form하지만,이 URL을에 인코딩 할 일을 열심히 그쪽으로 필요한해야하기 때문에 당신이 정말로, 폴더 이름에 공백을 피해야한다) 직접 웹 애플리케이션의 루트 폴더 아래

WEB-INF라는 이름의 폴더가 있어야합니다.

servlet-api.jar은 WEB-INF/lib 폴더에 있어서는 안됩니다. Tomcat은 이미 클래스 패스에이 항아리가 있습니다.

웹 응용 프로그램의 폴더 이름이 Welcome form 인 경우 URL을 /labs/lab10/WelcomeForm/으로 지정하는 이유는 무엇입니까? URL은 /Welcome form/...

이어야합니다. web.xml 파일에서 <servlet-class> 요소는 서블릿 클래스의 정규화 된 이름이어야합니다. 따라서 클래스의 이름이 HelloWorldServlet이고 패키지 com.foo.bar에있는 경우 요소는 com.foo.bar.HelloWorldServlet이어야합니다.

그리고 물론 <servlet-mapping> 요소는 지정된 서블릿을 URL (또는 URL 집합)에 매핑하는 데 사용됩니다. 따라서이 URL을 사용하여 서블릿을 호출해야합니다 : http://hostname/Welcome form/HelloWorldServlet.

간단히 말해서 모든 것이 잘못되었습니다. 서블릿 및 웹 응용 프로그램에 대한 책 또는 자습서를 다시 읽어야합니다.http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html

+0

webapps 폴더는 tomcat 디렉토리의 하나이며 servlet-mapping URL을 사용하면 작동하지 않았습니다. 이전과 같은 오류가 나타납니다. – user1305085

+0

위에 나열된 모든 오류를 해결해야합니다. –

+0

WelcomeForm의 공백은 오타 였고 패키지가 없습니다 – user1305085

관련 문제