Servlet 작성방법 3

JOY·2022년 1월 6일
0

[Java] Servlet

목록 보기
3/9
post-thumbnail

📌 Servlet 작성방법 3


서블릿의 기본 작성법, 라이프 사이클을 통해 웹의 동작을 이해하자!

1. Servlet 3.0 spec 미만 에서 사용하는 방법

실습
Servlet 2.5 spec 으로 exam25 이라는 프로젝트 생성
해당 프로젝트에 1부터 10까지 출력하는 TenServlet 작성
http://localhost:8080/exam25/ten 으로 동작하도록 설정

  • Dynamic web module version 2.5 프로젝트 생성

❓ Generate web.xml deployment descriptor
3.0 미만 버전이기 때문에 web.xml이 필수로 체크되어 있는 것을 확인

  • exam31 프로젝트의 3.1 버전과는 다르게 web.xml 파일이 생긴 것을 확인할 수 있음

  • web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>exam25</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>
  • Servlet 생성

  • 서블릿 파일을 요청할 때 지정할 서블릿 이름을 Ten 으로 하기 위해 수정

  • doGet 메서드만 사용

  • TenServlet.java 생성

3.0 이상의 버전과는 다르게 @WebServlet("/Ten") 어노테이션이 없는 것을 확인할 수 있음

package exam;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TenServlet
 */
public class TenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TenServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

}

  • Servlet을 생성하고 나니 web.xml에 아래와 같은 새로운 Servlet 코드가 추가된 것을 확인할 수 있음
  <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>

❗ URL에 /Ten 이라고 요청이 들어오면
<servlet-mapping> 태그에서
<servlet-name> 이라는 element를 확인 후
<servlet> 태그에서 동일한 <servlet-name>을 찾고
실제 서블릿이 담겨있는 exam이라는 패키지 안에 TenServlet을 실행시킨다

  • 응답 처리
    HttpServletRequest : 클라이언트가 요청
    HttpServletResponse : 서버가 응답
  • setContentType()을 이용해 클라이언트에 전송할 데이터 타입 설정
/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
					throws ServletException, IOException {
	response.setContentType("text/html;charset=utf-8");
	//printWriter 객체 리턴받음
	PrintWriter out = response.getWriter();
	out.println("<h1>1-10까지 출력</h1>");
	for(int i=1; i<=10; i++) {
		out.print(i + "<br>");
	}
	out.close();
}

📍 출력 하기

  • /Ten
  • URL을 다른 주소로 변경하고 싶다면 web.xml 에서 <url-pattern> 을 변경
    변경 : /Ten 👉 /TTT
    web.xml 이 변경 된다면 Server 는 반드시 Restart
<servlet-mapping>
    <servlet-name>TenServlet</servlet-name>
    <url-pattern>/TTT</url-pattern>
  </servlet-mapping>

📍 출력 하기

  • /TTT로 변경된 것을 확인할 수 있음

  • /Ten 으로 출력시 404 에러
    web.xml<servlet-mapping> 그 어디에도 /Ten을 찾을 수 없기 때문

profile
Just Do IT ------- 🏃‍♀️

0개의 댓글