group study.
서블릿
Servet = > 1. 서버에서 실행되는 자바 컴포넌트
2. HTTP 요청을 받아서 처리
3. HTTP 응답을 동적으로 만들어서 처리
4. Web Container에서 실행
(Web Container : Servlet과 Thread pool을 관리하는 특별한 형태의 JVM)
head | url, HTTP1.1, Cookie |
body | data |
[클라이언트가 보내는 요청 방식]
※GET방식
head http://○.○.○/○.jsp?name=kim
※POST방식
head http://○.○.○/○.jsp
body name = kim
1) GET : 요청정보를 head에다 담아가는 방식. (ex) http://***.***.***/login.jsp?user=kim&pass)
특별히 어느 방식으로 요청하지 않으면 GET이 Default 방식이 된다.
Bookmarking같은 것이 필요한 경우에는 반드시 GET방식으로 써야 한다.
(눈에 보여도 상관없는 경우도 OK.)
2) POST : 요청정보를 body에다 담아가는 방식 사용 (ex) user = kim & pass = 1, 2, 3
서버에게 보내야 하는 데이터가 큰 경우, 전송데이터에 보안이 요구되는 경우
3)PUT ( 파일을 올릴때 ) [자주 사용하진 않음]
4)DELETE ( 삭제 할 때 ) [자주 사용하진 않음]
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 FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FirstServlet() {
super();
// TODO Auto-generated constructor stub
}
//새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
//같은 방식으로 처리하겠다.
protected void process(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<b>환영합니다</b>"); //respontse가 알아서 씀.\
out.close();
//이 페이지를 요청하면 환영합니다. 하고 끝~
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
process(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
process(request, response);
}
}
[서블릿 클래스의 기능을 이해하고 생성할 수 있다.]
HttpServlet
init();
service(request,response);
->doPost(request, response)
->doGet(request, response)
destroy();
Servlet Life Cycle 1. load servlet class 2. create sevlet instance 3. Call the init method 4. Call the service method 서비스는 종류에 따라 달리 불러질 것 GET - doget POST - dopost 5. Call the destroy dethod The web container manages the life cycle of a servlet instance These methods should not be called by your code. |
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 FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private int count;
public FirstServlet() {
super();
// TODO Auto-generated constructor stub
}
/*
* init()
* 서블릿을 시작할 때 호출한다.
* 시작할 때 무엇인가를 처리하고 싶다면..
* init()에 처리
*/
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
count = 100;
System.out.println("init() called... count = " + count);
//콘솔에 창 띄움.
}
/*
* destroy()
* 서버를 종료시키면 호출된다.
* 서블릿을 종료시킬 때 처리하고 싶은 것이 있다면...
* destory()에 처리
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destroy() called... count = " + count);
}
//새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
//같은 방식으로 처리하겠다.
protected void process(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println( "<b>환영합니다" + (count++) +"번째 방문객입니다.</b>"); //respontse가 알아서 씀.\
out.close();
//이 페이지를 요청하면 환영합니다. 하고 끝~
}
/*
* 서비스는 종류에 따라 불러짐.
* get - doget
* post - dopost
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
process(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
process(request, response);
}
}
Client의 요청을 서블릿에게 보내줌...!!!!!!
클라이언트에게 요청이 들어오면 그 요청을 서블릿이 받아서 처리할 것
서블릿은 내가 호출하는 것이 아니라,
클라이언트가 요청을 보내면 Web Container()가 받아서,,, Web Container가 Request에 해당하는 객체를 자동적으로 만들어줌.
그 과정에서 만들어진 HttpServerRequest와 HttpServerResponse에 의해 init, doget, dopost, destroy 부름..
request와 response객체를 이해한다. HttpServlet Request getHeanerName() getHeader(name) HttpServletResponse getParameter(name) getParameterValues(name) getParameterNames() getRequestDispatcher("다음으로 갈 페이지명") ->반환하는 객체가 RequestDispatcher이다. 이 객체가 제공하는 forward(request, response) 메서드를 호출하여 다음 페이지로 이동한다. |
요청 헤더 정보의 처리
JSP의 request 기본 객체는 헤더 정보를 읽어올 수 있는 기능을 제공하고 있으며, 이 기능을 제공하는 메서드는 아래와 같다.
; 헤더정보 ex)웹 브라우저는 웹 부라우저의 종류에 대한 정보를 헤더에 담아서 전송
[request 기본 객체가 제공하는 헤더 읽기 메서드]
메서드 | 리턴 타입 | 설명 |
getHeaderNames() | java.util.Enumeration | 모든 헤더의 이름을 구한다. |
getHeader(String name) | String | 지정한 이름의 헤더 값을 구한다. |
getHeaders(String name) | java.util.Enumeration | 지정한 이름의 헤더 목록을 구한다. |
getIntHeader(String name) | int | 지정한 헤더의 값을 정수 값으로 읽어온다. |
getDateHeader(String name) | long | 지정한 헤더의 값을 시간 값으로 읽어온다.(이때 시간은 1970년 1월 1일 이후로 흘러간 1/1000초 단위의 값을 가진다. |
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private int count;
public FirstServlet() {
super();
// TODO Auto-generated constructor stub
}
/*
* init()
* 서블릿을 시작할 때 호출한다.
* 시작할 때 무엇인가를 처리하고 싶다면..
* init()에 처리
*/
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
count = 100;
System.out.println("init() called... count = " + count);
//콘솔에 창 띄움.
}
/*
* destroy()
* 서버를 종료시키면 호출된다.
* 서블릿을 종료시킬 때 처리하고 싶은 것이 있다면...
* destory()에 처리
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destroy() called... count = " + count);
}
//새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
//같은 방식으로 처리하겠다.
protected void process(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println( "<b>환영합니다" + (count++) +"번째 방문객입니다.</b>"); //respontse가 알아서 씀.\
//getHeaderNames() 헤더에 담겨져 오는 데이터의 이름값을 가져온다.
Enumeration headers = request.getHeaderNames();
//헤드 정보 이름 : 값. 으로 구성되 있음...
while ( headers.hasMoreElements()) //요소가 있는 동안에 돌리겠다.
{
String name = (String)headers.nextElement();
//getHeader(name)는 해당 이름에 해당하는 값을 읽어 온다.
String value = request.getHeader(name);
out.println("<li>"+ name + " : " + value);
}
out.close();
//이 페이지를 요청하면 환영합니다. 하고 끝~
}
/*
* 서비스는 종류에 따라 불러짐.
* get - doget
* post - dopost
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
process(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
process(request, response);
}
}
요청 파라미터의 처리
>request 기본 객체의 파라미터 읽기 메서드
메서드 | 리턴 타입 | 설명 |
getParameterNames() | java.util.Enumeration | 웹 브라우저가 전송한 파라미터의 이름을 구한다. |
getParameter(String name) | String | 이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 null을 리턴한다. |
getParameterValues(String name) | String[] | 이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴한다. |
getParameterMap() | java.util.Map | 웹 브라우저가 전송한 파라미터의 맵을 구한다. 맵은 <파라미터 이름, 값> 쌍으로 구성된다. |
실제로 파라메터 값을 읽어올 수 있는지 확인하기 위한 jsp화면.
>POST형식으로 데이터 request 하기
index.jsp |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 현재시간 : <%= new java.util.Date() %> <br></br> <p>데이터를 입력하고 전송 버튼을 눌러 주세요</p> <form action = "first.do" method = "post"> 이름 : <input type = "text" name = "name"/><br/> 좋아하는 동물은 ? <input type = "checkbox" name = "pet" value = "강아지">강아지</input> <input type = "checkbox" name = "pet" value = "고양이">고양이</input> <input type = "checkbox" name = "pet" value = "송아지">송아지</input> <br/> <input type = "submit" value = "전송"/> </form> </body> </html> |
FirstSetvlet.java |
package simple.web.controller; import java.io.IOException; import javax.servlet.ServletException; protected void doPost(HttpServletRequest request, |
>GET형식으로 데이터를 한글로!! request 하기
1) 일단 설정을 변경하여야 한다.(톰캣 자체를)
redirectPort 밑에 라인 추가
URIEncoding = "utf-8"
2)이제 한글로 출력해 보자. 앞에 jsp 파일에서 method = "get" 부분만 수정해 주면 된다.
(default일 경우 get처리 되므로 생략하여도 get 처리된다.)
GET방식으로 하면, head에 한글이 첨부되어 간다(블록 처리해 놓은 것 참조)
'Java > JSP' 카테고리의 다른 글
색상테이블 / 색상표 / 색상코드 (0) | 2011.01.25 |
---|---|
login 처리. / home 간단 sample 처리. (0) | 2011.01.25 |
JSP == Servlet (궁극적으로...) (0) | 2011.01.25 |
JSP 페이지 구성 요소 / 웹 요청 처리 SCOPE (0) | 2011.01.25 |
서블릿 (ⅱ) (0) | 2011.01.25 |