servlet에 대한 정보
web.xml에 sevlet정보(servlet-name)를 적는다.
post 방식으로 정할 때 : ajax
link거는 건 무조건 get방식
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Servlet 요청 연습</h1><hr>
<h2>GET 방식 요청1 - 링크 방식</h2>
<a href="http://localhost/servletTest/servletTest03.do">GET 방식 요청1</a>
<hr>
<h2>
GET 방식 요청2 - form태그의 submit방식<br>
- form태그의 method속성을 생략하거나 'get'으로 설정한 경우
</h2>
<form action="http://localhost/servletTest/servletTest03.do" method="get">
<input type="submit" value="GET방식 요청2">
</form>
<br><hr><br>
<h2>POST방식 요청 - form의 submit방식<br>
- form태그의 method속성값을 'post'로 설정한 경우
</h2>
<form action="http://localhost/servletTest/servletTest03.do" method="post">
<input type="submit" value="POST방식 요청">
</form>
<br><hr><br>
</body>
</html>
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;
/*
이 예제는 애노테이션을 이용하여 서블릿을 등록하는 예제입니다.
애노테이션(@WebService)은 Servlet버전 3.0이상에서 사용할 수 있다.
*/
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
@WebServlet 애노테이션의 속성들.
1) name : 서블릿 이름을 설정한다.(기본값 : 빈문자열(""))
2) urlPattern : 서블릿의 요청 URL패턴의 목록을 설정한다. (기본값 : 빈배열({}))
예) urlPatterns="/url1" 또는 urlPattern={"/url1"} ==> 패턴이 1개일 경우
예) urlPatterns={"/url1", "/url2", ...} ==> 패턴이 2개 이상일 경우
3) value : urlPattern속성과 동일한 기능을 한다.
4) description : 주석(설명글)을 설정한다.
*/
@WebServlet(urlPatterns="/servletTest02.do", description="애노테이션을 이용한 서블릿 설정 예제")
public class ServletTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// 처리한 내용을 PrintWriter객체를 이용하여 출력한다.
// (이 작업이 곧 응답데이터를 클라이언트로 보내는 작업이 된다.)
// 방법2: print()메서드 또는 println()메서드 이용하기
out.println("<html>");
out.println("<head><meta charset='uft-8'><title>두번째 서블릿 예제</title></head>");
out.println("<body>");
out.println("<h1 style='text-align:center; '>");
out.println("안녕하세요. 두번째 서블릿 예제입니다.<br>");
out.println("애너테이션을 이용하여 설정했습니다.<br><br>");
out.println("실행 ContextPath : " + request.getContextPath() + "</h1>");
out.println("</body></html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}
}
package kr.or.ddit.basic;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
- 서블릿의 동작 과정 (Life Cycle)
1. 사용자(클라이언트)가 URL을 클릭하면 HTTP Request를 Servlet Container로 전송
2. 컨테이너는 web.xml에 정의된 url패턴을 확인하여 어느 서블릿을 통해서 처리해야할지를 검색한다.
(이 때 해당 서블릿이 로딩이 안 된 상태이면 로딩 작업을 수행한다.
그리고 해당 서블릿이 처음 로딩시 init()메서드를 자동으로 호출해준다.)
(Servlet 3.0이상에서는 애노테이션(@WebServlet)으로 설정할 수 있다.)
3. Servlet Container는 요청을 처리할 개별 쓰레드 객체를 생성하고,
해당 쓰레드에서 실행할 Servlet의 service()메서드를 호출해준다.
(이 때 HttpServletRequest 및 HttpServletResponse객체를 생성하여 파라미터의 인수값으로 넘겨준다.)
4. service()메서드는 메서드(method) 타입을 체크하여 적절한 메서드를 호출한다.
(doGet(), doPost(), doPut(), doDelete() 등...)
5. 요청 및 응답 처리가 완료되면 HttpServletRequest 및 HttpServletResponse객체는 소멸된다.
6. 컨테이너로부터 서블릿이 제거되는 경우에는 destroy()메서드가 호출된다.
*/
// 서블릿의 LifeCycle 예제
@WebServlet("/servletTest03.do")
public class ServletTest03 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see Servlet#init(ServletConfig)
*/
public void init() throws ServletException {
// 서블릿이 처음 로딩될 때 실행됨
System.out.println("Servlet : " + this.getServletName() //servlet이름
+ "에서 init()메서드 호출...");
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
System.out.println("Servlet : " + this.getServletName()
+ "에서 destroy()메서드 호출...");
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service() 메서드 시작...");
// GET방식과 POST방식에 맞는 메서드 호출하기
// 방법1 ==> HttpServlet의 service()메서드로 위임해서 처리한다.
//super.service(request, response);// 부모에 있는 service가 알아서 처리해줌
// 방법2 ==> 클라이언트의 전송방식 (GET, POST 등)을 구분해서 직접 메서드 호출하기
String method = request.getMethod(); // 전송방식을 반환하는 메서드
System.out.println("method = " + method);
if("GET".equals(method)) {
doGet(request, response);
}else if ("POST".equals(method)) {
doPost(request, response);
}else {
System.out.println("알 수 없는 전송방식입니다.");
return;
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet()메서드 시작...");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; cjarset=uft-8");
PrintWriter out = response.getWriter();
out.println("<html><head><meta charset='utf-8'></head>");
out.println("<body><h1>doGet메서드를 처리한 결과입니다.</h1></body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost()메서드 시작...");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; cjarset=uft-8");
PrintWriter out = response.getWriter();
out.println("<html><head><meta charset='utf-8'></head>");
out.println("<body><h1>doPost메서드를 처리한 결과~~~</h1></body></html>");
}
}
package kr.or.ddit.basic;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ServletTest04
*/
@WebServlet("/ServletTest04.do")
public class ServletTest04 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Servlet 환경 정보 알아보기
// ==> Servlet클래스나 JSP 페이지의 환경에 관련된 정보는
// javax.ServletContext 인터페이스 타입의 객체를 이용해서 얻을 수 있다.
// ServletContext객체 구하기
ServletContext context = this.getServletContext();
String serverInfo = context.getServerInfo();
int majorVersion = context.getMajorVersion();
int minorVersion = context.getMinorVersion();
String servletName = this.getServletName();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><head><meta charset='utf-8'>");
out.println("<title>웹 서버 정보 보기</title></head>");
out.println("<body>");
out.println("웹 서버 종류(ServerInfo) : " + serverInfo + "<br>");
out.println("servletName : " + servletName + "<br>");
out.println("지원하는 Servlet버전 : " + majorVersion + "." + minorVersion + "<br>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Request 연습</title>
</head>
<body>
<h2>Request 연습 Form</h2><hr>
<form name="testForm" method="post" action="http://localhost/servletTest/requestTest01.do">
<table border="1">
<tr>
<td>이름</td>
<td><input type="text" size="10" name="username"></td>
</tr>
<tr>
<td>직업</td>
<td>
<select name="job">
<option value="무직">무직</option>
<option value="회사원">회사원</option>
<option value="전문직">전문직</option>
<option value="공무원">공무원</option>
<option value="학생">학생</option>
</select>
</td>
</tr>
<tr>
<td>취미</td>
<td>
<input type="checkbox" name="hobby" value="여행" id="hobby1">
<label for="hobby1">여행</label>
<input type="checkbox" name="hobby" value="게임" id="hobby2">
<label for="hobby2">게임</label>
<input type="checkbox" name="hobby" value="배드민턴" id="hobby3">
<label for="hobby3">배드민턴</label>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="확인">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
package kr.or.ddit.reqest;
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;
/**
* Servlet implementation class requestTest01
*/
@WebServlet("/requestTest01.do")
public class requestTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 클라이언트가 보내온 데이터 가져오기
// POST방식으로 전송되어 온 데이터의 인코딩 방식 설정
request.setCharacterEncoding("utf-8");
// request.getParameter("파라미터명")
// ==> 해당 '파라미터명'에 설정된 '값'을 문자열로 가져온다.
// http://localhost/servletTest/서블릿URL패턴?파라미터명=값&파라미터명=값
String userName = request.getParameter("username");
String job = request.getParameter("job");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><head><meta charset='utf-8'>");
out.println("<title>Request 객체로 전송값 구하기</title></head>");
out.println("<body>");
out.println("<h2>클라이언트가 보내온 값</h2>");
out.println("<table border='1'>");
out.println("<tr><td>이름</td>");
out.println("<td>"+ userName +"</td></tr>");
out.println("<tr><td>직업</td>");
out.println("<td>"+ job +"</td></tr>");
out.println("</table>");
out.println("</body></html>");
}
}