EL(Expression Language)
OGNL 표기법을 사용하여 객체의 프로퍼티 값을 조회
${board.title}에서 title은 필드명이 아니라 프로퍼티, (setTitle, getTitle)의 title을 가르킨다.
implementation 'javax.servlet:jstl:1.2'
gradle eclipse
실행한다.JSP 페이지에 태그 라이브러리를 선언한다.
필요한 JSTL 태그를 사용한다.
list.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:forEach items="${members}" var="member">
<tr>
<td>${member.no}</td>
<td><a href='detail?no=${member.no}'>${member.name}</a></td>
<td>${member.email}</td>
</tr>
</c:forEach>
/webapp/auth/form.jsp 생성
form.jsp
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JWS</title>
</head>
<body>
<h1>로그인</h1>
<form action='login'>
<table border = '1'>
<tr>
<th>이메일</th><td><input name='email' type='email' size='30'></td>
</tr>
<tr>
<th>암호</th><td><input name='password' type='password' size='20'></td>
</tr>
</table>
<p>
<button type='submit'>로그인</button>
<a href='../'>취소</a>
</p>
</form>
</body>
</html>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JWS</title>
<meta http-equiv='Refresh' content='1; url=${empty member ? "form.jsp" : "../"}'>
</head>
<body>
<h1>로그인</h1>
<c:choose>
<c:when test="${not empty member}" >
<p>로그인 성공입니다!</p>
</c:when>
<c:otherwise>
<p>회원이 존재하지 않습니다!</p>
</c:otherwise>
</c:choose>
</body>
</html>
@WebServlet("/auth/login")
public class LoginController extends HttpServlet{
private static final long serialVersionUID = 1L;
MemberDao memberDao;
@Override
public void init() {
memberDao = (MemberDao) this.getServletContext().getAttribute("memberDao");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String email = request.getParameter("email");
String password = request.getParameter("password");
Member member = memberDao.findByEmailPassword(email, password);
request.setAttribute("member", member);
// Refresh
response.setContentType("text/html;charset=UTF-8");
request.getRequestDispatcher("/auth/loginResult.jsp").include(request, response);
} catch(Exception e) {
request.setAttribute("exception", e);
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
}
public Member findByEmailPassword(String email, String password) throws Exception{
try (PreparedStatement pstmt = con.prepareStatement(
"select mno,name,email,cdt from app_member where email=? and pwd=sha2(?, 256)" );
) {
pstmt.setString(1, email);
pstmt.setString(2, password);
try(ResultSet rs = pstmt.executeQuery())
{
if (!rs.next()) {
return null;
}
Member member = new Member();
member.no = rs.getInt("mno");
member.name = rs.getString("name");
member.email = rs.getString("email");
member.createdDate = rs.getDate("cdt");
return member;
}
}
}
-com.bitcamp.board.controller.LogoutController 클래스 생성
@WebServlet("/auth/logout")
public class LogoutController extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
HttpSession session = request.getSession();
session.invalidate(); // 현재 세션을 무효화시킨다.
response.sendRedirect("../"); // 로그아웃 한 후 메인 페이지를 요청하라고 명령한다.
} catch(Exception e) {
request.setAttribute("exception", e);
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
}
-com.bitcamp.board.controller.LoginController 클래스 변경