[JavaWeb] 5장 웹 서버 리팩토링, 서블릿 컨테이너와 서블릿의 관계 - 2
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을 재사용한다.

6.1.3 로그인/로그아웃 기능 실습
- 로그인/로그아웃 기능 개발
- 로그인 상태이면 상단 메뉴가 로그아웃, 개인정보 수정이 나타나야하며
- 로그아웃 상태이면 상단 메뉴가 로그인, 회원가입이 나타나야한다.
6.1.4 회원 목록 및 개인 정보 수정 보안 강화 실습
- 현재 사용자 목록은 모든 사용자가 보고 수정할 수 있다.
- 사용자 목록조회는 로그인 사용자만 가능하며
- 개인 정보 수정은 자신의 정보만 수정 가능해야한다.
6.1.5 중복 코드 제거
- JSP 파일의 중복을 제거한다