*모든 실습은 eclipse에서 진행되고 있습니다.
1 . Servlet 3.0 spec 이상에서 사용하는 방법
*어노테이션(annontation): 자바에서 사용될 때의 어노테이션은 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터(meta data: 데이터를 위한 데이터)라고 볼 수 있다.
@WebServlet("/ten")
public class TenServlet extends HttpServlet {
...
}
2 . Servlet 3.0 spec 미만에서 사용하는 방법
<servlet>
<description></description>
<display-name>TenServlet</display-name>
<servlet-name>TenServlet</servlet-name>
<servlet-class>exam.TenServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TenServlet</servlet-name>
<url-pattern>/ten</url-pattern>
</servlet-mapping>
<servlet>
에서 servlet-name이 일치하는지 확인, servlet-clas 실행
@WebServlet("/LifecycleServlet")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifecycleServlet() {
System.out.println("LifecycleServlet 생성!!");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init 호출!!");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("get 메소드 호출!!");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("post 메소드 호출!!");
}
public void destroy() { //서블릿 소멸
System.out.println("destroy 호출!!");
}
}
- service() 메소드는 특정 HTTP 요청을 처리하는 메소드(doGet(), doPost() 등)를 호출함
- 어떤 요청이 올지 모르겠다 하면 service()를 사용할 수 있고, 들어올 요청에 따라 doGet(), doPost()을 오버라이딩하면 된다.
if (메모리에 없음){ 해당 서블릿 클래스를 메모리에 올림 init() 메소드로 초기화 }else{ service() 메소드를 실행 }
- 재갱신, 종료시 destroy() 메소드 실행
- Servlet 객체를 생성하고 초기화하는 작업은 비용이 많은 작업임, 다음 요청을 대비해 Servlet 객체를 메모리에 남겨둠
- 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어들이는 메소드 포함
- Body의 Stream을 읽어 들이는 메소드들을 가지고 있다.
대표적인 메소드
- getParameter(“String”) : 사용자가 입력한 String 타입 파라미터를 리턴한다.
- getParameterValues(“String”) : 사용자가 입력한 String 타입 파라미터를 통해 전달된 여러 개의 값을 리턴한다.
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위해 HttpServletResponse 객체를 생성하여 서블릿에게 전달한다.
- 해당 응답 객체는 content type, 응답코드, 응답 메시지 등을 전송한다.
대표적인 메소드
- getWriter() : html 파일을 생성하여 응답할 수 있다.
- setContentType(“text/html”) : 응답 파일 타입 설정할 수 있다.
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>");
}
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>");
}
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(); //URI 요청
StringBuffer url = request.getRequestURL(); //URL 요청
String contentPath = request.getContextPath(); //ContextPath 요청
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>");
}
Reference: