Servlet (서블릿)
서블릿은 자바 언어로 요청을 받아 웹 페이지의 결과를 반환하는 기술이다.
즉, 자바와 프론트의 중간 징검다리 역할이며 프론트에서 사용자의 요청을 받아 자바의 코딩결과를 사용자에게 다시 전송하는 것이다.
서블릿의 구조
자바 클래스를 서블릿에 등록하고, 사용자가 서비스를 요청한다. 위 과정으로 서블릿이 실행되어 서블릿 메서드에 따라 데이터베이스에서 정보를 주고받고, 사용자가 요청한 정보를 전달한다.
회원가입으로 간단하게 생각하면, 회원이 작성폼에 아이디 등의 개인정보를 입력하면 서블릿에서 자바 클래스의 코드를 읽어 상황에 맞는 행동을 취한다.
회원 가입의 경우 회원의 정보를 DB에 저장한다. 이에 따른 결과를 사용자에게 반환한다.
로그인의 경우 회원이 아이디, 비밀번호를 입력하여 요청한다. 서블릿이 실행되며 데이터 베이스에서 사용자의 정보를 가져와 로그인이라는 결과를 반환한다.
서블릿 메서드
doGet 메서드
get 요청 시 조인된 폼을 주는 동작을 실행한다.
이 메서드에서는
- 사용자의 요청을 받고
- 서비스의 메서드 요청을 처리하고
- 처리 결과 페이지로 이동한다
// get 요청 시 조인 폼을 주는 동작 실행.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
// 1. 요청받음
// 2. 서비스 메서드 요청을 처리
// 3. 처리 결과 페이지로 이동
RequestDispatcher dis = request.getRequestDispatcher("/member/join.jsp");
dis.forward(request, response); //Servlet 이동 방법 1, 사용하던 request 객체를 가지고 이동
}
doPost 메서드
doPost 메서드에서는 사용자가 입력한 데이터로 요청을 완료한다.
아래의 코드에서는 사용자가 입력한 데이터 값을 받아와 새로운 객체 안에 입력해준다.
// doPost 메서드
// 사용자가 입력한 데이터로 요청 완료
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
MemberService service = new MemberService();
service.join((new MemberVo(id,pwd,name,email)));
response.sendRedirect("/webApp2/index.jsp");
}
Request 메서드
1. RequestDispatcher
request, response 객체를 가지고 페이지를 이동한다. 생성자 파라메터로 이동할 뷰 페이지(JSP) 경로이다.
경로에서 같은 프로젝트 안에서 이동할 경우 일부 경로만 작성이 가능하다.
RequestDispatcher dis = request.getRequestDispatcher("(경로)");
2. getParameter
name 값과 똑같은 이름으로 읽어온다.
읽어온 값을 변수에 담는다.
String (변수이름) = request.getParameter("(불러올 값의 name)");
Servlet 이동 방법
1. forward()
포워드 방식으로 이동한다.
포워드 방식은 서버 내에서 request, response 객체를 가지고 이동한다.
request 는 클라이언트가 실행하는 동작을 기억하고, response는 그에 따른 반응을 저장하여 돌아온다.
dis.forward(request, response);
2. sendRedirect("경로")
클라이언트에게 페이지를 새로 요청하도록 시키는 것이다.
request 가 새 객체이므로 이전에 저장한 데이터 모두 없어진다.
redirect 로 연결하는 것은 밖에서 요청이 오는 것이기 때문에 전체 경로를 작성해야한다.
response.sendRedirect("/webApp2/index.jsp");
표현식
${ } EL 표현식
EL 표현식 : 자바에서 쓰던 변수를 가져와 그 값을 뷰 페이지에서 쓸 수 있도록 한다.
프라이빗 접근 제어자 getId로 작성해야 하는 것도, EL 표현식에서는 이름만 적어도 규칙에 따라 getter 을 호출해 값을 읽어온다.
즉, Vo에서 일반적인 방법으로 setter getter을 추가해주는 것이 중요하다