login

getName

id 통해서 이름 얻기
해당 시퀀스의 id 값만 가져옴

name 가져오기

if(rs.next())
{
	name=rs.getString("name");
}
  • getName
public String getName(String id)
	{
		String name="";
		
		Connection conn=db.getConnection();
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		
		String sql="select * from idx where id=?";
		
		try {
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs=pstmt.executeQuery();
			
			if(rs.next())
			{
				name=rs.getString("name");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			db.dbClose(rs, pstmt, conn);
		}
		
		return name;
	}

isLogin

id에 맞는 pass인지 확인

id,비밀번호 맞으면 출력

if(rs.next())
	flag=true;
  • isLogin
public boolean isLogin(String id,String pass)
	{
		boolean flag=false;
		
		Connection conn=db.getConnection();
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		
		String sql="select * from idx where id=? and pass=?";
		
		try {
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, pass);
			rs=pstmt.executeQuery();
			
			//비밀번호가 id와 맞으면 true값 출력
			if(rs.next())
				flag=true;
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			db.dbClose(rs, pstmt, conn);
		}
		
		return flag;
	}

IdxDao.java

package idx.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import mysql.db.DBConnect;

public class IdxDao {

	DBConnect db=new DBConnect();
	
	//id 통해서 이름 얻기
	//해당 시퀀스의 id 값만 가져옴
	public String getName(String id)
	{
		String name="";
		
		Connection conn=db.getConnection();
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		
		String sql="select * from idx where id=?";
		
		try {
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs=pstmt.executeQuery();
			
			if(rs.next())
			{
				name=rs.getString("name");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			db.dbClose(rs, pstmt, conn);
		}
		
		return name;
	}
	
	
	//id에 맞는 pass인지 확인
	public boolean isLogin(String id,String pass)
	{
		boolean flag=false;
		
		Connection conn=db.getConnection();
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		
		String sql="select * from idx where id=? and pass=?";
		
		try {
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, pass);
			rs=pstmt.executeQuery();
			
			//비밀번호가 id와 맞으면 true값 출력
			if(rs.next())
				flag=true;
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			db.dbClose(rs, pstmt, conn);
		}
		
		return flag;
	}
}

htmlForm 먼저 작성

loginAction 이동

아이디와 비번이 맞는지 확인

IdxDao db=new IdxDao();
boolean flag=db.isLogin(id, pass);

login 성공

맞으면 세션 지정 후 로그인 메인으로 이동/판단은 메인에서 하기 때문

if(flag)
{
	//로그인 중인지 알 수 있는 세션저장
	session.setAttribute("loginok", "yes"); //상징적으로 로그인 성공의 경우 yes/ok 사용
	//아이디 세션 저장
	session.setAttribute("idok", id); //request로 받은 id값 저장
	//체크값 세션 저장...체크하면 값이 on,안하면 null
	session.setAttribute("saveok", save); //아이디저장 박스 체크유무
		
	//세션 유지시간
	session.setMaxInactiveInterval(60*60*8); //8시간동안 유지(생략시 30분)/아이디저장 시간도 같이 적용
		
	response.sendRedirect("loginMain.jsp");
}

로그인 세션값 넘기기

로그인 중인지 알 수 있는 세션저장
상징적으로 로그인 성공의 경우 yes/ok 사용
-> 값을 저장하고 받아오면 밑에 저장한 값들을 가져올 수 있음

session.setAttribute("loginok", "yes");

아이디 세션 저장

request로 받은 id값 저장

session.setAttribute("idok", id);

체크값 세션 저장

체크하면 값이 on,안하면 null
아이디저장 박스 체크유무
-> form id checkbox에 value값이 없으면 on,null

session.setAttribute("saveok", save);

세션 유지시간

8시간동안 유지(생략시 30분)/아이디저장 시간도 같이 적용

session.setMaxInactiveInterval(60*60*8);

다시 loginForm

세션으로부터 아이디 아이디저장(세이브체크)값 얻기

체크박스 여부로 저장하기 위해서 먼저 얻어와야 조건지정가능

String myid=(String)session.getAttribute("idok");

action에 세션지정한 체크값을 saveok로 지정했기에 그 값을 받아와야함

String saveid=(String)session.getAttribute("saveok");

save박스 체크했으면

boolean save=true;

아이디저장 박스가 체크가 안됐을 경우

if(saveid==null)
{
	//아이디 저장이 체크가 안되어있으면(null) 빈 칸이기에 빈값 넣어줌
	myid=""; //아이디저장을 체크하지 않을 경우 아이디 없앤다 / 체크 되어있을 경우 아이디는 그대로 남아있다
	save=false; //체크하지 않을 경우 false,그 이외에는 true니까 true가 된다
}

myid 값/아이디저장 박스 값

아이디 저장이 체크가 안되어있으면(null) 빈 칸이기에 빈값 넣어줌
아이디저장을 체크하지 않을 경우 아이디 없앤다 / 체크 되어있을 경우 아이디는 그대로 남아있다

체크박스 체크하지 않을 경우 false,그 이외에는 true니까 true가 된다

myid="";
save=false;

html에서 체크박스 값 저장

save는 유지 되어야해서 시간설정을 줘야한다
value값이 없으면 on null로 나옴

<%=save?"checked":"" %>>아이디저장

loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
<style type="text/css">
	div.loginform{
		width: 500px;
		margin-top: 100px;
		margin-left: 200px;
	}
</style>
</head>
<body>
<%
	//세션으로부터 아이디 아이디저장(세이브체크)값 얻기 -> 체크박스 여부로 저장하기 위해서 먼저 얻어와야 조건지정가능
	String myid=(String)session.getAttribute("idok");
	//action에 세션지정한 체크값을 saveok로 지정했기에 그 값을 받아와야함
	String saveid=(String)session.getAttribute("saveok");
	
	//save박스 체크했으면
	boolean save=true;
	
	//아이디저장 박스가 체크가 안됐을 경우
	if(saveid==null)
	{
		//아이디 저장이 체크가 안되어있으면(null) 빈 칸이기에 빈값 넣어줌
		myid=""; //아이디저장을 체크하지 않을 경우 아이디 없앤다 / 체크 되어있을 경우 아이디는 그대로 남아있다
		save=false; //체크하지 않을 경우 false,그 이외에는 true니까 true가 된다
	}
%>
	<div class="loginform">
		<form action="loginAction.jsp" method="post">
			<input type="text" name="id" style="width: 200px;"
			class="form-control" placeholder="로그인할아이디" required="required"
			value="<%=myid%>"><br>
			<input type="password" name="pass" style="width: 200px;"
			class="form-control" placeholder="로그인할 비밀번호" required="required"><br>
			
			<button type="submit" class="btn btn-success btn-lg"
			style="width: 200px;">로그인</button>
			<br>
			
			<%-- save는 유지 되어야해서 시간설정을 줘야한다 --%>
			<%-- value값이 없으면 on null로 나옴 --%>
			<input type="checkbox" name="savechk"
			<%-- 자바에서  boolean save가 체크 되어있으면 체크 아니면 빈값 --%>
			<%=save?"checked":"" %>>아이디저장
		</form>
	</div>
</body>
</html>

loginAction.jsp

<%@page import="idx.model.IdxDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<%
	//로그인에서 유일하게 저장하는 공간
	
	
	
	request.setCharacterEncoding("utf-8");

	String id=request.getParameter("id");
	String pass=request.getParameter("pass");
	String save=request.getParameter("savechk");
	
	//아이디와 비번이 맞는지 확인
	IdxDao db=new IdxDao();
	boolean flag=db.isLogin(id, pass);
	
	//맞으면 세션 지정 후 로그인 메인으로 이동/판단은 메인에서 하기 때문
	if(flag)
	{
		//로그인 중인지 알 수 있는 세션저장
		session.setAttribute("loginok", "yes"); //상징적으로 로그인 성공의 경우 yes/ok 사용
		//아이디 세션 저장
		session.setAttribute("idok", id); //request로 받은 id값 저장
		//체크값 세션 저장...체크하면 값이 on,안하면 null
		session.setAttribute("saveok", save); //아이디저장 박스 체크유무
		
		//세션 유지시간
		session.setMaxInactiveInterval(60*60*8); //8시간동안 유지(생략시 30분)/아이디저장 시간도 같이 적용
		
		response.sendRedirect("loginMain.jsp");
	}
	else
	{%>
		<script type="text/javascript">
			alert("아이디와 비밀번호가 맞지 않습니다");
			history.back();
		</script>
	<%}
%>
</body>
</html>

logout

logoutForm

loginAction에 저장한 세션값 읽어오기

세션으로 부터 idok읽어오기
loginAction에서 아이디 세션 저장해놓음

String id=(String)session.getAttribute("idok");

아이디에 해당하는 이름을 dao로부터 얻는다

IdxDao db=new IdxDao();
String name=db.getName(id);

logoutForm.jsp

<%@page import="idx.model.IdxDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<%-- 로그인된 상태 --%>
<%
	//세션으로 부터 idok읽어오기
	//loginAction에서 아이디 세션 저장해놓음
	String id=(String)session.getAttribute("idok");

	//아이디에 해당하는 이름을 dao로부터 얻는다
	IdxDao db=new IdxDao();
	String name=db.getName(id);
%>

<br><br>
<b style="color: green;"><%=name %></b>님이 로그인중~~~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="button" value="로그아웃" class="btn btn-danger"
<%-- 세션 remove로 로그아웃할  있다 --%>
onclick="location.href='logoutAction.jsp'">
<br><br>
<img alt="" src="../image/f3.png">
</body>
</html>

logoutAction

넘겨준 세션 key값(loginok) 삭제

로그아웃

로그인에 대한 세션값 삭제

session.removeAttribute("loginok");

메인 --> 로그인창으로 이동

response.sendRedirect("loginMain.jsp");

logoutAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<%
	//로그인에 대한 세션값 삭제 --> 로그아웃
	session.removeAttribute("loginok");

	//메인 --> 로그인창으로 이동
	response.sendRedirect("loginMain.jsp");
%>
</body>
</html>

loginMain

각각의 login logout form을 가져와서 한 곳에 모아주기

로그인 먼저 하는 이유는 로그인 먼저 해보고 회원가입 하고 그대로 쓰기 위해서
include로 longinok여부에 따른 loginok/loginout이 와야해서 가져와야함
dto는 필요없음

로그인에 필요한 세션 넘겨주기

하위 세션들을 넘겨주기 위해 넘겨주는 값

String loginok=(String)session.getAttribute("loginok");

login/logout 조건

if(loginok==null || loginok.equals(""))//로그아웃 상태
{%>
	<jsp:include page="loginForm.jsp"/>	
<%}
else //로그인 상태
{%>
	<jsp:include page="logoutForm.jsp"/>	
<%}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<%-- 로그인 먼저 하는 이유는 로그인 먼저 해보고 회원가입 하고 그대로 쓰기 위해서
	 include로 longinok여부에 따른 loginok/loginout이 와야해서 가져와야함
	 dto는 필요없음 --%>
<%
	String loginok=(String)session.getAttribute("loginok");
	
	if(loginok==null || loginok.equals(""))//로그아웃 상태
	{%>
		<jsp:include page="loginForm.jsp"/>	
	<%}
	else //로그인 상태
	{%>
		<jsp:include page="logoutForm.jsp"/>	
	<%}
%>
</body>
</html>
profile
백엔드 개발자로서 성장해 나가는 성현이의 블로그~

0개의 댓글