JSP 서블릿
package example;
/*
* 일반적인 서블릿 개발 과정
* 1. 서블릿 규약에 따라 자바 코드를 작성합니다.
* 2. 자바 코드를 컴파일해서 클래스 파일을 생성합니다.
* 3./WEB-INF/classes 폴더에 클래스 파일을 패키지에 알맞게 위치시킵니다.
* 4.web.xml파일에 서블릿 클래스를 설정합니다.
* 5.톰캣 등의 컨테이너를 실행합니다.
* 6.웹 브라우저에서 확인합니다.
* */
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 서블릿 구현
public class NowServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title>현재시간</title></head>");
out.print("<body>");
out.print("<현재 시간은>");
out.print(new Date());
out.print("입니다.");
out.print("</body></html>");
/*
* 서블릿을 구현할려면 먼저 HttpServlet 클래스를 상속받아야 서블릿으로 동작합니다.
* HttpServlet 클래스를 상속받아야 서블릿으로 동작합니다.
*
* HttpServlet 클래스를 상속받았다면, 처리하고자 하는 HTTP 방식(method) 에 따라 알맞은 메서드를 재정의해서
* 구현해야 합니다.
*
* PrintWriter는 println() 메서드르 제공하는데, 이 메서드를 이용해서 전송할 응답 데이터를 전달합니다.
* println() 메서드에 절달한 데이터는 웹 브라우저에 전송되어 화면에 출력됩니다.
*
*
*
* */
}
}
예를 들어 서블릿이 GET 방식의 요청을 처리해야 한다면 ,
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
여기 처럼 doGet() 메서드를 재정의 하면됩니다. doGet() 메서드는 HttpServletRequest와 HttpServletResponse의 두 파라미터를 갖는데, 이 두 파라미터는 각각 JSP의 request 기본 객체와 response 기본 객체에 해당합니다.
재정의한 메서드는 request를 이용해서 웹 브라우저의 요청 정보를 읽어오던가 response를 이용해서 응답을 전송할 수 있습니다. 응답을 전송하려면 먼저 아래 코드와 같이 response.setContentType() 메서드를 이용해서 응답의 컨텐츠 타입을 지정해야 합니다.
response.setContentType("text/html; charset=utf-8");
위의 예제의 경우 응답 컨텐츠 타입이 text/html 이고 캐릭터 셋이 utf-8이라고 지정하고 있습니다. 여기서 setContentType() 메서드에 전달되는 값은 JSP 에서 page 디렉티브의 contentType 속성값과 동일합니다.
응답의 컨텐츠 타입을 지정했다면, 그 다음으로 할 작업은 실제로 응답 결과를 웹 브라우저에 전송하는 것입니다.
웹 브라우저에 데이터를 전송하려면
PrintWriter out = response.getWriter();
위에 코드와 같이 response.getWriter() 로 문자열 데이터를 출력할 수 있는 PrintWriter를 구해야합니다.
PrintWriter은 어디에 있는것이냐 할수있는데 PrintWriter는 println() 메서드를 제공하는데, 이 메서드를 이용해서 전송할 응답 데이터를 전달합니다.
out.print("<html>");
out.print("<head><title>현재시간</title></head>");
out.print("<body>");
out.print("<현재 시간은>");
out.print(new Date());
out.print("입니다.");
out.print("</body></html>");
web.xml로 매핑하기
서블릿 클래스를 생성했다면, 그다음으로 할 작업은 WEB-INF 폴더의 web.xml 파일에 서블릿 클래스를 등록하는 것입니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet> <!-- 서블릿으로 사용할 클래스 -->
<servlet-name>now</servlet-name>
<servlet-class>example.NowServlet</servlet-class>
</servlet>
<servlet-mapping> <!-- 서블릿과 URL 간의 매핑 -->
<servlet-name>now</servlet-name>
<url-pattern>/now</url-pattern>
</servlet-mapping>
</web-app>
사용할 서블릿을 지정했다면 그 다음으로 할 작업은 해당 서블릿이 어떤 URL을 처리할지에 대한 매핑 정보를 등록하는 것입니다.
<servlet-mapping> 태그를 이용해서 지정합니다.
<servlet-mapping> 태그에서 <servlet-name>은 매핑할 서블릿의 이름을 지정하며, <url-pattern>은 매핑할 URL의 패턴을 지정합니다.
<servlet-mapping> <!-- 서블릿과 URL 간의 매핑 -->
<servlet-name>now</servlet-name>
<url-pattern>/now</url-pattern>
</servlet-mapping>
보면 now라는 이름의 서블릿이 /now 라는 URL 패턴을 처리한다고 지정하고 있습니다. 앞의 코드
<servlet> <!-- 서블릿으로 사용할 클래스 -->
<servlet-name>now</servlet-name>
<servlet-class>example.NowServlet</servlet-class>
</servlet>
NowServlet 클래스를 now라는 이름의 서블릿으로 등록했으므로. 결과적으로 /now 라는 URL을 NowServlet이 처리하게 됩니다.
<url-pattern>은 다음과 같이 한 번 이상을 사용할 수 있습니다. 이 경우 각각의 URL 패턴에 해당 서블릿을 매핑 합니다.
<servlet-mapping>
<servlet-name>now</servlet-name>
<url-pattern>/now</url-pattern>
<url-pattern>/now2</url-pattern>
</servlet-mapping>
서블릿 매핑할 때 사용하는 <url-patten>은 웹 어플리케이션 경로를 제외한 나머지 경로를 기준으로 적용됩니다.