HTTP 응답 메시지는 주로 다음 내용을 담아서 전달합니다.
요청 데이터와 비슷하게 크게 세가지로 볼 수 있습니다.
hello.servlet.web.response.ResponseHtmlServlet
package hello.servlet.basic.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet (name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-Type: text/html;charset=utf-8 //...1
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
//...2
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>안녕?</div>");
writer.println("</body>");
writer.println("</html>");
}
}
Content-Type을 text/html로 보낼거고, 인코딩 정보는 charset=utf-8로 보낼겁니다.
response.setContentType("text/html");
웹 브라우저가 똑똑해서 없어도 정상적으로 동작하기도 하지만 정석적으로 써주는게 맞습니다.
response.setCharacterEncoding("utf-8");
이렇게 서블릿으로 HTML을 렌더링 할 때는 직접 작성을 해야합니다.
자바 코드니까 if문 등을 넣어서 로직을 바꾸면 동적으로 생성할 수 있습니다.
http://localhost:8080/response-html 실행하면 문자가 화면에 출력됩니다.
문자로 보이지만 실제로는 HTML 소스로 되어있다는 것을 알 수 있습니다. 페이지 소스보기를 사용하면 결과 HTML을 확인할 수 있습니다.