-
[JSP] login2-1JSP 2021. 7. 29. 13:55
emplyees table 필요한 파일 추가 index.jsp
index.jsp 를 실행하면 바로 login.do 로 이동하게 됨. (1에서는 a 태그를 사용해서 버튼을 눌러야만 했었음)
get방식으로 서블릿 요청하기.
<%@ 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> </head> <body> <% response.sendRedirect("login.do"); %> </body> </html>
header.jsp
바뀌지 않고 계속 보이는 haeder 파일 만들기.
manager, member, non-member 이렇게 세개의 상황에 따라 다른 메뉴들과, 선택 가능한 항목만 (링크 연결되어있는 항목) 배경 색이 바뀌도록 하기. (javascript if를 쓸지, jstl 태그를 쓸지)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> a{ text-decoration : none; } td { border : 1px solid #444444; width : 200px; text-align : center; } .login:hover{ background-color : #AFC7F9; } </style> </head> <body> <table align="center"> <tr> <!-- non-member page --> <c:if test="${empty loginUser}"> <td></td> <td></td> <td><a href="login.do">log-in</a></td> <td style="width:300px;"> member registration <br> <span style="color:red">(can use only manager)</span> </td> <td> member's page <br> <span style="color:red">(can use only member)</span> </td> </c:if> <!-- member / manager page --> <c:if test="${!empty loginUser}"> <td>${loginUser.name}, hello!</td> <td>level : ${loginUser.lev}</td> <td class="login"><a href="logout.do">log-out</a></td> <c:choose> <c:when test="${result==2}"> <td class="login" style="width:300px;"><a href="custom.do">member registration </a></td> </c:when> <c:when test="${result==3}"> <td style="width:300px;"> member registration <br> <span style = "color:red">(can use only manager)</span> </td> </c:when> </c:choose> <td class="login"> <a href="mypage.do">member's page</a> </td> </c:if> </tr> </table> </body> </html>
login.jsp
로그인 입력 폼
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="header.jsp"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> td{ text-align ="center"; } </style> </head> <body> <form action="login.do" method="post"> <table> <tr> <td colspan="2">LOG-IN</td> </tr> <tr> <td>ID</td> <td><input type="text" name="id"></td> </tr> <tr> <td>PASSWORD</td> <td><input type="password" name="pwd"></td> </tr> <tr> <td>LEVEL</td> <td> <select name = "lev"> <option value="A">manager</option> <option value="B">user</option> </select> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="LOG-IN"> <input type="reset" value="reset"> </td> </tr> </table> <div style="color:red; text-align: center;"> ${message} </div> </form> </body> </html>
com.magic.dto - EmployeesVO.java
회원 테이블 정보를 저장할 VO클래스 만들기
package com.magic.dto; import java.util.Date; import lombok.Getter; import lombok.Setter; @Getter @Setter public class EmployeesVO { private String id,pass,name,lev,phone; private Date enter; private Integer getnder; @Override public String toString() { return "EmployeesVO [id=" + id + ", pass=" + pass + ", name=" + name + ", lev=" + lev + ", phone=" + phone + ", enter=" + enter + ", getnder=" + getnder + "]"; } }
com.magic.dao - EmployeeDAO
쿼리문 처리하는 DAO 만들기
db 접속 세팅
메소드 단위 를 db랑 붙어서
싱글톤 패턴으로 만들기 (외부에서 생성이 안되고, 내부에서 한번만 생성된다)
package com.magic.dao; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class EmployeesDAO { private static EmployeesDAO instance = new EmployeesDAO(); public EmployeesDAO() { } public static EmployeesDAO getInstance() { return instance; } public Connection getConnection() throws Exception{ Connection conn = null; Context initContext = null; try { initContext = new InitialContext(); DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/OracleDB"); conn = ds.getConnection(); }catch(NamingException e) { e.printStackTrace(); }catch(SQLException e) { e.printStackTrace(); } return conn; } }
com.magic.controller - LoginServlet.java (@WebServlet/login.do)
로그인 처리하기 위한 get메소드 post메소드
db연결해서 값 처리하기 위해 값을 입력해서 서브릿 요청이 들어올 떄 post와
index.jsp 에서 get 방식(링크에 의한 요청)으로 요청했으니 여기서도 doGet() 메소드를 이용하여 login.jsp 로 포워딩 하도록 한다.
컨트롤러 만들기(서블릿)
package com.magic.controller; 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; @WebServlet("/login.do") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); //이동할 페이지 rd.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
이제 여기까지가 index .jsp 를 실행했을 때 로그인 폼으로 바로 보이게끔 하는 작업을 했다.
doPost
유저 체크를 매개변수 세개를 이용해서 한다.
package com.magic.controller; 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 com.magic.dao.EmployeesDAO; @WebServlet("/login.do") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); //이동할 페이지 rd.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); //한글처리 String id = request.getParameter("id"); String pwd = request.getParameter("pwd"); String lev = request.getParameter("lev"); //파라미터 받아오기 String url = null; //페이지 이동시 사용할 변수 만들기 EmployeesDAO empDAO = EmployeesDAO.getInstance(); //DAO에서 userCheck() 만들기! } }
employeesDAO
이제 DAO에다가 다음에 사용할 userCheck() 를 만들어야한다.
package com.magic.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class EmployeesDAO { private static EmployeesDAO instance = new EmployeesDAO(); public EmployeesDAO() { // TODO Auto-generated constructor stub } public static EmployeesDAO getInstance() { return instance; } public Connection getConnection() throws Exception{ Connection conn = null; Context initContext = null; try { initContext = new InitialContext(); DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/OracleDB"); conn = ds.getConnection(); }catch(NamingException e) { e.printStackTrace(); }catch(SQLException e) { e.printStackTrace(); } return conn; } public int userCheck(String userid, String pwd, String lev) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = "select * from employees where id=?"; int result = 1; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1, userid); rs = pstmt.executeQuery(); if(rs.next()) { if(pwd.equals(rs.getString("psss"))) { //비밀번호 일치 if(lev.equals(rs.getString("lev"))) { //회원등급 일치 result = 2; //관리자로 로그인 성공 if(lev.equals("B")) { result = 3; //일반회원 로그인 성공 } }else { //level 불일치 result = 1; } }else { //비밀번호 불일지 result = 0; } }else { //아이디 불일치 result = -1; } }catch(Exception e) { e.printStackTrace(); }finally { try { if(rs!=null) rs.close(); if(pstmt!=null) rs.close(); if(conn!=null) rs.close(); }catch(Exception e) { e.printStackTrace(); } } return result; } }
dao에서 로그인이 정상적으로 되었으면 2 또는 3이 return된다.
com.magic.controller - LoginServlet.java (@WebServlet/login.do)
dao에서 -1 0 1 2 3 중 하나를 받아서 각자에 맞는 페이지로 넘겨야한다.
회원 전용 페이지 (이름과 레벨 넣어야함)
개인정보가 넘어가야함
실행 결과를 VO 객체에 넣어서 사용할 수 있도록 한다. 받아온 값의 최종 목적은 db에서 활용하게 하는 것이다.
회원이 있다고 가정하고, 로그인을 위해 입력한 정보가 실제 db내용과 일치한지 확인한다.
조회된 정보를 VO 에 담아서 받아올 것이고, getMember() 를 만들어야한다.
package com.magic.controller; 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.magic.dao.EmployeesDAO; import com.magic.dto.EmployeesVO; @WebServlet("/login.do") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); rd.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String id = request.getParameter("id"); String pwd = request.getParameter("pwd"); String lev = request.getParameter("lev"); String url = null; EmployeesDAO empDAO = EmployeesDAO.getInstance(); int result = empDAO.userCheck(id,pwd,lev); if(result == 2 || result ==3) { EmployeesVO emp = new EmployeesVO(); }else { } }
employeesDAO
getMember 메소드 만들기
package com.magic.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import com.magic.dto.EmployeesVO; public class EmployeesDAO { private static EmployeesDAO instance = new EmployeesDAO(); public EmployeesDAO() { } public static EmployeesDAO getInstance() { return instance; } public Connection getConnection() throws Exception{ Connection conn = null; Context initContext = null; try { initContext = new InitialContext(); DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/OracleDB"); conn = ds.getConnection(); }catch(NamingException e) { e.printStackTrace(); }catch(SQLException e) { e.printStackTrace(); } return conn; } public int userCheck(String userid, String pwd, String lev) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = "select * from employees where id=?"; int result = 1; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1,userid); rs = pstmt.executeQuery(); if(rs.next()) { if(pwd.equals(rs.getString("pass"))) { //비밀번호 일치 if(lev.equals(rs.getString("lev"))) { //회원등급 일치 result = 2; //관리자로 로그인 성공 if(lev.equals("B")) { result = 3; //일반회원 로그인 성공 } }else { //level 불일치 result = 1; } }else { //비밀번호 불일지 result = 0; } }else { //아이디 불일치 result = -1; } }catch(Exception e) { e.printStackTrace(); }finally { try { if(rs!=null) rs.close(); if(pstmt!=null) rs.close(); if(conn!=null) rs.close(); }catch(Exception e) { e.printStackTrace(); } } return result; } public EmployeesVO getMember(String id) { EmployeesVO member = null; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = "select * from employees where id=?"; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1,id); rs=pstmt.executeQuery(); if(rs.next()) { member = new EmployeesVO(); member.setName(rs.getString(3)); member.setPass(rs.getString(2)); member.setPhone(rs.getString(7)); member.setId(rs.getString(1)); member.setLev(rs.getString(4)); member.setGender(rs.getInt(6)); member.setEnter(rs.getDate(5)); } }catch(Exception e) { e.printStackTrace(); }finally { try { if(rs!=null) rs.close(); if(pstmt!=null) rs.close(); if(conn!=null) rs.close(); }catch(Exception e) { e.printStackTrace(); } } return member; } }
LoginServlet.java
getMember 메소드를 사용해서 받아온 id를 보낸 후, 해당 id의 EmployeesVO 7개를 emp 변수에 넣는다.
userCheck메소드를 사용해서 받아온 id, pwd, lev 를 보낸 후 member 나 manager 면 2 와 3을, 로그인에 성공하지 못하면 -1 , 0 , 1 를 받아와 result 변수에 넣는다.
session을 사용하여 emp 와 result 를 처리한다.
member나 manager면 main.jsp
member가 아니면 login.jsp 로 이동하게 하자.
package com.magic.controller; 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.magic.dao.EmployeesDAO; import com.magic.dto.EmployeesVO; @WebServlet("/login.do") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); rd.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String id = request.getParameter("id"); String pwd = request.getParameter("pwd"); String lev = request.getParameter("lev"); String url = null; EmployeesDAO empDAO = EmployeesDAO.getInstance(); int result = empDAO.userCheck(id,pwd,lev); if(result == 2 || result ==3) { EmployeesVO emp = new EmployeesVO(); emp = empDAO.getMember(id); HttpSession session = request.getSession(); session.setAttribute("loginUser", emp); session.setAttribute("result", result); url="main.jsp"; }else { if(result == 1) { request.setAttribute("message", "don't match level"); }else if(result == 0 ){ request.setAttribute("message", "don't match password"); }else { request.setAttribute("message", "don't match id"); } url = "login.jsp"; } RequestDispatcher rd = request.getRequestDispatcher(url); rd.forward(request, response); } }
728x90'JSP' 카테고리의 다른 글
[JSP] login 2-3 (0) 2021.08.03 [JSP] login2-2 (0) 2021.08.02 [JSP] login1 (0) 2021.07.27 [JSP] JSTL 라이브러리 다운 / 기능 (0) 2021.07.22 [JSP] 표현언어 이용하여 프로퍼티 얻어오기 (0) 2021.07.22