WebServer/JSP&Servlet
[Servlet] Servlet 요청 및 응답 처리
gangintheremark
2023. 8. 9. 23:31
728x90
요청 및 응답처리
서블릿 컨테이너는 서블릿 객체를 생성하고 실행하는 과정에서 다양한 객체들을 생성하여 서블릿 객체에 제공하는데, 서블릿 프로그램에서 가장 핵심 객체는 HttpServletRequest
와 HttpServletResponse
객체이다.
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