Web

JSP와 Servlet 값 주고 받기 (GET/POST)

kakaroo 2022. 2. 1. 14:51
반응형

article logo

 

Servlet은

서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램입니다. Servlet은 Java코드 안에 HTML태그가 삽입되며 자바언어로 되어있다. 확장자가 .java 입니다.
서블릿의 단어는 Server + Let의 합성어라고 알고 있는 사람도 있고 Server + Applet으로 알고 있는 사람도 있다. 사실 둘다 어려운 느낌이다. 하지만 쉽게 풀어보면 '클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 servlet 클래스의 구현 규칙을 지킨 자바프로그램'이라고 이해하면 좋을 듯하다.
Servlet은 자바언어를 웹어플리케이션에 조금 더 개발하기 쉽게 하기 위해 만든 API(라이브러리, 클래스 들)이며 이 규약에 맞는 라이브러리나 클래스들을 상속 및 구현하여 만든 클래스들을 서블릿이라고 한다.

 

JSP는

Java 언어를 기반으로 하는 Server Side 스크립트 언어입니다. HTML을 코딩하기 너무 어렵고 불편해서 HTML 내부에 Java코드를 삽입하는 형식이 JSP입니다. 다시 말해 서블릿의 단점을 보완하고자 만든 서블릿 기반의 스크립트 기술입니다. 서블릿을 이용하게 되면 웹프로그래밍을 할 수 있지만 자바에 대한 지식이 필요하며 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 등 비효율적인 측면들이 있습니다. 때문에 서블릿을 작성하지 않고도 간편하게 웹프로그래밍을 구현하게 만든 기술이 JSP(Java Server Pages)입니다.

 

Servlet과 JSP의 차이을 간단히 정리하면 다음과 같습니다.

 

Servlet
Java 코드 안에 HTML 코드 (하나의 클래스)
data processing(Controller)에 좋음.
DB와의 통신, Business Logic 호출, 데이터를 읽고 확인하는 작업 등에 유용.
Servlet이 수정된 경우 Java 코드를 컴파일(.class 파일 생성)한 후 동적인 페이지를 처리하기 때문에 전체 코드를 업데이트하고 다시 컴파일한 후 재배포하는 작업이 필요. (개발 생산성 저하)
JSP
HTML 코드 안에 Java 코드
presentation(View)에 좋음.
즉, 요청 결과를 나타내는 HTML 작성하는데 유용.
JSP가 수정된 경우 재배포할 필요가 없이 WAS가 알아서 처리. (쉬운 배포)

 

Servlet

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

public ThreeParams extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        response.setContentType("text/html");
        printWriter out = response.getWriter();
        
        String title = "Reading Three Request Parameters";
        String docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
        
        out.println(docType + 
            "<HTML>\n" +
            "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
            "<BODY BGCOLOR=\"#FDF5E6\">\n" +  
            "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + 
            "<UL>\n" + 
            "<LI><B>param1</B>: " + request.getParameter("param1") + "\n" +
            "<LI><B>param2</B>: " + request.getParameter("param2") + "\n" +
            "<LI><B>param3</B>: " + request.getParameter("param3") + "\n" +
            "</UL>\n" +
            "</BODY></HTML>");
        )
    }
}

 

JSP

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Reading Three Request Parameters</TITLE>
<LINK REL=STYLESHEET HREF="JSP-Styles.css" TYPE="text/css">
</HEAD>

<BODY>
<H1>Reading Three Request Parameters</H1>
<UL>
    <LI><B>param1</B>: <%= request.getParameter("param1") %>
    <LI><B>param2</B>: <%= request.getParameter("param2") %>
    <LI><B>param3</B>: <%= request.getParameter("param3") %>
</UL>
</BODY>
</HTML>

 

다음은 JSP와 Servlet이 서로 데이터를 주고 받는 예입니다.

먼저 화면을 보여주는 JSP에서 input 값을 Servlet으로 보내주면 Servlet에서 연산처리를 하여 다시 결과값을 JSP로 돌려주고 JSP에서는 그 결과값을 화면에 출력합니다.

 

1. JSP 수정

<%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Sample JSP</title>
<style>
h1{
    font-size: 16pt;
    background: #AAFFAA;
    padding: 5px;
}
</style>
</head>
<body>
    <h1>JSP Page</h1>
    <p>Result:<%=request.getAttribute("result") %></p>
    <hr>
    <p id="msg">정수 입력:</p>
    <form method="post" action="/mygaeapp">
    <table>
        <tr>
            <td>입력</td>
            <td><input type="text" id="input" name="text1" value="<%=request.getAttribute("input") %>"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="전송"></td>
        </tr>
    </table>
    </form>
</body>
</html>
* JSP form 태그
<form method="post" action="/TestServlet7">  
a. submit을 누르면 action이 가리키는 파일로 이동
b. get (기본값) vs post  
GET POST
보안이 취약합니다.
전송 할 수 있는 데이터는 최대 255자입니다.
post에 비해 처리속도는 빠른 편입니다.
name=value의 형식으로 주소창에 전송됩니다.
서블릿에서는 doGet()을 이용합니다.

URL을 호출할 때마다 doGet 메서드가 호출됩니다.
get에 비해 보안에 더 유리합니다.
전송 할 수 있는 데이터의 양이 무한입니다.
get에 비해 처리속도가 느립니다.
서블릿에서 doPost()를 이용합니다.

doPost는 post 요청에 대해서만 처리할 수 있는 메서드 입니다. 요청이 없을 경우 페이지 로딩시 HTTP ERROR 405가 발생합니다.

2. Servlet 수정

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 = URLDecoder.decode(request.getParameter("text1"), "utf8");
   PrintWriter out = response.getWriter();
   int result = 0;
   try {
       int n = Integer.parseInt(param);
       for (int i = 1; i <= n; i++) {
           result += i;
       }
   } catch (NumberFormatException e) {
       out.println(e);
   }
   request.setAttribute("input", param);
   request.setAttribute("result", result);
   ServletContext app = this.getServletContext();
   RequestDispatcher dispatcher = app.getRequestDispatcher("/index.jsp");
   try {
       dispatcher.forward(request, response);
   } catch (ServletException e) {
       out.println(e);
   }
}

 

3. 실행화면

  10을 입력해서 1부터 10을 더한 55가 result로 응답이 오고, 그 값이 출력됨

입력 전
입력 전
입력 후
입력 후

 

 

source : https://github.com/kakarooJ/WAS_TestProject

 

GitHub - kakarooJ/WAS_TestProject

Contribute to kakarooJ/WAS_TestProject development by creating an account on GitHub.

github.com

 

반응형

'Web' 카테고리의 다른 글

Filter / Cookie / Session (공사중..)  (0) 2022.02.01
JSP - URL mapping  (0) 2022.02.01
Eclipse Dynamic Web Project - 02  (0) 2022.02.01
Eclipse Dynamic Web Project - 01  (0) 2022.02.01
JSP, Servelt, MVC  (0) 2022.02.01