서블릿이 하는 역할은 크게 3가지 라고 볼수 있다
1. 요청받기 (HTTP method GET/POST 요청에 따른 parameter로 전달 받은 데이터를 꺼내올 수 있다.)
2. 비즈니스 로직(DB접속과 CRUD에 대한 로직 처리 -> 서비스를 호출하는 쪽으로 해결(MVC)
3. 응답하기 (문자열로 동적인 웹(HTML 태그)페이지를 만들어서 스트림을 이용하여 내보내기)
기본 값은 test/plain이지만 html 태그를 사용하면 text/html도 응답으로 수행 가능하도록
헤더 설정이 되어 있기 때문에 text/html로 인식을 하게 된다.
하지만 명시적으로 text/plain으로 설정하게 되면 html 태그를 태그로 인식하지 않고 문자열로 인식하게 된다.
Response 응답 확인하기
html )
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Response</title>
</head>
<body>
<h1 align="center">Response</h1>
<ul>
<li><a href="response">응답확인하기</a></li>\
<ul>
</body>
</html>
Servlet )
@WebServlet("/response")
public class ResponseTestServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// response.setContentType("text/plain");
response.setContentType("text/html");
/* 응답 시에도 별도로 인코딩을 지정하지 않으면 기본적으로 설정 된 인코딩방식(ISO-8859-1)
* 따라서 한글로 페이지를 응답하는 경우 글씨가 깨져서 나오게 된다.
* */
System.out.println("defualt response encoding : " + response.getCharacterEncoding());
/*이때 응답한 인코딩 방식이 UTF-8임을 응답 헤더에 알려주게 되면
* 브라우저가 이를 해석할때 UTF-8로 인식하고 해석하게 된다.
* 즉, 한글값이 깨지지 않는다
* 주의할 점은 반드시 getWriter()로 스트림을 얻어오기 전에 설정해야 한다.
* */
response.setCharacterEncoding("UTF-8");
System.out.println("changed response encoding : " + response.getCharacterEncoding());
/* 참고로 위의 두 개의 설정을 한 번에 할 수 있다.*/
// response.setContentType("text/html; charset=UTF-8");
/* 사용자가 브라우저에 응답하기 위해 HTTPServletResponse가 가지는 getWriter()메소드로
* PrintWriter 인스턴스를 반환 받는다. PrintWriter는 BufferedWriter와 형제격인 클래스 이지만
* 더 많은 형태의 생성자를 제공하고 있어서 실제로는 범용성으로 인해 더 많이 사용된다.
* */
PrintWriter out = response.getWriter();
/*문자열을 이용해 사용자에게 내보내기를 할 페이지를 작성한다.*/
StringBuilder responseBuilder = new StringBuilder();
responseBuilder.append("<!doctype html>\n")
.append("<html>\n")
.append("<head>\n")
.append("</head>\n")
.append("<body>\n")
.append("<h1>안녕 servlet response</h1>\n")
.append("</body>\n")
.append("</html>");
/* 스트링을 이용해 내보내기 */
out.print(responseBuilder.toString());
/* 버퍼에 잔유한 데이터를 강제로 내보낸다. */
out.flush();
/* 자원을 반납한다.*/
out.close();
}
}
'백엔드 과정 > Servlet' 카테고리의 다른 글
[Servlet] cookie와 session (0) | 2022.03.07 |
---|---|
[Servlet] sendRedirect VS RequestDispatcher (0) | 2022.03.06 |
[Servlet] GET/POST 방식에 따른 서블릿 메소드 (0) | 2022.03.05 |
[Servlet] 서블릿 라이프 사이클 (0) | 2022.03.04 |
[Servlet] 서블릿 개요 (0) | 2022.03.04 |