Servlet test

Programming/Servlet 2007. 11. 2. 01:36

Servlet test

서블릿은 네트워크 상에서 클라이언트 요청에 대해 동적인 응답을 하도록 설계된 자바 클래스입니다.
웹 어플리케이션에 서블릿을 사용할 때는 javax.servlet / javax.servlet.http 클래스를 생성해야 합니다.
서블릿을 컴파일하기 위해 servlet.jar (Tomcat 4.1.24) 이나 servlet-api.jar (Tomcat 5) 로부터 위 클래스를 가져와야 합니다.

톰캣에 포함되어 있는 서블릿 관련 패키지를 자바경로에 복사하거나 classpath 변수에 추가합니다.
 

$ sudo cp <CATALINA_HOME>/common/lib/servlet-api.jar <JAVA_HOME>/jre/lib/ext/servlet-api.jar


♣ HelloServlet.java ($TOMCAT_HOME/webapp/ROOT/WEB-INF/classes 디렉토리 안에 컴파일: $javac HelloServlet.java)
 

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 서블릿 클래스는 주로 HttpServlet 으로부터 상속받아 작성
public class HelloServlet extends HttpServlet {
    // doGET(): GET 요청을 처리, 예외발생 처리
    public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {


        // setContentType(): MIME 타입과 인코딩 기술
        res.setContentType("text/html; charset=UTF-8");
        // PrintWriter: 클라이언트에 내용을 전송
        PrintWriter out = res.getWriter();
        out.println("<html><body>");
        out.println("<h1>Hello Servlet!</h1>");
        out.println("</body></html>");
    }
}


servlet 은 반드시 public 으로 정의되어야 하며 HttpServlet을 상속받아야 합니다.

그리고 doGet 이나 doPost 를 재정의 하여 서블릿을 구현해야 합니다.

 

서블릿 실행시에는 대소문자를 구별한 클래스 이름을 사용하고, 확장자는 사용하지 않습니다.
http://localhost:8080/servlet/Hello 에서 페이지를 확인합니다.

 

HTTP 404 에러

 

서블릿을 실행했을 때 페이지를 찾을 수 없다는 오류가 난다면,

ROOT/WEB-INF/web.xml 에 servlet 이 지정되지 않았거나 url 패턴이 일치하지 않기 때문입니다.

위 서블릿 실행할 수 있도록 접근 방법을 지정합니다.

 

# vi web.xml

 

<servlet>
        <servlet-name>Ex1</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
        <servlet-name>Ex1</servlet-name>
        <url-pattern>/servlet/Hello</url-pattern>
</servlet-mapping>

 

 

위 예는 http://domain/servlet/Hello (url-pattern) 으로 접근할 경우,

/WEB-INF/classes 디렉토리의 HelloServlet (servlet-class) 클래스를 실행하라고 지정한 것입니다.

 

* Tomcat 재시작
- class 나 DD(web.xml) 파일이 변경됐을 경우 tomcat 을 재시작해야 적용이 됩니다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret