Login MVC example
Login MVC example
WebContent/login/loginForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
Object loginResult = request.getAttribute("loginResult");
boolean success = false;
if(loginResult!=null) {
success = (Boolean)loginResult;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그인 폼</title>
<style type="text/css">
table { width:200px; background-color: lightblue;}
th { width:70px; text-align: right; padding-right:10px;}
.field { text-align: left; width:90px; padding-left:10px; }
#btnCell { text-align: center; }
fieldset { width:200px; }
</style>
<script type="text/javascript">
<%
if(loginResult!=null) { %>
var success = <%=success%>;
if(success) alert('로그인에 성공했습니다');
else alert('로그인 실패');
<%}%>
</script>
<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#loginForm').submit(function(event){
var id = $('[name=id]').val();
var pwd = $('[name=pwd]').val();
if(id=='' || pwd=='') {
alert('아이디와 비밀번호를 입력해주세요');
event.preventDefault();
}
});
$('#logOutBtn').click(function(){
if(confirm('정말로 로그아웃하시겠어요?')) {
logout();
}
});
});
function logout() {
$.ajax(
{
url:'LoginServlet',
type:'POST',
data:{'cmd':'LOGOUT'},
dataType:'text',
success :function(resData){
var jsonObj = eval('('+resData+')');
if(jsonObj.logout) alert('정상적으로 로그아웃되었습니다');
else alert('로그아웃에 실패했습니다');
}
}
);
}
</script>
</head>
<body>
<form id="loginForm" action="LoginServlet" method="post">
<input type="hidden" name="cmd" value="LOGIN">
<fieldset>
<legend>로그인 폼</legend>
<table>
<tr><th>아이디</th><td> <input class="field" type="text" name="id"></td></tr>
<tr><th>비밀번호</th><td> <input class="field" type="password" name="pwd"></td></tr>
<tr><td colspan="2" id="btnCell">
<input type="submit" value="로그인">
<input type="reset" value="취 소">
<input type="button" value="Logout" id="logOutBtn">
</td></tr>
</table>
</fieldset>
</form>
<p>
<hr width="500px">
<a href="main.jsp">메인 페이지로 이동</a>
</body>
</html>
main.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
Object obj = session.getAttribute("ID");
boolean pass = obj==null ? false : true;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Welcome to KDEA</title>
<script type="text/javascript">
var login = <%=pass%>;
if(!login) {
alert('이 페이지는 로그인을 거친 이용자에게만 제공되는 서비스입니다');
location.href='loginForm.jsp';
}
</script>
</head>
<body>
<p>
여기는 Main 페이지입니다
</body>
</html>
/login/LoginServlet
package org.kdea.java;
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("/login/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("euc-kr");
String cmd = request.getParameter("cmd");
if(cmd!=null && cmd.equals("LOGIN")) {
LoginService lc = new LoginService();
request.setAttribute("loginResult", lc.authenticate(request));
getServletContext().getRequestDispatcher("/login/loginForm.jsp")
.forward(request, response);
}
else if(cmd!=null && cmd.equals("LOGOUT")) {
request.getSession().invalidate();
getServletContext().getRequestDispatcher("/login/logout.jsp")
.forward(request, response);
}
}
}
LoginService.java
package org.kdea.java;
import javax.servlet.http.HttpServletRequest;
public class LoginService
{
public boolean authenticate(HttpServletRequest request)
{
String id = request.getParameter("id").toUpperCase();
String pwd = request.getParameter("pwd").toUpperCase();
try {
boolean success = new MemberDAO().authenticate(id, pwd);
if(success) request.getSession().setAttribute("ID", id);
return success;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
MemberDAO.java
package org.kdea.java;
import java.sql.*;
public class MemberDAO
{
Connection conn;
PreparedStatement pstmt;
ResultSet rs;
String jdbc_driver = "oracle.jdbc.OracleDriver";
String db_url = "jdbc:oracle:thin:@localhost:1521:XE";
private Connection getConn()
{
try{
Class.forName(jdbc_driver);
conn = DriverManager.getConnection(db_url,"scott","tiger");
return conn;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public boolean authenticate(String id, String pwd)
{
String sql = "select empno, ename from emp where empno=? and ename=?";
conn = getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, Integer.valueOf(id));
pstmt.setString(2, pwd);
rs = pstmt.executeQuery();
return rs.next() ? true : false;
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll();
}
return false;
}
private void closeAll(){
try{
if(conn!=null) conn.close();
if(pstmt!=null) pstmt.close();
if(rs!=null) rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
}