package com.ssafy.hello;
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;
/**
* Servlet implementation class HelloServlet
*/
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 서블릿은 java 파일이기 때문에 text/html 파일로 응답설정
response.setContentType("text/html; charset=UTF-8");
// 이 경우는 웹브라우저에 바로 response를 찍어내는 것
// (manager 클래스에서 println 해버리는 것처럼)
// 웹브라우저에 출력할 스트림을 얻어오는 과정
PrintWriter writer = response.getWriter();
// 이 과정이 웹브라우저에 찍을 응답 메시지들을 response에 담는 것
writer.append("<html>");
writer.append("<head>");
writer.append("<title>Hello</title>");
writer.append("</head>");
writer.append("<body>");
writer.append("<h1>Hello Servlet!</h1>");
writer.append("</body>");
writer.append("</html>");
}
}
어노테이션에 URL 패턴을 적어주고 해당 URL 패턴으로 들어온 요청은 해당 서블릿과 매핑을 시켜준다.
URL( ... / 포트번호 /context path ex.프로젝트명 /요청 ex.HelloServlet)을 통해 들어온 요청이 HelloServlet 이라는 요청이라면, 어노테이션을 보고 해당 서블릿을 찾아 실행시킨다.
매핑? 서블릿과 URL(요청)을 연결시킨다.
WAS가 웹브라우져로부터 Servlet요청을 받으면
1. 요청을 받을 때 전달 받은 정보를 HttpServletRequest객체를 생성하여 저장
2. 웹브라우져에게 응답을 돌려줄 HttpServletResponse객체를 생성(빈 객체)
3. 생성된 HttpServletRequest(정보가 저장된)와 HttpServletResponse(비어 있는)를 Servlet에게 전달
👉요청처리 객체
👉응답처리 객체
package com.ssafy.hello;
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("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 서블릿은 java 파일이기 때문에 text/html 파일로 응답설정
// 응답을 해줄 때는 html로 처리하겠다는 의미
response.setContentType("text/html; charset=UTF-8");
// 이 경우는 웹브라우저에 바로 response를 찍어내는 것
// 따라서 response에 대한 인코딩이 필요한 것
PrintWriter writer = response.getWriter();
writer.append("<html>");
writer.append("<head>");
writer.append("<title>Hello</title>");
writer.append("</head>");
writer.append("<body>");
writer.append("<h1>Hello Servlet!</h1>");
writer.append("</body>");
writer.append("</html>");
}
}
package com.ssafy.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("/FormServlet")
public class FormServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request에 인코딩 방식을 설정
request.setCharacterEncoding("UTF-8");
System.out.println("POST");
System.out.println(request.getParameter("name"));
System.out.println(request.getParameter("age"));
System.out.println(request.getParameter("gender"));
}
}
💡GET방식이든 POST방식이든 정보는 key:value 형태로 들어온다. 따라서 request객체의 메서드인 getParameter(name얘가 키)_ 로 value를 얻을 수 있다.