servlet 선택
→ login.html의 form action="playdata" 을 위한 서블릿 클래스 만들기
package명 : step01.basic
Class명 : LoginValidate
Url mappings의 /LoginValidate 2번 클릭
Url mappings : /LoginValidate -> /playdata로 변경 후 Finish 클릭
필요없는 주석 모두 제거하기
/playdata로 Url mappings를 변경하는 이유
login.html에서 "로그인" 버튼을 누르면
<form action="playdata">
에의해 http://localhost/step01_basic/playdata 로 이동한다.
package step01.controller;
import java.io.IOException;
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("/Validate")
public class Validate extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String id = request.getParameter("id"); // tester
String pw = request.getParameter("pw");
if(id!=null && id.equals("tester")) {
// success의 경우 : forward 방식
request.getRequestDispatcher("sucess").forward(request, response);
}else {
// fail :redirect 방식
response.sendRedirect("fail");
}
}
}
1) doGet() : get방식 처리하는 메소드
2) doPost() : post 방식 처리하는 메소드
3) HttpServlet
: http 프로토콜 지원하는 클래스이며, 상속하여 사용한다.
doGet(), doPost()와 같은 service 메소드를 상속한다.
4) HttpServletRequest
: http 프로토콜 지원하는 클래스, client의 요청 정보를 보유하게 되는 객체이다.
tomcat이 server 내부적으로 객체 생성 후에 넘어오기 때문에 process(request, response)로 사용할 수 있다.
String getParameter("key")
: client로부터 전송되는 데이터를 획득하는 메소드
: input tag에 입력한 데이터 or url에 key=value로 구성된 구조의 데이터 획득시 사용하는 메소드이다.
: 해당 키(key)가 없는 경우에는 null을 반환하므로 null 검증이 필수적이다.
void setAttribute(key,value)
: 요청 객체에 새로운 데이터를 저장하는 메소드
: 이동되는 web page(servlet /jsp)에서 사용하고자 하는 데이터를 저장한다.
5) HttpServletResponse
: http 프로토콜 지원, 접속한 client에게만 응답하게 하는 기능의 객체
setContentType("mimetype;charset=인코딩설정값")
= 응답 형식과 응답 인코딩 설정
PrintWriter getWriter()
: 접속한 client의 브라우저에만 출력하는 기능의 2byte 출력 객체
: response로부터 제공받은 데이터를 출력, response.getWriter();
process() 메소드 설명
client가 입력한 데이터
<input type="text" name="id" value="tester">
client가 입력한 id에 매핑되어있는 parameter를 저장, 인코딩은 무시하고 client로부터 받은 데이터를 뽑아낸다.
id, pw 값을 넣지 않으면 null로 들어가므로 NullPointerException이 발생한다.
String id = request.getParameter("id"); // tester
HttpServletRequest 클래스 내에 있는 *.getParemeter() 메소드를 이용해서 key가 "id"인 value "tester"를 가져온다.
'sucess'인 경우
request.getRequestDispatcher("success").forward(request, response);
forward방식으로 "success"라는 url mapping된 servlet으로 web페이지를 이동한다.
1) playdata url로 요청시, web server는 해당 client만을 위한 request 객체와 response 객체를 생성한다.
2) doGet() or doPost()를 호출하면서 request객체와 response객체가 parameter로 대입된다.
: 호출시 request, response 객체가 새로 생성되는 것이 아니라 공유한다.
Q. sucess의 request.getParameter("id")반환 값은?
A. forward(request,response)를 통해 데이터가 그대로 이관되었기 때문에 'tester'가 반환된다.
request.setAttribute("name","유재석");
'fail'인 경우
response.sendRedirect("fail");