WebServer/JSP&Servlet

[Servlet] Servlet 요청 및 응답 처리

gangintheremark 2023. 8. 9. 23:31
728x90

요청 및 응답처리

서블릿 컨테이너서블릿 객체를 생성하고 실행하는 과정에서 다양한 객체들을 생성하여 서블릿 객체에 제공하는데, 서블릿 프로그램에서 가장 핵심 객체는 HttpServletRequestHttpServletResponse 객체이다.

  • HttpServletRequest : 요청 처리 담당
  • HttpServletResponse : 응답 처리 담당

HttpServletRequest 객체 활용

메서드 기능
String  getParameter(String name) 사용자가 입력한 파라미터 중에서 name에 해당하는 파라미터 값 리턴
String[ ]  getParameterValues(String name) 하나의 name을 통해 전달된 여러 개의 값을 배열로 리턴
(checkbox, radio 태그와 같이 여러 값을 가지는 경우에 주로 사용)
Enumeration<String>  getParameterNames() 사용자가 전달한 파라미터들의 name 목록을 리턴
void  setAttribute(String name, Object value) ServletRequest에 데이터 등록
Object  getAttributes(String name) ServletRequest에 등록된 데이터 리턴
void  removeAttributes(String name) ServletRequest에 등록된 데이터 삭제
void  setCharacterEncoding(String encoding) message-body에 포함된 문자 데이터에 대한 인코딩 설정
(POST방식으로 요청받은 경우 "utf-8" 설정하여 한글처리)
ServletContext  getServletContext() 서버가 구동되는 순간 웹 애플리케이션당 하나씩 생성되는
ServletContext 객체 리턴
RequestDispatcher  getRequestDispatcher(String path) 브라우저의 요청을 특정 경로(path)로 이동하기 위한 객체 리턴 
(forward 용도)
String  getHeader(String headerName) headerName에 해당하는 헤더 값을 리턴
Cookie[ ]  getCookies() 브라우저가 전송한 쿠키 정보를 배열로 리턴
HttpSession  getSession() 브라우저와 매핑된 세션 객체 리턴. 없으면 새로 생성하여 리턴
String  getRequestedSessionId() 브라우저와 매핑된 세션의 아이디 리턴

 

Servlet 요청 처리

html의 사용자 입력 태그에 값을 지정하고 submit 버튼을 선택하면 서버에 파라미터가 전달된다. 요청받은 Servlet은 HttpServletRequest 객체의 메서드를 사용하여 요청 파라미터 값을 얻을 수 있다.

 

실행 순서

1. 사용자 입력 태그를 가진 html(jsp) 작성

<form action="서블릿매핑" method="get|post">
// loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>로그인화면(GET 방식)</h2>
<form action="login" method="get">
아이디 : <input type="text" name="userid"><br>
비번 : <input type="text" name ="passwd"><br>
<input type="submit" value="로그인">
</form>

<h2>로그인화면(POST 방식)</h2>
<form action="login" method="post">
아이디 : <input type="text" name="userid"><br>
비번 : <input type="text" name ="passwd"><br>
<input type="submit" value="로그인">
</form>
</body>
</html>

2. 사용자 입력 값을 얻기 위한 서블릿 작성

String s = request.getParameter("tag의 name값");
String[] arr = request.getParameterValues("tag의 name값"); // checkbox 에서 주로사용
  • GET 방식으로 요청한 경우에는 한글이 안 깨짐
  • POST 방식으로 요청한 경우에는 한글이 깨져서 request.setCharacterEncoding("utf-8"); 사용
package com.servlet;

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


@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("LoginServlet.doGet");

            // 사용자 입력 데이터 얻기
            String userid = request.getParameter("userid");
            String passwd = request.getParameter("passwd");

            System.out.println(userid + "\t" + passwd);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("LoginServlet.doPost");
        request.setCharacterEncoding("utf-8");

        // 사용자 입력 데이터 얻기
        String userid = request.getParameter("userid");
        String passwd = request.getParameter("passwd");

        System.out.println(userid + "\t" + passwd);
    }
}

HttpServletResponse 객체 활용

메서드 기능
void  setContentType(String type) 응답 메시지의 데이터형식(MIME 타입) 설정
PrintWriter  getWriter() HTTP 응답 프로토콜 message-body와 연결된 출력 스트림 리턴
(HTML을 브라우저에 출력하기 위해 I/O를 얻는 용도)
void  addCookie(Cookie cookie) 쿠키(cookie) 생성
void  sendRedirect(String path) 요청한 브라우저가 path에 해당하는 화면을 다시 요청(redirect)하도록 지정

 

Servlet 응답처리

클라이언트에서 Servlet으로 요청을 하면 Servlet은 실행한 결과를 html 형식으로 작성하여 웹 브라우저에게 전송한다. 이러한 응답 처리를 담당하는 API는 HttpServletResponse 객체이고 MIME 타입 및 자바의 I/O를 사용하여 구현할 수 있다.

💡 MVC 패턴 적용시, 응답처리는 JSP가 담당한다

 

처리순서

1. MIME (Multipurpose Internet Mail Extensions) 타입 설정

서버는 클라이언트에게 처리할 데이터의 종류를 MIME 타입을 통해 알려준다.

MIME 타입 설명
text/plain 일반 문자열로 처리
text/html html로 처리
text/html; charset=utf-8 html로 처리 및 한글 처리
response.setContentType("MIME타입");

2. 출력 스트림 생성

Servlet 및 JSP를 활용한 응답처리는 자바 I/O (Input/Output) 기술을 이용한다. 따라서 자바의 출력스트림을 위해 getWriter() 메서드를 이용한 PrintWriter객체를 사용할 수 있다.

PrintWriter out = response.getWriter();

3. 데이터 출력

out.print("html코드");
package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Test")
public class Test extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 응답처리
        // 1. MIME 타입 지정
        response.setContentType("text/html;charset=utf-8");

        // 2. java I/O 얻기
        PrintWriter out = response.getWriter();

        // 3. 출력
        out.print("<html><head>");
        out.print("<meta charset=\"UTF-8\">");
        out.print("<title>Insert title here</title>");
        out.print("</head>");
        out.print("<body>");
        out.print("<h1>hello, Servlet 실습</h1>");
        out.print("</body></html>");
    }
}

Servlet 요청 URL: http://IP:포트주소/컨텍스트명/서블릿매핑명

 

 

 

 

 

 

728x90