JSP 로그인 구현 - JSP logeu-in guhyeon

[ 기본 셋팅 ]

1) home_user 테이블 생성

CREATE TABLE home_user( id VARCHAR2(300) NOT NULL, pwd VARCHAR2(200) NOT NULL, name VARCHAR2(200) NOT NULL, email VARCHAR2(300), gender VARCHAR2(200) NOT NULL, birthday DATE, phone VARCHAR2(300) NOT NULL, address VARCHAR2(500) NOT NULL, hit NUMBER, // 추천 운동 카테고리 home_level VARCHAR2(300), admin CHAR(1) CHECK(admin IN('y','n')), CONSTRAINT PK_home_user PRIMARY KEY(id) );INSERT INTO home_user VALUES('hong','1234','홍길동','','male', '2000-01-01','010-0000-0000','서울특별시 강남구 역삼동','0','상','y'); // 일단 테스트로 값을 넣었음 , 나중엔 UPDATE로 사용자 입력 값 넣을 예정

2) 폴더 및 JSP 생성하기

webcontent안에 user폴더 만들기

user폴더 안에 login.jsp / login_ok.jsp / logout.jsp / logout_ok.jsp 만들기

3) UserVO 만들기

package com.sist.dao; import java.util.*; public class UserVO { private String id; private String pwd; private String name; private String email; private String gender; private Date birthday; private String phone; private String address; private int hit; private String home_level; private String admin; private String msg; // db엔 없음 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getHit() { return hit; } public void setHit(int hit) { this.hit = hit; } public String getHome_level() { return home_level; } public void setHome_level(String home_level) { this.home_level = home_level; } public String getAdmin() { return admin; } public void setAdmin(String admin) { this.admin = admin; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }

[ 로그인 처리 ]

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% // 로그인 처리 String id=(String)session.getAttribute("id"); // 로그인 화면 변환 String log_jsp=""; if(id==null) // 로그인이 안된 상태 log_jsp="../user/login.jsp"; else // 로그인이 된 상태 log_jsp="../user/logout.jsp"; %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>로그인 구현</title> </head> <body> <div class="container"> <!-- log_jsp 화면 include --> <jsp:include page="<%=log_jsp %>"></jsp:include> </div> </body> </html>

login.jsp

method → get / post (감춰서 보내기 / 그냥 보내기) action → 데이터를 받을 파일명 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>로그인 화면구현</title> </head> <body> <div class="login"> <form method=post action="../user/login_ok.jsp"> <h2>로그인</h2> <div class="id_area"> <input type=text name=id placeholder="아이디"> </div> <div class="pwd_area"> <input type=text name=pwd placeholder="비밀번호"> </div> <input type=submit value="로그인" class="login_btn"> </form> </div> </body> </html>

login_ok.jsp

login_ok.jsp => login.jsp의 태그에서 보낸 값을 받기 name과 받는 getParameter 뒤에 값이 같아야 값을 받을 수 있음<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="com.sist.dao.*"%> <% // 1. 사용자가 보낸 id,pwd 받기 String id=request.getParameter("id"); String pwd=request.getParameter("pwd"); // 2. DAO에서 보낸 값 받기 UserVO vo=UserDAO.userLogin(id, pwd); // 3. 로그인이 되면 => main.jsp // id가 틀린 경우 => 로그인 창으로 이동하기 if(vo.getMsg().equals("NOID")) { %> <!-- Ajex --> <script> alert("ID가 존재하지 않습니다"); history.back(); </script> <% } // id가 존재 => 비밀번호가 틀린 경우 로그인창으로 이동하기 else if(vo.getMsg().equals("NOPWD")){ %> <script> alert("비밀번호가 틀립니다"); history.back(); </script> <% } // id 존재하고 pwd 맞는 경우 => id,name,admin여부를 서버에 저장하고 main.jsp로 이동 (session) else{ session.setAttribute("id", vo.getId()); session.setAttribute("name", vo.getName()); session.setAttribute("admin", vo.getAdmin()); // 사용하고있는 모든 JSP에서 세션에 등록된 모든 데이터 사용이 가능 response.sendRedirect("../main/main.jsp"); } %>

UserDAO.java

package com.sist.dao; import java.io.*; import java.util.*; import org.apache.ibatis.io.*; import org.apache.ibatis.session.*; public class UserDAO { // XML을 읽어서 데이터를 저장하는 객체 => 공통모듈 private static SqlSessionFactory ssf; static { try { Reader reader=Resources.getResourceAsReader("Config.xml"); ssf=new SqlSessionFactoryBuilder().build(reader); // getConnection,disConnection 대체 }catch (Exception ex) { ex.printStackTrace(); } } // 로그인 처리가 되면 session에 저장해야함 (id,name,admin) public static UserVO userLogin(String id,String pwd) { UserVO vo=new UserVO(); // 연결 SqlSession session=null; try { // 연결 session=ssf.openSession(); // id가 몇개 존재하는지 확인하기 int count=session.selectOne("userIdCheck",id); // id가 없다면 NOID 메세지 보내기 if(count==0) { vo.setMsg("NOID"); } // id가 존재한다면 else { // id가 존재하면 user정보 가져오기 vo=session.selectOne("userGetInfoData",id); // user정보의 pwd와 사용자가 입력한 pwd 비교하기 if(pwd.equals(vo.getPwd())) { vo.setMsg("OK"); } // 비밀번호가 틀리면 else { vo.setMsg("NOPWD"); } } }catch (Exception ex) { ex.printStackTrace(); }finally { if(session!=null) session.close(); } return vo; } }

[ DB 처리 ]

user-mapper.xml 

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "//mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.sist.dao.user-mapper"> <!-- Login --> <!-- id 체크하기 --> <select id="userIdCheck" resultType="int" parameterType="String"> SELECT COUNT(*) FROM home_user WHERE id=#{id} <!-- 0 = id가 없다 / 1 => id가 존재 --> </select> <!-- 비밀번호 확인 --> <select id="userGetInfoData" resultType="com.sist.dao.UserVO" parameterType="String"> SELECT pwd,id,name,admin FROM home_user WHERE id=#{id} </select> <!-- 회원가입 , 아이디중복체크 , 우편번호--> <!-- 회원수정 --> <!-- 회원탈퇴 --> <!-- 아이디찾기 --> <!-- 비밀번호찾기 --> <!-- 비밀번호 변경 --> <!-- Admin 회원관리 --> </mapper>

db.properties

driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@localhost:1521:XE username=hr password=happy

Config.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "//mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 오라클을 연결하기 위한 환경설정 : 한개만 사용 --> <!-- properties 파일 읽기 --> <properties resource="db.properties"/> <typeAliases> <!-- UserVO를 등록 --> <typeAlias type="com.sist.dao.UserVO" alias="UserVO"/> </typeAliases> <!-- 오라클 연결하는 부분 : getConnection() --> <environments default="development"><!-- 개발 환경을 만든다 --> <environment id="development"> <transactionManager type="JDBC"/> <!-- 오라클 정보를 모아서 MyBatis 라이브러리에 전송 : DataSource --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/sist/dao/user-mapper.xml"/> <!-- 나중엔 vo / mapper / dao 따로 패키지로 묶어서 한번에 선언할 예정 --> </mappers> </configuration>

[ 로그아웃 처리 ]

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>로그아웃</title> </head> <body> <div class=logout> <div> <%= session.getAttribute("name") %>님이 로그인 되었습니다. </div> <div> <% String admin=(String)session.getAttribute("admin"); // 관리자와 일반유저로 분리 if(admin.equals("y")) { %> <span>관리자</span> <% } else{ %> <span>일반유저</span> <% } %> </div> <div class="logout_btn"> <form method=post action="../user/logout_ok.jsp"> <input type=submint value="로그아웃" class="btn"> </form> </div> </div> </body> </html>

logout_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% // session에 등록된 데이터 전체 삭제 session.invalidate(); // main.jsp로 이동 response.sendRedirect("../main/main.jsp"); %>

Toplist

최신 우편물

태그