ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP] login2-1
    JSP 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
Designed by Tistory.