๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŒ  ์ž๋ฐ” ์„œ๋ฒ„ ํŽ˜์ด์ง€ JSP

JSP - MVC Model 1 / ๋กœ๊ทธ์ธ ๊ฒŒ์‹œํŒ ๊ตฌ์ถ•

by Meteora_ 2021. 3. 22.
728x90

1. Login View (login.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JAVA developers</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    
    <script src = "https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <link rel="stylesheet" href="RoginPageJava.css">
    
    <script src="https://kit.fontawesome.com/51db22a717.js" crossorigin="anonymous"></script>
    <link href="https://fonts.googleapis.com/css2?family=Alata&display=swap" rel="stylesheet">
    
    <script src="http://lab.alexcican.com/set_cookies/cookie.js" type="text/javascript" ></script>

</head>
<body>
<form action="loginAf.jsp" method = "post">
	 <div class="page-container">
        <div class="login-form-container shadow">
            <div class="login-form-right-side">
                <div class="top-logo-wrap">
                    
                </div>
                <h1><b>Welcome to the <br>Backend Developers Site</b></h1>
                <h4>HomePage</h4>
            </div>
            <div class="login-form-left-side">
                <div class="login-top-wrap">
                    <span>๊ณ„์ •์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!</span>
                    <button type = "button" class="create-account-btn shadow-light" onclick = "account()">ํšŒ์›๊ฐ€์ž…</button>
                </div>
                
                <div class="login-input-container">
                <h3 class="heading text__web-h5 grid-panel-web__title" data-testid="panel-title">
                	๋กœ๊ทธ์ธ</h3>
                     	
                    <div class="login-input-wrap input-id">
                        <i class="far fa-envelope"></i>
                        <input placeholder="์•„์ด๋””" id = "_id" name ="id" class = "idname" type="text">
                    </div>
                         
                    <div class="login-input-wrap input-password">
                        <i class="fas fa-key"></i>
                        <!-- ๋น„๋ฒˆ ๊ฐฏ์ˆ˜ ์ œํ•œ -->
                        <input placeholder="ํŒจ์Šค์›Œ๋“œ" id = "_pass" name ="pwd"  class = "idname" maxlength = "10" type="password">
                    </div>
                    <br>
                    <div class="login-top-wrap">
                    
                    <input type="checkbox" class="checkbox" id = "chk_save_id"><span> &nbsp;Remember your id</span>
                    <input type="checkbox" class="checkbox"><span> &nbsp;Keep login</span>
                    </div>
                </div>
                		
                <div class="login-btn-wrap">
                
                <button class="btn btn-lg btn-primary btn-block" type="submit"
                		>๋กœ๊ทธ์ธ</button>
                  
                    <a href="#" >๋น„๋ฐ€๋ฒˆํ˜ธ์ฐพ๊ธฐ</a>
                </div>
            </div>
        </div>
    </div>
    </form>

<script type="text/javascript">



/* function rogbtn(){
	/* if($("#idname").val() == ""){
		alert("๊ณ„์ •์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!");
	} */
	
function account() {
	location.href = "regi.jsp";
	
}

let user_id = $.cookie("user_id");
if(user_id != null){
	//์ €์žฅ๋œ ์•„์ด๋””๊ฐ€ ์žˆ๋‹ค๋ฉด
	//alert("์ฟ ํ‚ค์žˆ์Œ");
	//ํ™•์ธ์šฉ
	
	$("#_id").val(user_id);
	$("#chk_save_id").attr("checked","checked");
}

$("#chk_save_id").click(function() {
	
	if( $("#chk_save_id").is(":checked")){		//์ฒดํฌ๋˜์—ˆ์„๋•Œ
	
		alert("์ฒดํฌ๋จ");
		
		if($("#_id").val().trim() == ""){
			alert("์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");
			$("#chk_save_id").prop("checked",false); 			// ์•„์ด๋””๊ฐ€ ์—†์œผ๋ฉด ์ฒดํฌ์—†์• 
			
		}else{ 
			$.cookie("user_id",$("#_id").val().trim(), {expires:7, path:'./'});
			
	}
		
	}else{
		$.removeCookie("user_id", {path:'./'})
	}
		
});

</script>
</body>
</html>

2.๋กœ๊ทธ์ธ ํ›„ View (loginAf.jsp)

1. ์„ธ์…˜์ด์šฉ login ์ •๋ณด๋ฅผ ์ €์žฅ

2. ๋กœ๊ทธ์ธ ์„ฑ๊ณต์‹œ alert์ฐฝ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์ด๋ฆ„๊ณผ ํ•จ๊ป˜ '์•ˆ๋…•ํ•˜์„ธ์š” ~ ๋‹˜ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค'๋ž€ ์ฐฝ์ด ๋œธ.

3. MemberDao๋ฅผ ๋ถˆ๋Ÿฌ์˜จํ›„  MemberDto๋ฅผ ๋ถˆ๋Ÿฌ์™€ dao์— ์žˆ๋Š” login ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์„œ sql์ด ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋„๋กํ•œ๋‹ค.

 

public MemberDto login(MemberDto dto) {
		
		String sql = " SELECT ID, NAME, EMAIL, AUTH "
				+ " FROM MEMBER "
				+ " WHERE ID=? AND PWD=? ";

 

dto๊ฐ€ null๊ฐ’์œผ๋กœ ๋‚˜์˜ฌ๊ฒฝ์šฐ ํ•ด๋‹น ์•„์ด๋””์™€ ๋กœ๊ทธ์ธ์ด SELECT๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๋กœ๊ทธ์ธ ์š”๋ง.

 

<%@page import="dto.MemberDto"%>
<%@page import="dao.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
MemberDao dao = MemberDao.getInstance();

MemberDto dto = dao.login(new MemberDto(id, pwd, null, null, 0));

if(dto != null && !dto.getId().equals("")){

	//session ์— ๋กœ๊ทธ์ธ์ •๋ณด ์ €์žฅ

	session.setAttribute("login", dto);
	//session.setMaxInactiveInterval(30*60*60);
	%>
	
	<script type="text/javascript">
	alert("์•ˆ๋…•ํ•˜์„ธ์š” <%=dto.getId() %>๋‹˜ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค.");
	location.href = "bbslist.jsp";
	</script>
	<%
}else{
	%>
	<script type="text/javascript">
	alert("id๋‚˜ password๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค");
	location.href = "login.jsp";
	</script>
	<%
}
%>

</body>
</html>

db.DBConnection

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
	public static void initConnection() {
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//Class.forName() ์„ ์ด์šฉํ•ด์„œ ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ
			
			System.out.println("Driver Loading Success");
			
		} catch (ClassNotFoundException e) {
			
			System.out.println("Driver๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค");
			
		}
		
	}
	
	
	public static Connection getConnection() {
		//static ๋ถ™์—ฌ์ค€์ด์œ ๋Š” ์–ธ์ œ ์–ด๋””์„œ๋“  ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค
		Connection conn = null;
		
		try {
			conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.2:1521:xe", "hr","hr");
													//์ฃผ์†Œ๋Š” DB ์šฐํด๋ฆญ  Properties์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
			System.out.println("Oracle Connection Success");
			
		} catch (SQLException e) {
			
			System.out.println("DB๋ฅผ ์—ฐ๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค");
		}
		
		return conn;
				
	}
}

db.DBClose

package db;

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

public class DBClose {
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		
		try {
			
			if(conn != null) {
				conn.close();
			}
			if(stmt != null) {
				stmt.close();
			}
			if(rs != null) {
				rs.close();
			}
			
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
}

3. ๋กœ๊ทธ์ธ ํ™•์ธ Dao

 

package dao;

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

import db.DBClose;
import db.DBConnection;
import dto.MemberDto;

public class MemberDao {

	private static MemberDao dao = new MemberDao();
	
	private MemberDao() {
		DBConnection.initConnection();
	}
	
	public static MemberDao getInstance() {		
		return dao;
	}
	
	public boolean addMember(MemberDto dto) {
		
		String sql = " INSERT INTO MEMBER(ID, PWD, NAME, EMAIL, AUTH) "
					+ " VALUES(?, ?, ?, ?, 3) ";
		
		Connection conn = null;
		PreparedStatement psmt = null;		
		int count = 0;
		
		try {
			conn = DBConnection.getConnection();
			System.out.println("1/3 addMember success");
				
			psmt = conn.prepareStatement(sql);
			System.out.println("2/3 addMember success");
			
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPwd());
			psmt.setString(3, dto.getName());
			psmt.setString(4, dto.getEmail());
			
			count = psmt.executeUpdate();
			System.out.println("3/3 addMember success");
			
		} catch (SQLException e) {			
			e.printStackTrace();
			System.out.println("addMember fail");
		} finally {
			DBClose.close(conn, psmt, null);			
		}
		
		return count>0?true:false;
	}
	
	public boolean getId(String id) {
		String sql = " SELECT ID "
					+ "	FROM MEMBER "
					+ " WHERE ID=? ";
	/*	String sql = " SELECT COUNT(*) "
				+ "	FROM MEMBER "
				+ " WHERE ID=? ";
	*/	
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		
	//	String findid = null;
		boolean findid = false;
				
		try {
			conn = DBConnection.getConnection();
			System.out.println("1/3 getId success");
			
			psmt = conn.prepareStatement(sql);
			psmt.setString(1, id.trim());
			System.out.println("2/3 getId success");
			
			rs = psmt.executeQuery();
			System.out.println("3/3 getId success");
			
			if(rs.next()) {
				findid = true;
			}			
			
		} catch (SQLException e) {
			System.out.println("getId fail");
			e.printStackTrace();
		} finally {
			DBClose.close(conn, psmt, rs);			
		}
		
		return findid;
	}

MemerDao login ํ•จ์ˆ˜ (MemerDao)

 

public MemberDto login(MemberDto dto) {
		
		String sql = " SELECT ID, NAME, EMAIL, AUTH "
				+ " FROM MEMBER "
				+ " WHERE ID=? AND PWD=? ";
		
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		
		MemberDto mem = null;
		
		try {
			conn = DBConnection.getConnection();
			psmt = conn.prepareStatement(sql);
			System.out.println("1/6 login suc");
			
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPwd());
			
			System.out.println("2/6 login suc");
			
			rs = psmt.executeQuery();
			
			if(rs.next()) {
				String id = rs.getString(1);
				String name = rs.getString(2);
				String email = rs.getString(3);
				int auth = rs.getInt(4);
				
				mem = new MemberDto(id, null, name, email, auth);				
			}
			
			System.out.println("3/6 login suc");
			
		} catch (Exception e) {
			System.out.println("login fail");
			e.printStackTrace();
		} finally {
			DBClose.close(conn, psmt, rs);			
		}
				
		return mem;
	}

4. ํšŒ์›๊ฐ€์ž…(regi.jsp)

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.center{
	margin: auto;
	width: 60%;
	border: 3px solid #0000ff;
	padding: 10px;
}
</style>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

</head>
<body>

<h2>ํšŒ์›๊ฐ€์ž…</h2>

<div class="center">

<form action="regiAf.jsp" method="post">

<table border="1">
<tr>
	<td>์•„์ด๋””</td>
	<td>
		<input type="text" name="id" id="_id" size="20"><br>		
		<!-- idํ™•์ธ(ajax) p, button-->		
		<p id="idcheck" style="font-size: 8px"></p>
		<input type="button" id="btn" value="idํ™•์ธ">		
	</td>
</tr>
<tr>
	<td>ํŒจ์Šค์›Œ๋“œ</td>
	<td>
		<input type="text" name="pwd" id="_pwd" size="20">
	</td>
</tr>
<tr>
	<td>์ด๋ฆ„</td>
	<td>
		<input type="text" name="name" size="20">
	</td>
</tr>
<tr>
	<td>์ด๋ฉ”์ผ</td>
	<td>
		<input type="text" name="email" size="20">
	</td>
</tr>
<tr>
	<td colspan="2">
		<input type="submit" value="ํšŒ์›๊ฐ€์ž…">
	</td>
</tr>

</table>


</form>

</div>

<script type="text/javascript">
$(function () {
	
	$("#btn").click(function () {
		
		$.ajax({
			type: "post",
			url: "idcheck.jsp",
		//	data: "id=" + $("#_id").val(),
			data: { "id":$("#_id").val() },
			success:function( data ){
			//	alert('success');	
				alert(data.trim());
				
				if(data.trim() == "YES"){
					$("#idcheck").css("color", "#0000ff");
					$("#idcheck").html('์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” id์ž…๋‹ˆ๋‹ค');
				}else{
					$("#idcheck").css("color", "#ff0000");
					$("#idcheck").html('์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” id์ž…๋‹ˆ๋‹ค');
					$("#_id").val("");
				}
			},
			error:function(){
				alert('error');
			}			
		});
		
	});	
});
</script>

</body>
</html>

idcheck.jsp

<%@page import="dao.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
String id = request.getParameter("id");
System.out.println("id:" + id);

MemberDao dao = MemberDao.getInstance();
boolean b = dao.getId(id);

if(b == true){	// id์žˆ์Œ
	out.println("NO");
}else{			// id์—†์Œ
	out.println("YES");
}

%>

 

5. ํšŒ์›๊ฐ€์ž…(regiAf.jsp)

<%@page import="dto.MemberDto"%>
<%@page import="dao.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>    
    

<!-- DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ -->
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email"); 

System.out.println(id + " " + pwd + " " + name + " " + email);


%>


<!-- ์ด๋™ -->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>regiAf.jsp</title>
</head>
<body>

<%
MemberDao dao = MemberDao.getInstance();

MemberDto dto = new MemberDto(id, pwd, name, email, 0);
boolean isS = dao.addMember(dto);
if(isS){
	%>
	<script type="text/javascript">
	alert("์„ฑ๊ณต์ ์œผ๋กœ ๊ฐ€์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค");
	location.href = "login.jsp";
	</script>
	<%
}else{
	%>
	<script type="text/javascript">
	alert("๋‹ค์‹œ ๊ธฐ์ž…ํ•ด ์ฃผ์‹ญ์‹œ์˜ค");
	location.href = "regi.jsp";
	</script>
	<%
}
%>

</body>
</html>

6. ๋กœ๊ทธ์ธ ์„ฑ๊ณต์‹œ ๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ๋กœ ์ด๋™ VIEW (bbslist.jsp)

<%@page import="dto.BbsDto"%>
<%@page import="java.util.List"%>
<%@page import="dao.BbsDao"%>
<%@page import="dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
Object ologin = session.getAttribute("login");
MemberDto mem = null;
if(ologin == null){
	%>	
	<script>
	alert('๋กœ๊ทธ์ธ ํ•ด ์ฃผ์‹ญ์‹œ์˜ค');
	location.href = "login.jsp";
	</script>	
	<%
}
mem = (MemberDto)ologin;
%>

<%!
// ๋Œ“๊ธ€์˜ depth์™€ image๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜	
// depth = 1   ' '->	
// depth = 2   '  '->
public String arrow(int depth){
	String rs = "<img src='./image/arrow.png' width='20px' heiht='20px'>";
	String nbsp = "&nbsp;&nbsp;&nbsp;&nbsp;";	// ์—ฌ๋ฐฑ
	
	String ts = "";
	for(int i = 0;i < depth; i++){
		ts += nbsp;
	}
	
	return depth==0 ? "":ts + rs;	
}

%>


<%
// dao๋ถ€ํ„ฐ list
BbsDao dao = BbsDao.getInstance();

List<BbsDto> list = dao.getBbslist();
System.out.println("dao๋ถ€ํ„ฐ list");
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bbslist(Bulletin Board System) = ์ „์ž ๊ฒŒ์‹œํŒ</title>
</head>
<body>
 <h4 align="right" style="background-color: #f0f0f0">ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค <%=mem.getId() %>๋‹˜</h4>
 
<h1>๊ฒŒ์‹œํŒ</h1>

<div align="center">

<table border="1">
<col width="70"><col width="600"><col width="150">
<tr>
	<th>๋ฒˆํ˜ธ</th><th>์ œ๋ชฉ</th><th>์ž‘์„ฑ์ž</th>
</tr>
<%
if(list == null || list.size() == 0){
	%>
	<tr>
		<td colspan="3">์ž‘์„ฑ๋œ ๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค</td>
	</tr>
	<%
}else{
	
	for(int i = 0;i < list.size(); i++){
		BbsDto bbs = list.get(i);
		%>
		<tr>
			<th><%=i + 1 %></th>
			<td>
				<%=arrow(bbs.getDepth()) %>		<!-- ์—ฌ๋ฐฑ + ์ด๋ฏธ์ง€ -->
				<a href="bbsdetail.jsp?seq=<%=bbs.getSeq() %>">
					<%=bbs.getTitle() %>
				</a>
			</td>
			<td><%=bbs.getId() %></td>
		</tr>
		<%
	}
}
%>
</table>

<br><br>
<a href="bbswrite.jsp">๊ธ€์“ฐ๊ธฐ</a>

</div>


</body>
</html>

7. ๊ฒŒ์‹œํŒ ๊ธ€์“ฐ๊ธฐ VIEW (bbswrite.jsp)

<%@page import="dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bbswrite.jsp</title>
</head>
<body>
<%
MemberDto mem = (MemberDto)session.getAttribute("login");
if(mem == null){
	response.sendRedirect("login.jsp");
	%>
	<script type="text/javascript">
	location.href = "";
	</script>
	<%
}
%>  

<a href="logout.jsp">๋กœ๊ทธ ์•„์›ƒ</a>

<h1>๊ธ€์“ฐ๊ธฐ</h1>

<div align="center">

<form action="bbswriteAf.jsp" method="post">

<table border="1">
<col width="200"><col width="400">

<tr>
	<th>์•„์ด๋””</th>
	<td>
		<%-- <input type="text" name="id" size="50px" value="<%=mem.getId() %>"> --%>
		<input type="text" name="id" size="50px" value=${login.id } readonly="readonly">
	</td>
</tr>

<tr>
	<th>์ œ๋ชฉ</th>
	<td>
		<input type="text" name="title" size="50px">
	</td>
</tr>

<tr>
	<th>๋‚ด์šฉ</th>
	<td>
		<textarea rows="20" cols="50px" name="content"></textarea>
	</td>
</tr>
<tr>
	<td colspan="2">
		&nbsp;&nbsp;<input type="submit" value="๊ธ€์“ฐ๊ธฐ">
	</td>
</tr>

</table>

</form>
</div>

<a href="bbslist.jsp">๊ธ€๋ชฉ๋ก</a>


</body>
</html>

๋Œ“๊ธ€