작업순서
- 라이브러리 설치
- 커넥션 풀 연동
- VO, DTO class 작성
- login폼 jsp 페이지 작성, onclick 스크립트 작성
- Servlet 작성 - 맵핑
- Servlet과 login.jsp 연동
1. Library 설치
2022.11.23 - [JSP] - [JSP] Apache Commons - Apache Commons Library
[JSP] Apache Commons - Apache Commons Library
https://commons.apache.org/ Apache Commons – Apache Commons Welcome to Apache Commons Apache Commons is an Apache project focused on all aspects of reusable Java components. The Apache Commons project is composed of three parts: The Commons Proper - A re
jjh93.com
2. Conncetion Pool
2022.11.23 - [JSP] - [JSP] DBCP 커넥션 풀 설정
[JSP] DBCP, 커넥션풀설정
DBCP(DataBase Conncetion Pool), 커넥션풀이란 데이터베이스와 Connection을 맺는 작업은 많은 자원을 소모한다. 따라서, 사용자가 요청할 때마다 Connection이 생성된다면 많은 서버에 과부하가 걸리게 된다.
jjh93.com
3. VO, DTO
싱글톤으로 계정을 만드는 VO, DTO 생성
2022.11.23 - [개념정리] - [디자인패턴] 싱글톤(Singleton)
[디자인패턴] 싱글톤(Singleton)
싱글톤(Singleton) 객체의 인스턴스가 오직 1개만 생성되는 패턴 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조하는 것은 불가능하다. 메모리 낭비를 최소화 할
jjh93.com
VO생성
MemberVO.class
package com.lbi.vo;
public class MemberVO {
private String name;
private String userid;
private String pwd;
private String email;
private String phone;
private int admin;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getAdmin() {
return admin;
}
public void setAdmin(int admin) {
this.admin = admin;
}
}
DAO
MemberDAO.class
package com.lbi.dao;
import java.sql.*;
import javax.sql.*;
import com.lbi.vo.MemberVO;
import javax.naming.*;
public class MemberDAO {
//public을 private으로 바꿔줌
//private으로 해주어야 외부에서 객체 생성을 할 수 없음.
private MemberDAO() { //생성자
}
//싱글톤 방식 = 객체를 한번에 하나씩만 만들겠다
private static MemberDAO instance = new MemberDAO();
//static이면 class이름으로도 접근이 가능
public static MemberDAO getInstance() {
return instance;
//반환시에 instance이 생성
}
public Connection getConnection() throws Exception{ //예외처리 왜...?
Connection conn = null;
Context init = new InitialContext();
Context env = (Context)init.lookup("java:/comp/env");
DataSource ds = (DataSource)env.lookup("jdbc/TestDB");
conn = ds.getConnection();
return conn;
}
//사용자 인증시 사용하는 메소드
public int userCheck(String id, String pwd) {
int result = 1;
String sql = "select pwd from member where userid=?";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if(rs.next()) {
if(rs.getString("pwd") != null && rs.getString("pwd").equals(pwd)) {
result = 1; //아이디와 패스워드 일치
}else {
result = 0; //패스워드 오류
}
}else {
result = -1; //해당 ID가 없을 때
}
}catch(Exception e) {
}finally {
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(con != null) con.close();
} catch (Exception e) {
}
}
return result;
}
//아이디로 회원 정보 가져오는 메소드
//member VO에 정보를 담아서 보냄
public MemberVO getMember(String id) {
MemberVO mvo = null;
String sql = "select * from member where userid=?";
Connection con = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
try {
con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if(rs.next()) {
mvo = new MemberVO();
mvo.setName(rs.getString("name"));
mvo.setUserid(rs.getString("userid"));
mvo.setPwd(rs.getString("pwd"));
mvo.setEmail(rs.getString("email"));
mvo.setPhone(rs.getString("phone"));
mvo.setAdmin(rs.getInt("admin"));
}
} catch (Exception e) {
System.out.println("개인 검색 오류");
}finally {
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(con != null) con.close();
} catch (Exception e) {
}
}
return mvo;
}
}
4. loginForm 작성
위와 같은 로그인 폼을 만들고 로그인 버튼 클릭시 onclick이 실행되는 자바 스크립트 작성하는 기능을 추가
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="script/member.js"></script>
</head>
<body>
<h2>로그인</h2>
<form action="login.do" method="post" name="frm">
<table>
<tr>
<td>아이디</td>
<td><input type="text" name="userid" value="${userid}"></td>
</tr>
<tr>
<td>암 호</td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="로그인" onclick="return loginCheck()">
<input type="reset" value="취소">
<input type="button" value="회원가입" onclick="location.href='join.do'">
</td>
</tr>
<tr>
<td colspan="2">
${message}
</td>
</tr>
</table>
</form>
</body>
</html>
member.js
/**
* 값이 비어있는지 onclick으로 확인
*/
function loginCheck(){
if(document.frm.userid.value==0){
alert("아이디를 써주세요");
frm.userid.focus();
return false;
}
if(document.frm.pwd.value == ""){
alert("암호는 반드시 입력해 주세요");
frm.pwd.focus();
return false;
}
return true;
}
5. Servlet 작성
2022.11.23 - [JSP] - [JSP] Servlet 맵핑
[JSP] Servlet 맵핑
서블릿을 생성한다.
jjh93.com
LoginServlet
package unit;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 com.lbi.dao.MemberDAO;
import com.lbi.vo.MemberVO;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher("member/login.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = "member/login.jsp";
String userid = request.getParameter("userid");
String pwd = request.getParameter("pwd");
MemberDAO mDao = MemberDAO.getInstance();
int result = mDao.userCheck(userid, pwd);
//System.out.println("인증 성공 : " + result);
if(result == 1) {
MemberVO mvo = mDao.getMember(userid);
HttpSession session = request.getSession();
session.setAttribute("loginUser", mvo);
request.setAttribute("message", "회원 가입에 성공했습니다.");
url = "main.jsp";
}else if(result == 0){ //비밀번호 틀렸을 때
request.setAttribute("message", "비민 번호가 맞지 않습니다.");
}else if(result == -1) {
request.setAttribute("message", "존재하지 않는 아이디 입니다.");
}
RequestDispatcher rd = request.getRequestDispatcher(url);
rd.forward(request, response);
}
}
'Spring > JSP' 카테고리의 다른 글
[JSP] JSTL - Core (0) | 2022.11.24 |
---|---|
[JSP] JSTL 설치 (0) | 2022.11.24 |
[JSP] Servlet 맵핑 (0) | 2022.11.23 |
[JSP] 싱글톤과 EL표현을 활용한 멤버생성자 (0) | 2022.11.23 |
[JSP] DBCP, 커넥션풀설정 (0) | 2022.11.23 |
댓글