@ : 어노테이션(Annotation)
- PI 문서에 특별한 설명을 제공하기 위해 만들어진 기능이다.
- 프로그램 작성에 필요한 특별한 의미를 제공하거나 실행에 필요한 정보를 제공하는 기능을 갖는다.
@WebServlet : 서블릿 클래스를 서블릿으로 등록하고 URL 패턴을 매핑하기 위한 어노테이션
- [web.xml] 파일의 servlet 엘리먼트와 servlet-mapping 엘리먼트로 제공하는 기능과 동일하다.
- @WebServlet 어노테이션 속성을 이용하여 서블릿의 이름과 URL 패턴 매핑을 설정할 수 있다.
* name 속성 : 서블릿의 이름을 속성값으로 설정 (속성을 생략하면 자동으로 클래스이름을 서블릿의 이름으로 설정한다.)
* value 속성 : 서블릿을 요청하기위한 URL 패턴을 속성값으로 설정 (생략 불가능. 필수)
하지만, value 속성 외 다른 속성이 없는 경우에는 속성값만 설정 가능.(-> 아래의 예제에서 "/Frist.itwill"이 value 속성만 존재하여 속성값만 설정한 것이다.)
protected void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
클라이언트 요청에 의해 자동 호출되는 메소드이다. (= 요청 처리 메소드(GET, POST, Service))
클라이언트 요청에 대한 처리 명령과 응답될 실행결과를 저장한 파일을 생성하는 명령을 작성한다.
<요청처리 메소드 속에서의 진행>
1. 먼저 클라이언트에게 줄 요청에 대한 실행결과를 저장할 공간이 필요하다. 따라서, 파일형태 변경 및 응답파일을 생성하기 위한 출력스트림을 반환받아 저장한다.
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
(클라이언트에게 URL 주소로 응답할 경우, 응답파일로 제공하지 않으므로 위의 두 코드는 생략가능하다.)
2. 요청에 대한 처리 명령 및 처리결과를 저장할 응답파일들을 생성한다.
서블릿은 모든 클라이언트에게 "일관성있는 동일한 처리결과"를 "동적"으로 생성하여 제공한다. (클라이언트가 어느나라에서 있던 상관없다.)
서블릿의 가장 큰 단점이 나오는데,
자바를 이용해서 HTML까지 모두 응답파일로 만들어야 한다는 것이다. 그 과정이 생각보다 어렵고 복잡하다.ㅠㅠ
예시
@WebServlet("/first.itwill")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//요청 처리 메소드
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//요청에 대한 처리 명령 및 처리결과를 저장할 응답파일 생성
//서버 플렛폼의 현재 날짜와 시간이 저장된 Date 객체 생성
Date now=new Date();
//날짜와 시간에 대한 패턴정보를 저장한 SimpleDateFormat 객체 생성
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
String displayNow=dateFormat.format(now);
//실행결과를 저장한 응답파일 생성
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("<style type='text/css'>");
out.println("p {");
out.println("width: 600px;");
out.println("margin: 0 auto;");
out.println("padding: 30px 0;");
out.println("font-size: 2em;");
out.println("font-weight: bold;");
out.println("text-align: center;");
out.println("border: 2px solid black;");
out.println("}");
out.println("</style>");
out.println("</head>");
out.println("<body>");
out.println("<h1>서블릿 시계</h1>");
out.println("<hr>");
out.println("<p>"+displayNow+"</p>");
out.println("<script type='text/javascript'>");
out.println("setInterval(function() {");
out.println("location.reload();");
out.println("}, 1000);");
out.println("</script>");
out.println("</body>");
out.println("</html>");
}
}
'Web > Servlet' 카테고리의 다른 글
Servlet 정의 (0) | 2023.06.19 |
---|