JSP/Servlet | 서블릿과 JSP/HTML | HTML에서 서블릿에 폼 전송


페이지 간의 데이터 교환의 기본이라고 하면 역시 “폼(form)“이다. HTML과 JSP 페이지에 폼을 준비하고, 거기에서 서블릿으로 보내는 것과 같은 방법은 서블릿 이용의 기본이라 할 수 있다.

서블릿에 송신된 폼의 내용을 얻으려면 doGet/doPost 인수에 준비되어 있는 HttpServletRequest 인스턴스를 사용한다. 이 안에 있는 “getParameter” 메소드로 전달된 값을 꺼내 올 수 있다.

String 변수 = request.getParameter(이름);

예를 들어, <input type="text" name="txt1">와 같은 입력 요소라면 getParameter("txt1")으로 지정하여 값을 얻을 수 있다. 얻을 수 있는 값은 모든 String으로 되기 때문에 숫자 등의 값은 필요에 따라 거기에서 변환하여 처리하면 된다.

이 getParameter라는 메소드는 이미 다른 곳에서 본 적이 있을 것이다. JSP 암묵 객체 request의 “getParameter"이다. 이는 단순한 우연이 아니다. 사실을 말하자면, 암시 객체 request는 doGet의 인수로 전달되는 HttpServletRequest의 것이기 때문이다.

JSP는 사실 서블릿이라고 설명 했었다. 이는 JSP의 스크립트도 모든 서블릿으로 변환되는 것이다. 서블릿은 기본적으로 doGet 메소드에서 실행되도록 되어 있다. 여기서 “암묵적 객체"라는 것은 “서블릿으로 변환될 때 미리 준비되어 있는 변수"라는 것을 알 수 있을 것이다.

request와 response라는 암묵적 개체는 doGet 인수 그 자체이다. 또한 out의 암묵적 개체는 response에서 얻은 PrintWriter를 보관하고 있는 변수로 생각할 수 있다. 그렇게 생각하면 JSP에서의 지식이 그대로 서블릿에서도 사용할 수 있음을 알게 될 것이다.

그럼 간단한 사용 예제는 아래와 같다.

index.html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Hello App Engine</title>
    <style>
    h1 {
        font-size: 16pt;
        background: #AAFFAA;
        padding: 5px;
    }
    </style>
</head>
<body>
    <h1>Hello App Engine!</h1>
    <p id="msg">무엇가를 써서 송신해 주세요.</p>
    <form method="post" action="/mygaeapp">
    <table>
        <tr>
            <td>입력</td>
            <td><input type="text" id="input" name="text1"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="송신"></td>
        </tr>
    </table>
    </form>
</body>
</html>

MyGaeAppServlet.java

package com.devkuma.mygaeapp;

import java.io.*;

import javax.servlet.http.*;

@SuppressWarnings("serial")
public class MyGaeAppServlet extends HttpServlet {
    
   public void doGet(HttpServletRequest request, HttpServletResponse response)  throws IOException {
       response.setContentType("text/plain");
       request.setCharacterEncoding("utf8");
       response.setCharacterEncoding("utf8");
       PrintWriter out = response.getWriter();
       out.println("Hello, world!");
   }

   public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
       response.setContentType("text/html");
       request.setCharacterEncoding("utf8");
       response.setCharacterEncoding("utf8");
       String param = request.getParameter("text1");
       PrintWriter out = response.getWriter();
       out.println("<html><head></head><body>");
       out.println("<h1>result</h1>");
       out.println("<p>you typed: " + param + ".</p>");
       out.println("</body></html>");
   }
}

index.html에 간단한 양식을 놓고, 그것을 먼저 만든 MyGaeAppServlet 서블릿에서 수신 결과를 표시하도록 하려고 한다. 아주 간단히 값을 서블릿으로 받아 넘기고 있다는 것을 알 수 있다.