** 숙제 : DB연동하여 로그인 화면 처리
프로젝트 새로 만들어서 하기
Project name : TestCRUD
1. 로그인 페이지에서 id,pw를 입력하고 로그인을 할 수 있다.
login.jsp
<form action="/login/loginCheck.do" method="post">
<p>아이디 : <input type="text" name="id" value="<%=id%>" placeholder="아이디를 입력하세요" /></p>
<p>비밀번호 : <input type="text" name="pw" value="<%=pw%>" placeholder="비밀번호를 입력하세요" /></p>
<input type="submit" value="로그인" />
</form>
2. 로그인 페이지에서 id를 입력하고 pw를 입력하지 않고 로그인 버튼을 클릭 시,
"비밀번호를 입력해주세요." 메시지 출력
3. 로그인 페이지에서 pw를 입력하고 id를 입력하지 않고 로그인 버튼을 클릭 시,
"아이디를 입력해주세요." 메시지 출력
4. 로그인 페이지에서 존재하지 않는 id,pw를 입력하고 로그인 버튼을 클릭 시,
"존재하지 않는 회원입니다." 메시지 출력
2-4
LoginServlet.java
서블릿에서 LoginForm 체크 후 아이디,비밀번호가 누락되었거나 일치하지않는경우
다시 로그인 폼 페이지를 띄운다.
LoginServlet.java
@WebServlet("/login/*")
package kr.or.ddit.login.web;
import java.io.IOException;
import java.util.HashMap;
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 kr.or.ddit.login.service.ILoginService;
import kr.or.ddit.login.service.LoginServiceImpl;
import kr.or.ddit.vo.MemberVO;
@WebServlet("/login/*")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
HashMap<String, Object> errors = new HashMap<String, Object>();
//아이디와 비밀번호 누락시 다시 로그인페이지로 넘기기
if(id == null || id.equals("")) {
errors.put("idError", "아이디를 입력하여주세요");
System.out.println("아이디 누락");
}if(pw == null || pw.equals("")) {
errors.put("pwError", "비밀번호를 입력하여주세요");
System.out.println("비밀번호 누락");
}
if(errors.size() > 0) {
request.setAttribute("errors",errors);
request.setAttribute("id", id);
request.setAttribute("pw", pw);
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
}else { // 아이디, 비밀번호 모두 입력 시 일치여부 확인
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPw(pw);
ILoginService service = LoginServiceImpl.getInstance();
int answer = service.loginCheck(vo);
MemberVO gradeCheck = service.gradeCheck(id);
System.out.println(gradeCheck);
String msg ="";
if(answer > 0) {
msg = "존재하는 회원입니다.";
HttpSession session= request.getSession();
HashMap<String, Object> userInfo = new HashMap<String, Object>();
userInfo.put("id", id);
userInfo.put("pw", pw);
userInfo.put("grade", gradeCheck.getStatus());
session.setAttribute("userInfo", userInfo);
System.out.println(userInfo);
response.sendRedirect("/main/main.do");
}else {
msg = "존재하지 않는 회원입니다.";
request.setAttribute("msg", msg);
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
}
}
}
}
에러메시지를 담은 requst를 요청하여 로그인 폼에 회원아이디 존재여부 및 입력 누락여부를 띄운다.
login.jsp 전체 코드
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Form Page</title>
</head>
<body>
<%
Map<String, Object> errors = (Map<String, Object>)request.getAttribute("errors");
String id = (String)request.getAttribute("id");
String pw = (String)request.getAttribute("pw");
String msg = (String)request.getAttribute("msg");
if(id==null){
id="";
}
if(pw==null){
pw="";
}
%>
<form action="/login/loginCheck.do" method="post">
<p>아이디 : <input type="text" name="id" value="<%=id%>" placeholder="아이디를 입력하세요" /></p>
<p>비밀번호 : <input type="text" name="pw" value="<%=pw%>" placeholder="비밀번호를 입력하세요" /></p>
<input type="submit" value="로그인" /><%if(msg != null) out.print("<p>"+ msg + "</p>");%>
</form>
<%
if(errors !=null){
if(errors.get("idError") != null){
out.print("<font color='red'>" + errors.get("idError") + "</font>");
}else if(errors.get("pwError") != null){
out.print("<font color='red'>" + errors.get("pwError") + "</font>");
}
}
%>
</body>
</html>
5. 정상적인 회원 정보를 입력하고 로그인 버튼 클릭 시, 메인화면으로 이동
5-1. 회원 등급이 user면 회원 페이지로 이동하고
회원 등급이 admin면 관리자 페이지로 이동
MainServlet.java
@WebServlet("/main/*")
package kr.or.ddit.main.web;
import java.io.IOException;
import java.util.Map;
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;
@WebServlet("/main/*")
public class MainServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session= request.getSession();
Map<String, Object> userInfo = (Map<String, Object>) session.getAttribute("userInfo");
if(userInfo.get("grade").equals("user")){
//메인페이지로 이동
request.getRequestDispatcher("/WEB-INF/views/mainIndex.jsp").forward(request, response);
}else if(userInfo.get("grade").equals("admin")) {
//관리자페이지로 이동
request.getRequestDispatcher("/WEB-INF/views/adminPage.jsp").forward(request, response);
}
}
}
5-2. SQL Delveloper를 이용하여, 회원 2명의 데이터를 추가로 작성하고,
첫번째 회원은 user등급으로 두번째 회원은 admin등급으로 추가하시오
[첫번째 회원]
아이디 : user01 (컬럼명 : id)
비밀번호 : 1234 (컬럼명 : pw)
등급 : user (컬럼명 : status)
[두번째 회원]
아이디 : admin (컬럼명 : id)
비밀번호 : 1234 (컬럼명 : pw)
등급 : admin (컬럼명 : status)
6. 회원페이지와 관리자페이지는 로그인 후, 사용가능하도록 합니다.
7. 로그인 후, 회원페이지에서 로그아웃 처리 후 로그인 페이지로 이동합니다.
8. 로그인 후, 관리자페이지에서 로그아웃 처리 후 로그인 페이지로 이동합니다.
7-8
7. mainIndex.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Main Page</title>
</head>
<body>
<h1>Main Page</h1>
<input type="button" value="로그아웃" onclick="location.href='/login/loginForm.do'" />
</body>
</html>
8. adminPage.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>
<h1>Adim Page</h1>
<input type="button" value="로그아웃" onclick="location.href='/login/loginForm.do'" />
</body>
</html>
Oracle Sql Developer
테이블 생성 쿼리
CREATE TABLE MEMBER(
no number(8) not null,
id varchar2(100) not null,
pw varchar2(100) not null,
name varchar2(100) not null,
gender varchar2(100) default 'F' null,
email varchar2(100) default '' null,
profileimage varchar2(150) default '' null,
regdate date default sysdate null,
status varchar2(50) default 'Y' null,
constraint pk_member primary key(no)
);
시퀀스 생성 쿼리
CREATE SEQUENCE SEQ_MEMBER
INCREMENT BY 1 START WITH 1 NOCACHE;
테스트 데이터
INSERT INTO MEMBER(no,id,pw,name,gender,email,profileimage,regdate,status)
VALUES (SEQ_MEMBER.NEXTVAL,'admin','1234','관리자계정','F','jjiny@naver.com',null,null,null);
아이디 비밀번호 일치여부
--아이디,비밀번호 일치여부
select count(*) cnt
from member
where id='admin'
and pw='1234'
데이터 수정
UPDATE MEMBER
SET STATUS ='admin'
WHERE ID ='admin
회원등급 확인
--관리자 회원여부
SELECT ID FROM MEMBER WHERE STATUS='admin'
--일반 회원여부
SELECT ID FROM MEMBER WHERE STATUS='user'
전체쿼리
--회원테이블 생성쿼리
CREATE TABLE MEMBER(
no number(8) not null,
id varchar2(100) not null,
pw varchar2(100) not null,
name varchar2(100) not null,
gender varchar2(100) default 'F' null,
email varchar2(100) default '' null,
profileimage varchar2(150) default '' null,
regdate date default sysdate null,
status varchar2(50) default 'Y' null,
constraint pk_member primary key(no)
);
-- 시퀀스 생성 쿼리
CREATE SEQUENCE SEQ_MEMBER
INCREMENT BY 1 START WITH 1 NOCACHE;
--테스트데이터
INSERT INTO MEMBER(no,id,pw,name,gender,email,profileimage,regdate,status)
VALUES (SEQ_MEMBER.NEXTVAL,'user01 ','1234','테스트유저1','F','test1@naver.com',null,sysdate,'user');
SELECT * FROM MEMBER;
commit;
--아이디,비밀번호 일치여부
select count(*) cnt
from member
where id='admin'
and pw='1234'
UPDATE MEMBER
SET STATUS ='user'
WHERE ID ='park'
UPDATE MEMBER
SET STATUS ='admin'
WHERE ID ='admin'
--관리자 회원여부
SELECT ID FROM MEMBER WHERE STATUS='admin'
--일반 회원여부
SELECT ID FROM MEMBER WHERE STATUS='user'
SELECT * FROM MEMBER WHERE ID='admin'
COMMIT;
'공부 기록노트 > java' 카테고리의 다른 글
[Java] CRUD 보강하며 새로 알게 된 내용 정리 (0) | 2023.01.10 |
---|---|
[Java] Eclipse) iBatis 프레임워크 활용한 Mapper 작성/ JavaResources 셋팅 (0) | 2023.01.08 |
[Java] 이클립스 자동 새로고침 설정 (1) | 2023.01.05 |
[Java] android studio를 이용하여 별찍기 (0) | 2023.01.01 |
[Java] android studio를 이용하여 로또복권당첨번호 생성하기 (0) | 2023.01.01 |