'Programming/Servlet'에 해당하는 글 9건

폼 데이터 처리

♣ contact.html
<form method="post" action="/servlet/Contact">
이름 <input type="text" name="name" /><br />
메일 <input type="text" name="email" />
...

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

public class Contact extends HttpServlet {

    // get 요청시
    public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
        process(req, res);
    }
    // post 요청시
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
        process(req, res);
    }

    public void process(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {

 

        // client에 전송된 요청의 MIME charset을 지정
        req.setCharacterEncoding("UTF-8");

        // client에 전송될 응답의 content-type을 지정 (getWriter 전에 호출되어야 함)
        res.setContentType("text/html;charset=UTF-8");
        // client에 character text를 전송할 수 있도록 PrintWriter 객체 반환
        PrintWriter out = res.getWriter();
                
        // 요청 파라미터의 값을 문자열로 반환
        String name = req.getParameter("name");
        String email = req.getParameter("email");

        out.println("<a href='mailto:" + email + "'>" + name + "</a>");
    }
}


HttpServletRequest 객체의 getParameter 메소드로 GET 이나 POST 로 전달된 파라미터 값을 전달 받을 수 있음.

 

♣ 컴파일 - javac Contact.java


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

,

서블릿은 자바처럼 패키지 형태로 관리할 수 있으며, 많은 서블릿을 쉽게 관리할 수 있습니다.
패키지 형태의 서블릿을 작성하는 방법은 코드 첫 줄에 패키지 선언만 추가 하면 됩니다.
마찬가지로 classes 디렉토리에서 파일을 작성합니다.

 

# vi HelloPackageServlet.java

package com.oops4u.study;

 

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

 

public class HelloPackageServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {

        PrintWriter out = res.getWriter();
        out.println("<h1>Hello Package Servlet!</h1>");
    }
}

 

class 파일을 상단에 명시한 패키지 디렉토리에 생성하기 위해 -d 옵션과 함께 컴파일 합니다.

 

# javac -d . HelloPackageServlet.java

 

패키지 디렉토리가 정상적으로 생성되었는지 확인해 봅니다.

classes/com/oops4u/study/HelloPackageServlet.class

컴파일 확인 후에는 마찬가지로 web.xml 파일에 서블릿이 실행될 수 있도록 맵핑을 추가합니다.

 

<servlet>
    <servlet-name>Package Ex</servlet-name>
    <servlet-class>com.oops4u.study.HelloPackageServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Package Ex</servlet-name>
    <url-pattern>/Servlet/HelloPackage</url-pattern>
</servlet-mapping>

 

웹브라우저로 접속하여 확인합니다.

http://domain:8080/servlet/HelloPackage


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

,

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
손가락귀신
정신 못차리면, 벌 받는다.

,

Servlet은 웹서버에서 실행되는 Java 어플리케이션 입니다.
Servlet을 사용하는 이유는 웹어플리케이션을 MVC 모델로 개발하기 위함(?)쯤으로 생각하면 되겠습니다.

 


1. Servlet Container / compiler 설치

  • Container : 서블릿, jsp에 대한 요청에 응답하거나, 서블릿을 관리하기 위해 필요. (tomcat, resin...)
  • 서블릿을 컴파일하기 위해 JDK 설치
  • tomcat/JDK 설치 바로가기
  • 톰캣을 설치하였으면 앞으로 개발하는 서블릿들을 웹브라우저로 확인할 수 있습니다.


2. Servlet 요청 처리 순서

  • 클라이언트는 웹서버로 서블릿 요청.
  • 웹서버는 서블릿 컨테이너에게 위임.
  • 서블릿 컨테이너는 서블릿 처리 후 웹서버로 전달.
  • 웹서버는 서블릿 결과를 클라이언트에게 전달.


3. 톰캣 어플리케이션

Tomcat Home
         └─ webapps
                     └─ Application1
                                   ├─ index.jsp
                                   └─ WEB-INF
                                               ├─ web.xml
                                               └─ classes

  • tomcat 에서 webapps 하위의 디렉토리들이 각각 하나의 웹 어플리케이션입니다.
    http://domain/Application1
    http://domain/Application2
    ...
  • webapps 하위의 ROOT 어플리케이션은 홈 디렉토리입니다.
  • 각 웹 어플리케이션은 WEB-INF/web.xml 파일이 존재해야 합니다.
  • 이러한 구조는 tomcat_home/conf/context.xml 파일에 정의되어 있습니다.


WEB-INF - 이 디렉토리는 웹에서 직접 접근이 불가능하며, 서블릿은 classes 디렉토리에 위치.
web.xml - 해당 웹 어플리케이션의 환경 설정 파일 (DD: Deployment Descriptor). 이 파일에서 url mapping 을 명시함. (http://domain/A 로 요청했을 때, classes 디렉토리의 B 서블릿이 동작하는 등의 작업을 명시)


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

,