서블릿이란 => 컨테이너(서블릿엔진) 에 의해 관리되는 자바기반 웹 컴포넌트
동적인 웹 컨텐츠 생성을 가능하게 해준다.
전체 요청 URL 주소 : http://localhost:80/servletTest/servletTest01.do
-http ==> 프로토콜
-localhost ==> 컴퓨터이름 또는 도메인명 또는 IP 주소
- 80 ==> PORT 번호 ( 웹은80번이 기본 . 80번일 경우에는 생략가능)
- /servletTest ==> 컨텍스트패스( 보통 지정한 '프로젝트 이름' 으로 지정된다. )
-/servletTest01.do ==> 서블릿 요청 URL 패턴
ServletTest01
예시 1. ) 배포서술자 ( DD Deployment Descroptor ==> web.xml 을 이야기 한다.) 을 이용해서 실행할 Servlet 을 설정하여 처리하는 예제이다.
package kr.or.ddit.basic;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
// -이 영역에는 대부분 service() 메서드 또는 doGet() 메서드나 doPost() 메서드를
// 재정의해서 작성한다.
// doGet() 메서드나 doPost() 메서드는 service() 메서드를 통해서 호출된다.
// HttpServletRequest객체 ==> 서비스 요청에 관련된 정보 및 메서드를 관리하는 객체
// HttpServletResponse 객체 ==> 서비스 응답에 관련된 정보 및 메서드를 관리하는 객체
//doGet() 메서드 ==> GET 방식의 요청을 처리하는 메서드
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//응답 문서의 인코딩 방식 지정
resp.setCharacterEncoding("utf-8");
//응답 문서의 ContentType 지정
resp.setContentType("text/html; charset=utf-8");
//처리한 내용을 응답으로 보내기 위해 PrintWriter 객체 생성
PrintWriter out = resp.getWriter();
//처리한 내용을 출력한다.
// 방법 1 . append() 메서드를 이용한다.
out.append("<html>");
out.append("<head>");
out.append("<meta charset='utf-8>'");
out.append("<title>첫번째 Servlet 연습</title>");
out.append("</head>");
out.append("<body>");
out.append("<h1 style='text-align:center;'>");
out.append("안녕하세요. 첫번째 servlet 프로그램입니다. <br>");
out.append("servlet at : " + req.getContextPath());
out.append("</h1>");
out.append("</body>");
out.append("</html>");
//2줄의 내용을 위해 HTML 전체틀을 만들어야 하는것이 SERVLET 의 단점이다.
}
//doPost() 메서드 ==> POST 방식의 요청 처리하는 메서드
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
-----------------------------------------------------------------------------------------------------
ServletTest02
servlet 과 servlet-mapping 등을 servlet 을 많이 사용하려고 하면 길어진다.
이 예제는 애노테이션은 (@WebServlet) Servlet 버전 3.0 이상에서 사용할 수 있다.
@WebServlet 애너테이션의 속성들
1. name : 서블릿의 이름을 설정한다. ( 기본값 : 빈 문자열 (""))
2. urlPatterns : 서블릿의 URL 패턴의 목록을 설정한다. (기본값 : 빈배열({}))
예) urlPatterns="/url1" 또는 urlPatterns={"/url1"} ==> 패턴이 1개일 경우
예) urlPatterns={"/url1" , "/url2"} ==> 패턴이 2개 이상일 경우
3. value : urlPatterns 와 동일한 기능을 한다.
4. discription : 주석(설명글) 을 설정한다.
ServletTest02
package kr.or.ddit.basic;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// @WebServlet(description="애노테이션을 이용한 서블릿" ,
// urlPatterns={"/servletTest02.do"}) //중요
public class ServletTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8"); //응답 문서의 인코딩 방식 지정
resp.setContentType("text/html; charset=utf-8"); //응답 문서의 Content Type지정
//처리한 내용을 응답으로 보내기 위해 PrintWriter 객체 생성
PrintWriter out = resp.getWriter();
//처리한 내용을 출력한다. ==> 방법2) println 메서드 이용하기
out.println("<html>");
out.println("<head>");
out.println("<meta charset='utf-8'>");
out.println("<title>두번째 Servlet 연습 </title>");
out.println("</head>");
out.println("<body>");
out.println("<h1 style='text-align:center;'>");
out.println("이것은 두번째 Servlet 프로그램입니다. <br>");
out.println("server at : " + req.getContextPath() + "<br>");
out.println("@WebServlet 에너테이션을 이용한 예제입니다.");
out.println("</h1>");
out.println("</body>");
out.println("</html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
<servlet>
<servlet-name>servletTest01</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletTest01</servlet-name>
<url-pattern>/servletTest01.do</url-pattern>
</servlet-mapping>
</servlet-mapping>
(로딩이 안된 경우에는 로딩(객체를 생성한다 ) 을 한다. 이때 init() 메서드가 자동으로 호출된다. )
(Servlet 버전 3.0 이상에서는 애노테이션(@WebServlet) 으로 url 패턴을 설정할 수 있다. (web.xml 로 등록해도 되고, 애노테이션으로 등록해도 되고 )
3. Servlet Container 는 요청을 처리할 개별 쓰레드 객체를 생성하여 해당 서블릿 객체의 service() 메서드를 호출한다. (이때, HttpServletRequest 객체와 HttpServletResponse 객체를 파라미터로 넘겨준다. )
4. service() 메서드는 요청 메서드 타입을 체크하여 적절한 메서드를 호출한다.
(doGet() , doPost() , doPut(), doDelete() 등... )
5. 요청 처리가 완료되면 HttpServletReuest 객체와 HttpServletResponse 객체는 소멸된다.
6. 웹컨테이너로부터 등록되어 있는 서블릿이 제거되는 경우에는 destory() 메서드가 호출된다.
@WebServlet("/servletTest03.do")
public class ServletTest03 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
System.out.println("Servlet : " + this.getServletName() + "에서 init() 메서드를 호출합니다. ");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service()메서드 시작....");
//get 방식과 post 방식에 맞는 메서드 호출하기
//방법1 ==> HttpServlet 의 service() 메서드로 위임하기
super.service(req, resp);
//방법2 ==>클라이언트의 전송방식 (GET, POST 등 ) 을 구분해서 직접 메서드를 호출
String method = req.getMethod();
System.out.println("method => " + method);
if("GET".equals(method)) {
this.doGet(req, resp) ;
}else {
this.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet()메서드 시작....");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<html><head><meta charset='utf-8'</head>"
+ "<body><h1>doGet()메서드처리내용</h1></body></html>");
}
// method 를 입력하지 않으면 기본으로 get 방식이 디폴트다
//<form action="http://localhost/servletTest/servletTest03.do" method="">
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost()메서드 시작....");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<html><head><meta charset='utf-8'</head>"
+ "<body><h1>doPost()메서드 처리내용한 내용입니다.</h1></body></html>");
}
//<a href="http://localhost/servletTest/servletTest03.do"> 요부분이 doget() 로 //작동한다.
@Override
public void destroy() {
System.out.println("Servlet : " + this.getServletName() + "에서 destroy()메서드를 호출합니다.");
}
}
-----------------------------------------------------------------------------------------------------
doBasicServlet.html - ServletTest03 과연결되어있음 ( 작동 첫페이지 view 페이지 )
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Servlet 요청 연습</h1>
<hr>
<!-- 웹브라우저의 URL 주소창에 직접 입력하여 요청하는 경우에도 GET 방식으로 처리된다. -->
<h2>GET방식 요청1 ==> 링크 방식 </h2>
<a href="http://localhost/servletTest/servletTest03.do">Get 방식 요청 1</a>
<hr>
<h2>GET 방식 요청2 ==> form 태그의 method 속성을 생략하거나 'get' 으로 설정한 경우 </h2>
<form action="http://localhost/servletTest/servletTest03.do" method="">
<input type="submit" value="Get방식 요청2">
</form>
<hr>
<h2>POST 방식 요청 ==> form태그의 method 속성에 'post' 로 설정한 경우 </h2>
<form action="http://localhost/servletTest/servletTest03.do" method="post">
<input type="submit" value="Post방식 요청" >
</form>
</body>
</html>
-----------------------------------------------------------------------------------------------------
ServletTest05
package kr.or.ddit.basic;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletTest05 extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
//초기화 파라미터
- 처음 was 가 기동될 때 읽어들이는 파라미터 값들을 초기화 파라미터라고 한다. ( 환경설정하는 데이터들 )
- '서블릿 초기화 파라미터' 와 컨텍스트 초기화 파라미터' 가 있다.
-'서블릿 초기화 파라미터는 해당 서블릿에서만 사용가능하고
'컨텍스트 초기화 파라미터'는 전체 웹 어플리케이션 영역에서 사용 가능하다.
1. 서블릿 초기화 파라미터 ==> web.xml 에 설정하는 방법과 애너테이션에 설정하는 방법 2가지가 있다.
*/
//서블릿 초기화 파라미터값을 구하는 방법
// 방법 1 ==> ServletConfig 객체를 이용하기
ServletConfig config = getServletConfig();
//형식 ) getInitParameter("파라미터 이름");
// ==> 반환값은 무조건 String 형으로 반환된다.
String adminEmail = config.getInitParameter("AdminEmail");
//방법2 ==> 현재 Servlet 객체의 getInitParameter() 메서드 이용하기
String userName = getInitParameter("userName");
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head><meta charset='utf-8'>");
out.println("<title>웹 서버의 정보 </title></head>");
out.println("<body");
out.println("<h1> 서블릿 초기화 파라미터 </h1>");
out.println("관리자 이메일 :" + adminEmail + "<br>");
out.println("사용자 이름 : " + userName + "<br>");
web.xml 파일에 기록된것
**<servlet>
<servlet-name>servletTest05</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest05</servlet-class>
<init-param>
<param-name>AdminEmail</param-name>
<param-value>admin@naver.com</param-value>
</init-param>
<init-param>
<param-name>userName</param-name>
<param-value>홍길동</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletTest05</servlet-name>
<url-pattern>/servletTest05.do</url-pattern>
</servlet-mapping>
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}
}
-----------------------------------------------------------------------------------------------------
html 파일 부분
-----------------------------------------------------------------------------------------------------
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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>servletTest</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>
<servlet>
<servlet-name>servletTest08</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest08</servlet-class>
<init-param>
<param-name>start</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>end</param-name>
<param-value>50</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletTest08</servlet-name>
<url-pattern>/servletTest08.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletTest01</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletTest01</servlet-name>
<url-pattern>/servletTest01.do </url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletTest05</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest05</servlet-class>
<init-param>
<param-name>AdminEmail</param-name>
<param-value>admin@naver.com</param-value>
</init-param>
<init-param>
<param-name>userName</param-name>
<param-value>홍길동</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletTest05</servlet-name>
<url-pattern>/servletTest05.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>myContext</param-name>
<param-value>연습용 컨텍스트 파라미터 값</param-value>
</context-param>
</web-app>
댓글
댓글 쓰기