1 분 소요

6.1 서블릿/JSP 로 회원관리 기능 다시 개발하기

회원가입 서블릿 코드

@WebServlet("/users/create")
public class CreateUserServlet extends HttpServlet {
  @Override
  protected void doPost(HttpServletRequest request, 
		HttpServletResponse response) throws ServletException, IOException {
    
		String userId = request.getParameter("userId");
    String password = request.getParameter("password");
    String name = request.getParameter("name");
    String email = request.getParameter("email");
 
    User user = new User(userId, password, name, email);
 
	  DataBase.addUser(user);
		response.sendRedirect("/user/list");
  }
}
  • 5장의 CreateUserController 와 동일하다.
  • 회원가입 완료 후에 사용자 목록을 출력하기 위해 /user/list 로 리다이렉트한다.

사용자 목록 리스트 코드

@WebServlet("/user/list")
public class ListUserServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest request, 
		HttpServletResponse response) throws ServletException, IOException {
    
		request.setAttribute("users", DataBase.findAll());
		RequestDispatcher rd = requset.getRequestDispatcher("/user/list.jsp");
		rd.forward(req, resp);
  }
}
  • 사용자 목록을 조회한 후에 JSP에 users 라는 이름으로 전달한다.
  • 5장에서는 HTML을 StringBuilder 를 활용해 동적으로 생성했지만
  • ListUserServlet은 JSP파일로 위임하고 있다.
  • 동적 HTML 생성을 위해 JSP 구문을 활용해 구현한다.
  • JSP 는 Java Server Page라는 이름으로 자바 구문을 그대로 사용할 수 있다.

사용자 목록 응답 JSP 코드

JSP with JAVA 코드

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    
<%@ page import = "java.util.*" %>    
<%@ page import = "next.model.*" %>    
<%
Collection<User> users (Collection<User>)request.getAttribute("users");
for(User user : users){ 
%>
		<tr>
        <td><%= user.getId() %></td>
        <td><%= user.getName() %></td>
        <td><%= user.getEmail() %></td>
        <td><a href="#" class="btn btn-success" role="button">수정</a>
        </td>
    </tr>
<%
}
%>
  • JSP 에서는 스크립틀릿이라고 하는 <% %> 안에 자바 구분을 그대로 사용할 수 있었다.
  • 웹 어플리케이션의 요구사항의 복잡도가 높아지면서 유지보수가 점차 힘들어졌다.
  • 이를 위해 극복하기 위한 기술이 JSTL와 EL
    • JSP의 복잡도를 낮춰 유지보수를 쉽게 하자는 목적으로 MVC 패턴을 적용한 프레임 워크

JSTL과 EL을 활용한 코드

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:forEach items="${users}" var="user" varStatus="status">
    <tr>
        <th scope="row">${status.count}</th>
        <td>${user.userId}</td>
        <td>${user.name}</td>
        <td>${user.email}</td>
        <td><a href="#" class="btn btn-success" role="button">수정</a>
        </td>
    </tr>
</c:forEach>

6.1.2 개인정보수정 실습

  • 사용자 목록 화면의 개인정보수정버튼
  • 수정 화면은 회원가입 화면인 /user/form.html을 재사용한다.

pic

6.1.3 로그인/로그아웃 기능 실습

  • 로그인/로그아웃 기능 개발
  • 로그인 상태이면 상단 메뉴가 로그아웃, 개인정보 수정이 나타나야하며
  • 로그아웃 상태이면 상단 메뉴가 로그인, 회원가입이 나타나야한다.

6.1.4 회원 목록 및 개인 정보 수정 보안 강화 실습

  • 현재 사용자 목록은 모든 사용자가 보고 수정할 수 있다.
  • 사용자 목록조회는 로그인 사용자만 가능하며
  • 개인 정보 수정은 자신의 정보만 수정 가능해야한다.

6.1.5 중복 코드 제거

  • JSP 파일의 중복을 제거한다