[Web] 3. LoginValidate.java , Servlet 파일 생성

진주·2022년 2월 8일
0

Web

목록 보기
3/17
post-custom-banner


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 로 이동한다.

LoginValidate.java 소스코드

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");
		}
	}
}

servlet API

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)에서 사용하고자 하는 데이터를 저장한다.

  • getAttribute(key)로만 추가한 데이터를 활용할 수 있다
    :'이동된' 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","유재석");
  • 요청 객체에 새로운 데이터를 추가적으로 저장할 수 있다.
    1) 저장 구조 : key-value구조 (데이터 구분이 필수적)
    2) setAttribute()로 새로운 데이터를 추가하고, getAttribute()로 활용한다.

'fail'인 경우

response.sendRedirect("fail");
  • redirect방식으로 "fail"이라는 url mapping된 servlet으로 web 페이지가 이동한다.
    1) http://ipLport/stpe01_basic/fail 로 이동함
    2) client에게 fail 정보를 제공하면서 응답(response)로 마무리한다.
    3) client가 사용하는 브라우저가 url을 재구성하여 (playdata → fail) client가 인식하지 못하는 속도로 재요청된 url이다.
    4) fail은 새로운 요청이기 때문에 요청 객체, 응답 객체가 새로 생성된다.
profile
진주의 코딩일기
post-custom-banner

0개의 댓글