[Servlet] 로그인, 로그아웃 만들기

2025. 3. 5. 18:15·Web

키워드 : 로그인 세션, tab 로그인, DB에서 데이터를 가져와 비밀번호 비교, 로그아웃 

 

login.jsp

로그인 화면

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
//out.print 적용했을 때 null 출력이 될 경우(session) => 연산기호
HttpSession hs = request.getSession();
String mid = (String)hs.getAttribute("mid");
String mnm = (String)hs.getAttribute("mnm");
if(mid !=null||mnm != null){	//로그인이 되어있을 경우 다시 로그인 하는 것을 방지 
	out.print("<script>"
		+"alert('이미 로그인하셨습니다.');"
		+"location.href='./main.jsp';"
		+"</script>");
	
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 로그인</title>
</head>
<body>

<form id="frm" method="post" action="./shop_loginok.do" onsubmit="return loginck()">
<p>회원 로그인</p>
<div>
<label>	<!-- 라벨에 onclick 쓰면 더블이벤트 발생 절대 노노 -->
<input type="radio" name="spart" value="P" onclick="partcheck(this.value)" checked>일반회원
</label>
<label>
<input type="radio" name="spart" value="C" onclick="partcheck(this.value)">사업자회원
</label>
<br>
<input type="text" name="sid" placeholder="아이디를 입력하세요"><br>
<input type="password" name="spw" placeholder="패스워드를 입력하세요"><br>

<span id="snoview" style="display:none;">
<input type="text" name="sno" placeholder="사업자등록번호를 입력하세요"><br>
</span>
<input type="submit" value="로그인">
</div>
</form>
</body>
<script src="./login.js?v=1"></script>
</html>
  • 사업자 등록 번호 입력란 label로 감싸 display 속성으로 보이게 안보이게 하기

login.js

function partcheck(part){
	var snoview = document.getElementById("snoview");
	if(part=="P"){
		snoview.style.display = "none";	
	}else{
		snoview.style.display = "block";	
	}
}

function loginck(){
	if(frm.sid.value==""){
		alert("아이디를 입력하세요");
		return false;
	}else if(frm.spw.value==""){
		alert("패스워드를 입력하세요");
		return false;
	}else{
		if(frm.spart[0].checked == true){	//일반회원 체크 
			//보내는 3가지 방법
			//frm.submit();
			//return true;
			return;
		}else if(frm.spart[1].checked == true){	//사업자회원 체크 
			if(frm.sno.value == ""){
				alert("사업자 번호를 입력하세요");
				return false;
			}else if(frm.sno.value.length < 10){
				alert("올바른 사업자 번호를 입력하세요");
				return false;
			}else{
				return true;
			}
		}
	}
}
  • 일반회원, 사업자회원 구분하여 사업자 등록 번호 인풋 보이게 안보이게
  • 입력란 비워져있는지 체크 //사업자번호는  개인 10자리 법인 13자리!

shop_loginok.java (servlet)

세션 생성, 아이디 패스워드 사업자번호 DB와 비교 

package shop;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class shop_loginok extends HttpServlet {
	private static final long serialVersionUID = 1L;
	PrintWriter pw = null;
	Connection con = null;
	PreparedStatement ps = null; 
	ResultSet rs = null;
	HttpSession session =null;
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		String spart = request.getParameter("spart");
		String sid = request.getParameter("sid");
		String spw = request.getParameter("spw");	//사용자가 입력한 비밀번호
		m_dbinfo db = new m_dbinfo();
		
		this.pw = response.getWriter();
		try {
			this.con = db.getConnection();
			//사용자가 입력한 값을 암호화로 처리해야만 Database와 비교가 가능 
			spw = new m_md5().md5_code(spw);	
			String sql="";	//Database Query문 
			//Resultset의 값을 받기위한 변수 
			String id="";	//아이디 
			String pw="";	//패스워드 
			String nm="";	//사업자번호 
			String no="";	//고객명 또는 회사명 
			
			if(spart.equals("P")) {		//개인회원 
			sql = "select sid,spw,snm from shop_member where sid=?";
			this.ps = this.con.prepareStatement(sql);
			this.ps.setString(1,sid);
			this.rs = this.ps.executeQuery();	//결과를 가져옴 
			while(this.rs.next()) {
				id = this.rs.getString("sid");
				pw = this.rs.getString("spw");
				nm = this.rs.getString("snm");
			}
			if(id.equals("")||nm.equals("")) {	//조회된 내용이 없을 경우 
				this.pw.write("<script>"
						+ "alert('해당 아이디를 확인할 수 없습니다.');"
						+ "history.go(-1);"
						+ "</script>");
			}else{	//조회된 내용이 있을 경우 
				if(spw.equals(pw)) {	//사용자가 입력한 패스워드 = DB에 저장된 패스워드
					this.session = request.getSession();	//세션 생성 
					this.session.setAttribute("mid", id);	//아이디를 세션 등록 
					this.session.setAttribute("mnm", nm);	//고객명을 세션 등록 
					this.pw.write("<script>"
							+ "alert('로그인하셨습니다.');"
							+ "location.href='./main.jsp';"
							+ "</script>");
				}
			}
			}else {		//사업자회원 
				String sno = request.getParameter("sno");
				sql = "select sid,spw,snm,sno from shop_member where sid=? and sno=?";
				this.ps = this.con.prepareStatement(sql);
				this.ps.setString(1,sid);
				this.ps.setString(2,sno);
				this.rs = this.ps.executeQuery();
				//처리방식 
			}
		}catch (Exception e) {
		}finally {
			try {
				this.con.close();
				this.pw.close();	
			}catch (Exception e) {
			}
		}
	}
}
  • DB 연결
  • 패스워드는 암호화해서 DB와 비교 
  • 개인회원일때
    • 아이디로 select 쿼리문 작성
    • 값을 가져와서 변수에 저장
    • 조회된 내용이 없을 경우 : 로그인 실패 알림 출력 
    • 조회된 내용이 있을 경우
      • 패스워드가 같을때 
        • 세션 생성 -> 아이디, 고객명을 세션에 등록 
        • 로그인 알림 출력 
  • 사업자회원일때 
    • + 사업자번호 

main.jsp

쇼핑몰 메인화면, 세션을 이용해 고객정보 출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
//out.print 적용했을 때 null 출력이 될 경우(session) => 연산기호
HttpSession hs = request.getSession();
String mid = (String)hs.getAttribute("mid");
String mnm = (String)hs.getAttribute("mnm");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쇼핑몰 메인 화면</title>
</head>
<body>
<% if(mid==null||mnm==null){	//session에 값이 없을 경우 %>
<input type="button" value="로그인">
<% }else {	//Controller에서 정상적으로 로그인을 하여 session이 적용되었을 경우 %>
[<%=mid %>] <%=mnm %>님 환영합니다. <input type="button" value="로그아웃" onclick="logout()">
<% } %>
</body>
<script>
function logout(){
	location.href='./logout.jsp';
}
</script>
</html>
  • 세션에 값이 없을 때
    • 로그인 버튼 
  • 로그인해서 session이 적용되었을때
    • 고객 정보 출력 
    • 로그아웃 버튼

logout.jsp

로그아웃, 세션 종료

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
HttpSession hs = request.getSession();
hs.invalidate();	//모든 session 값을 삭제 
out.print("<script>"
		+"alert('로그아웃 되셨습니다.');"
		+"location.href='./login.jsp';"
		+"</script>");	
%>

 

 

저작자표시 비영리 변경금지 (새창열림)
'Web' 카테고리의 다른 글
  • [jQuery] 기초
  • [Javascript] 정규식 코드
  • [Servlet] 회원가입 만들기
  • HTML + js + servlet + java + MySQL
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      net4
      io_dto
      net5~10
      net3
      datalist
      re2
      re_java10
      ab1
      net2
      net1
      exam1_1~10
      file25
      macbook pro m4
      java_io1~10
      spring-boot
      file24
      file25_t
      Oracle
      noticewriteok
      notice_writer
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    [Servlet] 로그인, 로그아웃 만들기
    상단으로

    티스토리툴바