USERS 테이블 만들기
📒 프로젝트 코드
✏️ 사용자가 처음으로 접속하는 페이지(index.jsp) 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8">
<title>Index</title>
</head>
<body>
<%
String id = (String)session.getAttribute("id");
if(id==null) {
%>
<a href = "loginForm.html">로그인</a>
<%
}
else {
%>
<a href = "logout">로그아웃</a>
<%
}
%>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginForm</title>
<style>
#loginFormArea {
margin : auto;
width : 400px;
height : 200px;
border : 2px double purple;
border-radius : 10px;
text-align : center;
}
fieldset {
text-align : center;
border : none;
}
#selectButton {
margin-top : 10px;
}
table {
width : 380px;
margin : auto;
}
.td_left {
width : 180px;
}
.td_right {
width : 200px;
}
</style>
</head>
<body>
<section id = "loginFormArea">
<h1>로그인</h1>
<form action = "login" method = "POST">
<fieldset>
<table>
<tr>
<td class = "td_left">
<label for = "id">아이디 : </label>
</td>
<td class = "td_right">
<input type = "text" name = "id" id = "id"/>
</td>
</tr>
<tr>
<td class = "td_left">
<label for = "passwd">비밀번호 : </label>
</td>
<td class = "td_right">
<input type = "password" name = "passwd" id = "passwd"/>
</td>
</tr>
</table>
<input type = "submit" value = "로그인" id = "selectButton"/>
</fieldset>
</form>
</section>
</body>
</html>
✏️ 로그인 요청을 처리하는(요청을 받는) 서블릿 페이지(LoginServlet.java) 작성
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import svc.LoginService;
import vo.Member;
/**
* Servlet implementation class LoginServiet
*/
@WebServlet("/login")
public class LoginServiet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServiet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
// TODO Auto-generated method stub
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
LoginService loginService = new LoginService();
Member loginMember = loginService.getLoginMember(id,passwd);
//로그인이 성공되면 Member 객체가 넘어오고 실패하면 null이 넘어옴
if(loginMember != null) {
HttpSession session = request.getSession();
session.setAttribute("id", id);
response.sendRedirect("index.jsp");
}
else {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('로그인실패')");
out.println("history.back()");
out.println("</script>");
}
}
}
✏️ 로그인 비즈니스 로직을 처리하는 파일(LoginService.java) 코드 작성
package svc;
import static db.JdbcUtil.*;
import java.sql.Connection;
import dao.LoginDAO;
import vo.Member;
public class LoginService {
public Member getLoginMember(String id, String passwd) {
// TODO Auto-generated constructor stub
LoginDAO loginDAO = LoginDAO.getInstance();
Connection con = getConnection();
loginDAO.setConnection(con);
Member loginMember = loginDAO.selectLoginMember(id,passwd);
close(con);
return loginMember;
}
}
✏️ 데이터베이스에 로그인 관련 SQL 구문을 전송하는 파일(LoginDAO.java) 코드 작성
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import vo.Member;
import static db.JdbcUtil.*;
public class LoginDAO {
private static LoginDAO loginDAO;
private Connection con;
private LoginDAO() {
// TODO Auto-generated constructor stub
}
public static LoginDAO getInstance() {
if(loginDAO == null) {
loginDAO = new LoginDAO();
}
return loginDAO;
}
public void setConnection(Connection con) {
this.con = con;
}
public Member selectLoginMember (String id, String passwd) {
// TODO Auto-generated constructor stub
Member loginMember = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = con.prepareStatement("SELECT * FROM users WHERE id = ? AND passwd = ?");
pstmt.setString(1, id);
pstmt.setString(2, passwd);
rs = pstmt.executeQuery();
if(rs.next()) {
loginMember = new Member();
loginMember.setAddr(rs.getString("addr"));
loginMember.setAge(rs.getInt("age"));
loginMember.setEmail(rs.getString("email"));
loginMember.setGender(rs.getString("gender"));
loginMember.setId(rs.getString("id"));
loginMember.setName(rs.getString("name"));
loginMember.setNation(rs.getString("nation"));
loginMember.setPasswd(rs.getString("passwd"));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally {
try {
close(rs);
close(pstmt);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
return loginMember;
}
}
✏️ 데이터베이스 작업 시 반복적으로 사용하는 기능들을 정의한 파일(JdbcUtil.java) 코드 작성
package db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.*;
import javax.sql.DataSource;
public class JdbcUtil {
public static Connection getConnection () {
Connection con = null;
try {
Context initCtx = new InitialContext();
//Context envCtx = (Context)initCtx.lookup("java:comp/env/jdbc/mariaDB");
DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/mariaDB");
con = ds.getConnection();
con.setAutoCommit(false);
System.out.println("connect succes");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
public static void close (Connection con) {
try {
con.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void close (Statement stmt) {
try {
stmt.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void close (ResultSet rs) {
try {
rs.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void commit (Connection con) {
try {
con.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void rollback (Connection con) {
try {
con.rollback();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
✏️ 회원 한 명의 정보를 저장하는 파일(Member.java) 코드 작성
package vo;
public class Member {
private String name;
private String addr;
private int age;
private String nation;
private String id;
private String passwd;
private String gender;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNation() {
return nation;
}
public void setNation(String nation) {
this.nation = nation;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
✏️ 로그아웃 요청을 처리하는 서블릿(LogoutServlet.java) 코드 작성
package controller;
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;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LogoutServlet
*/
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LogoutServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
// id 정보를 저장하고 있는 session을 삭제 후 index.jsp로 리다이렉트
HttpSession session = request.getSession();
session.invalidate();
response.sendRedirect("index.jsp");
}
}
✏️ CP(Connection Pool)에 관한 설정 파일인 context.xml 파일 코드 작성
<Context>
<Resource
name="jdbc/mariaDB"
auth = "Container"
type = "javax.sql.DataSource"
username = "java"
password = "java"
driverClassName = "org.mariadb.jdbc.Driver"
factory = "org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
url = "jdbc:mysql://localhost:3306/testdb"
maxActive = "500" />
</Context>