동적인 처리를 하는 프로그램의 역할을 맡고 있다.
http://localhost:8080/{projectName}/{URL Mapping 값} 위 규칙에 따라 servlet이 실행된다.
web이 get method로 요청을 보낼 때doGet() method를 사용한다.
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
private String message;
public void init() {
message = "Hello World!";
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=URF-8");
// Hello
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
}
public void destroy() {
}
}
response.setContentType("text/html;charset=URF-8"); 응답 결과를 보내는데, html의 형식으로 utf-8을 사용해서 보낼 것이라고 정의해주는 코드이다.
Servlet은 서버에 객체를 여러개 만들지 않는다. 요청된 객체가 메모리에 존재한다면, 서비스만 호출한다.
동일한 Servlet은 항상 1개의 객체만 존재한다.

특정 Servlet(ex. helloServlet)에 service메소드가 작성되지 않았다면, HttpServlet의 service메소드가 오버라이딩된다.
HttpServlet의 service 메소드는 템플릿 메소드 패턴으로 구현된다.
WAS는 웹 브라우저로부터 Servlet요청을 받으면,
- 요청할 때 가지고 있는 정보를 HttpServletRequest 객체를 생성하여 저장
- 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse 객체를 생성
- 생성된 HttpServletRequest, HttpServletResponse를 서버에 전달한다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>form</title></head>");
out.println("<body>");
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
out.println(headerName + " : " + headerValue + " <br> ");
}
out.println("</body>");
out.println("</html>");
}
request 객체로 어떤 요청을 보냈는지 request.getHeaderNames()으로 헤더 이름을 알 수 있고, request.getHeader(headerName) 로 헤더의 value를 알 수 있다.
URL 주소의 파라미터를 읽어 보자.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>form</title></head>");
out.println("<body>");
String name = request.getParameter("name");
String age = request.getParameter("age");
out.println("name : " + name + "<br>");
out.println("age : " +age + "<br>");
out.println("</body>");
out.println("</html>");
}
request.getParameter("name") 를 사용하면 name param의 value값을 가져올 수 있다.
이때, 파라미터는 항상 String 형태로 받아야 한다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>info</title></head>");
out.println("<body>");
String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();
String contentPath = request.getContextPath();
String remoteAddr = request.getRemoteAddr();
out.println("uri : " + uri + "<br>");
out.println("url : " + url + "<br>");
out.println("contentPath : " + contentPath + "<br>");
out.println("remoteAddr : " + remoteAddr + "<br>");
out.println("</body>");
out.println("</html>");
}
