[Servlet] 로그인 실습

sang·2024년 3월 4일

세션 로그인

pro09/WebContent/login3.html

<!DOCTYPE html>
<html>
<head></head>
<body>
  <form name="frmLogin" method="post" action="login" encType="UTF-8">
    아이디 :<input type="text" name="user_id"><br>
    비밀번호:<input type="password" name="user_pwd"><br>
    <input type="submit" value="로그인">
    <input type="reset" value="초기화">
  </form>
</body>
</html>

pro09/src/sec05/ex01/LoginServlet.java

package sec06.ex01;
...

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doHandle(request, response); }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doHandle(request, response); }

  private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    
    String user_id = request.getParameter("user_id");
    String user_pwd = request.getParameter("user_pwd");
    
    /* MemberVO 객체 생성 및 ID/PW 정보 설정 */
    MemberVO memberVO = new MemberVO();
    memberVO.setId(user_id);
    memberVO.setPwd(user_pwd);
    
    MemberDAO dao = new MemberDAO();
    boolean result = dao.isExisted(memberVO);
    if(result) {
      /* 세션에 정보 저장 */
      HttpSession session = request.getSession();
      session.setAttribute("isLogon", true);
      session.setAttribute("login.id", user_id);
      session.setAttribute("login.pwd", user_pwd);
      
      out.print("<html><body>");
      out.print("안녕하세요 " + user_id + "님!!!<br>");
      out.print("<a href='show'>회원정보 보기</a>");
      out.print("</body></html>");
    } else {
      out.print("<html><body><center>회원 아이디가 틀립니다.");
      out.print("<a href='login3.html'> 다시 로그인하기</a>");
      out.print("</body></html>");
    }
  }
}   

pro09/src/sec05/ex01/MemberDAO.java

package sec05.ex01;
...

public class MemberDAO {
  private DataSource dataFactory;
  
  public MemberDAO() {
    try {
      Context ctx=new InitialContext();
      Context envContext = (Context) ctx.lookup("java:/comp/env");
      dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
    } catch(Exception e) { e.printStackTrace(); }
  }
  ...
  
  public boolean isExisted(MemberVO memberVO) {
    boolean result = false;
    
    String id = memberVO.getId();
    String pwd = memberVO.getPwd();
    
    try {
      con = dataFactory.getConnection();
      
      /* 쿼리 구성 및 실행 */
      String query = "SELECT DECODE(COUNT(*), 1, 'true', 'false') AS RESULT FROM t_member"; //1개면 true, 아니면 false
      query += " WHERE id=? and pwd=?";
      pstmt = con.prepareStatement(query);
      pstmt.setString(1, id);
      pstmt.setString(2, pwd);
      ResultSet rs = pstmt.executeQuery();
      
      /* 결과 출력 */
      rs.next(); //커서를 첫번째 레코드에 위치
      result = Boolean.parseBoolean(rs.getString("result"));
      System.out.println("result=" + result);
    } catch (Exception e) { e.printStackTrace(); }
    return result;
  }
}   

pro09/src/sec05/ex01/ShowMember.java

package sec05.ex01;
...

@WebServlet("/show")
public class ShowMember extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    
    String id ="", pwd="" ;
    Boolean isLogon = false;
    
    HttpSession session = request.getSession(false);
    if(session != null) {
    	isLogon = (Boolean) session.getAttribute("isLogon");
        if(isLogon) { // 세션 O & 로그인 O
        	id = (String) session.getAttribute("login.id");
        	pwd = (String) session.getAttribute("login.pwd");
            /* 출력 */
        	out.print("<html><body>");
        	out.print("아이디: " + id+"<br>");
        	out.print("비밀번호: " + pwd+"<br>");
        	out.print("</body></html>");
        }
        else { response.sendRedirect("login3.html"); } // 세션 O & 로그인 X
    } else { response.sendRedirect("login3.html"); } // 세션 X
  }
}


*자바 웹을 다루는 기술

profile
CS 메모장

0개의 댓글