[Servlet 2-1] 어노테이션(Annotation)

임승현·2022년 11월 29일
0

Servlet

목록 보기
3/14

◈ 서블릿을 좀더 쉽게 만드는 방법

1. Package 오른쪽 클릭 → New → Servlet 클릭

2. Class name 설정 → next

3. /FirstServelt 더블블릭 → Pattern 수정 → Next

4. service 체크 → Finish

🐧어노테이션(Annotation)

📌 어노테이션(Annotation) : API 문서에 특별한 설명을 제공하기 위해 만들어진 기능
→ 프로그램 작성에 필요한 특별한 의미를 제공하거나 실행에 필요한 기능 제공

📌@WebServlet : 서블릿 클래스를 서블릿으로 등록하고 URL 주소를 매핑하기 위한 어노테이션
→ [web.xml] 파일의 servlet 엘리먼트와 servlet-mapping 엘리먼트가 제공하는 기능과 동일한 효과 제공
◈ @WebServlet 어노테이션의 속성을 사용하여 서블릿 이름과 요청 URL 주소 설정
→ name 속성 : 서블릿의 이름을 속성값으로 설정 - 속성 설정을 생략하면 클래스명을 서블릿 이름으로 자동 설정
→ value 속성 : 요청 URL 주소를 속성값으로 설정(필수) - 다른 속성이 없는 경우 속성값만 설정 가능

//@WebServlet(name = "first",value = "/first.itwill")
@WebServlet("/first.itwill")

📌 클라이언트의 모든 요청방식에 의한 요청을 처리하기 위해 자동 호출되는 메소드 - 요청 처리 메소드
→ 클라이언트 요청에 대한 처리 명령과 응답결과를 생성하기 위한 명령 작성

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

📌 클라이언트에게 응답할 결과에 대한 파일형식과 응답파일을 생성하기 위한 출력스트림을 반환받아 저장
→ 클라이언트 요청에 대한 응답결과를 파일로 생성하지 않을 경우 생략 가능 - 클라이언트에게 URL 주소로 응답

response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();

📌 요청에 대한 처리와 응답을 위한 결과 파일 생성
→ 서블릿은 모든 클라이언트에게 일관성 있는 처리결과를 동적으로 생성하여 제공

Date now=new Date();//서버 시스템의 날짜와 시간 저장된 Date 객체 생성

📌 날짜와 시간 관련 패턴정보가 저장된 SimpleDateFormat 객체 생성

SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");

📌 SimpleDateFormat 객체의 format() 메소드를 호출하여 매개변수로 전달받은 Date 객체를 SimpleDateFormat 객체에 저장된 패턴의 날짜와 시간 형식의 문자열로 변환하여 반환

String displayNow=dateFormat.format(now);

📃FirstServlet.java

package xyz.itwill.servlet;
//
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
//
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//
//어노테이션(Annotation) : API 문서에 특별한 설명을 제공하기 위해 만들어진 기능
//→ 프로그램 작성에 필요한 특별한 의미를 제공하거나 실행에 필요한 기능 제공
//-----------------------------------------------------------------------------
//@WebServlet : 서블릿 클래스를 서블릿으로 등록하고 URL 주소를 매핑하기 위한 어노테이션
//→ [web.xml] 파일의 servlet 엘리먼트와 servlet-mapping 엘리먼트가 제공하는 기능과 동일한 효과 제공
//@WebServlet 어노테이션의 속성을 사용하여 서블릿 이름과 요청 URL 주소 설정
//→ name 속성 : 서블릿의 이름을 속성값으로 설정 - 속성 설정을 생략하면 클래스명을 서블릿 이름으로 자동 설정
//→ value 속성 : 요청 URL 주소를 속성값으로 설정(필수) - 다른 속성이 없는 경우 속성값만 설정 가능
//@WebServlet(name = "first",value = "/first.itwill")
@WebServlet("/first.itwill")
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	//
	//클라이언트의 모든 요청방식에 의한 요청을 처리하기 위해 자동 호출되는 메소드 - 요청 처리 메소드
	//→ 클라이언트 요청에 대한 처리 명령과 응답결과를 생성하기 위한 명령 작성
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//클라이언트에게 응답할 결과에 대한 파일형식과 응답파일을 생성하기 위한 출력스트림을 반환받아 저장
		//→ 클라이언트 요청에 대한 응답결과를 파일로 생성하지 않을 경우 생략 가능 - 클라이언트에게 URL 주소로 응답
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		//
		//요청에 대한 처리와 응답을 위한 결과 파일 생성
		//→ 서블릿은 모든 클라이언트에게 일관성 있는 처리결과를 동적으로 생성하여 제공
		Date now=new Date();//서버 시스템의 날짜와 시간 저장된 Date 객체 생성
		//
		//날짜와 시간 관련 패턴정보가 저장된 SimpleDateFormat 객체 생성
		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
		//
		//SimpleDateFormat 객체의 format() 메소드를 호출하여 매개변수로 전달받은 Date 객체를 SimpleDateFormat 객체에 저장된 패턴의 날짜와 시간 형식의 문자열로 변환하여 반환
		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("<script type='text/javascript'>");
		out.println("setInterval(function() { location.reload(); }, 1000);");
		out.println("</script>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>서블릿 시계</h1>");
		out.println("<hr>");
		out.println("<p>"+displayNow+"</p>");
		out.println("</body>");
		out.println("</html>");
	}
}

0개의 댓글