1월 28일 MovieChart, jspSamples

2020. 6. 13. 17:43프론트엔드 & 백엔드 개발자 과정/jsp

<< MovieChart index >>

<%@page import="main.MovieVo"%>
<%@page import="java.util.List"%>
<%@page import="main.MovieManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
List<MovieVo> list = MovieManager.getCGVdata();

for(int i = 0;i < list.size(); i++){
	System.out.println(list.get(i).toString());
}

// list -> json
String jsonlike = "[";

for(MovieVo m : list){
	jsonlike += "{ name:'" + m.getTitle() + "', y:" + m.getLike() + "},";
}

jsonlike = jsonlike.substring(0, jsonlike.lastIndexOf(",")); // 맨끝의 콤마만 제거

jsonlike += "]";

System.out.println(jsonlike);

request.setAttribute("jsonlike", jsonlike);
%>    
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>

</head>
<body>

<div id="container" style="min-width: 310px; height: 400px; max-width: 600px; margin: 0 auto"></div>
<script type="text/javascript">
Highcharts.chart('container', {
	  chart: {
	    plotBackgroundColor: null,
	    plotBorderWidth: null,
	    plotShadow: false,
	    type: 'pie'
	  },
	  title: {
	    text: '영화가 좋다'
	  },
	  tooltip: {
	    pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
	  },
	  plotOptions: {
	    pie: {
	      allowPointSelect: true,
	      cursor: 'pointer',
	      dataLabels: {
	        enabled: true,
	        format: '<b>{point.name}</b>: {point.percentage:.1f} %'
	      }
	    }
	  },
	  series: [{
	    name: 'Brands',
	    colorByPoint: true,
	    data: <%=request.getAttribute("jsonlike") %>
	  }]
	});

</script>

</body>
</html>

< MovieVo.java >

package main;

import java.io.Serializable;

public class MovieVo implements Serializable {

	private String title;
	private int like;	// 좋아요 횟수
	
	public MovieVo() {		
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public int getLike() {
		return like;
	}

	public void setLike(int like) {
		this.like = like;
	}

	@Override
	public String toString() {
		return "MovieVo [title=" + title + ", like=" + like + "]";
	}
}

< mainClass.java >

package main;

public class mainClass {

	public static void main(String[] args) {
		
		MovieManager.getCGVdata();

	}
}

< MovieManager.java >

package main;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class MovieManager {

	public static List<MovieVo> getCGVdata() {
		
		Document doc;
		
		List<MovieVo> list = new ArrayList<MovieVo>();
		
		try {
			doc = Jsoup.connect("http://www.cgv.co.kr/movies/").get();
		
			// 영화제목
			Elements titles = doc.select("div.box-contents strong.title");
			/*
			 <div class="box-contents">
                 <a href="/movies/detail-view/?midx=82999">
                     <strong class="title">남산의 부장들</strong>
                 </a> 			 
			 */
			Elements likes =  doc.select("div.box-contents span.count strong i");
			/*
			 <span class="count"> 
                 <strong><i>6,673</i><span>명이 선택</span></strong>
			 */
			
			for (int i = 0; i < 7; i++) {
				Element eTitle = titles.get(i);
				String title = eTitle.text();
				System.out.print(title + " ");
				
				Element eLike = likes.get(i);
				String slike = eLike.text().replace(",", "");
				System.out.println(slike);
				
				int like = Integer.parseInt(slike);
				
				MovieVo vo = new MovieVo();
				vo.setTitle(title);
				vo.setLike(like);
				
				list.add(vo);
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return list;

	}

}

<< jspSamples index >>

<%@ 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>
</head>
<body>

<%
response.sendRedirect("login.jsp");
%>

</body>
</html>

< MemberDto >

package dto;

import java.io.Serializable;

/*
DROP TABLE MEMBER
CASCADE CONSTRAINTS;

CREATE TABLE MEMBER(
	ID VARCHAR2(50) PRIMARY KEY,
	PWD VARCHAR2(50) NOT NULL,
	NAME VARCHAR2(50) NOT NULL,
	EMAIL VARCHAR2(50) UNIQUE,
	AUTH NUMBER(1) NOT NULL
);
 */

public class MemberDto implements Serializable {

	private String id;
	private String pwd;
	private String name;
	private String email;
	private int auth;	// 사용자(3)/관리자(1)
	
	public MemberDto() {		
	}

	public MemberDto(String id, String pwd, String name, String email, int auth) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
		this.auth = auth;
	}

	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 int getAuth() {
		return auth;
	}

	public void setAuth(int auth) {
		this.auth = auth;
	}

	@Override
	public String toString() {
		return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", auth=" + auth + "]";
	}
	
	
}

< 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");
			
			System.out.println("Driver Loading Success!");			
		} catch (ClassNotFoundException e) {			
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() {		
		Connection conn = null;		
		try {
			conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.2.75:1521:xe", "hr", "hr");
			
			System.out.println("DB Connection Success!");			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return conn;
	}
}

< DBClose >

package db;

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

public class DBClose {

	public static void close(PreparedStatement psmt, Connection conn, ResultSet rs) {
		try {
			if(psmt != null) {			
				psmt.close();			
			}
			if(conn != null) {
				conn.close();				
			}
			if(rs != null) {
				rs.close();
			}
		} catch (SQLException e) {			
			e.printStackTrace();
		}		
	}
}

< oldlogin.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 #8ac007;
	padding: 10px;
}

</style>

<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="http://lab.alexcican.com/set_cookies/cookie.js" type="text/javascript" ></script>

</head>
<body>

<h2>Login Page</h2>

<div align="center">

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

<table border="1">
<tr>
	<td>아이디</td>
	<td>
		<input type="text" id="id" name="id" size="20"><br>
		<input type="checkbox" id="chk_save_id">Save id
	</td>
</tr>
<tr>
	<td>패스워드</td>
	<td>
		<input type="password" name="pwd" size="20">
	</td>
</tr>
<tr>
	<td colspan="2">
		<input type="submit" value="로그인">
		<button type="button" onclick="location.href='regi.jsp'">회원가입</button>
	</td>
</tr>

</table>

</form>
</div>

<script type="text/javascript">
/*
 	session : Java -> Server (login한 정보) Object
 	cookie : Java Script -> Client (login했던 id)
 
$.cookie("user_id", "abc123"); 	// 쿠키 생성 
 	
$.removeCookie("user_id", { path:'./'});	// 쿠키 삭제
*/


var user_id = $.cookie("user_id");	// 쿠키로 접근할 수 있는 요소
if(user_id != null){
//	alert("쿠키 있음");
	$("#id").val(user_id);
	$("#chk_save_id").attr("checked", "checked");	// == .prop("checked", true);
}

$("#chk_save_id").click(function () {
	
	if($("#chk_save_id").is(":checked")){
	//	alert("체크됨");
		if( $("#id").val().trim() == "" ){
			alert("ID를 입력해 주십시오");
			$("#chk_save_id").prop("checked", false);
		}else{
			// 쿠키 저장
			$.cookie("user_id", $("#id").val().trim(), { expires:7, path:'./' }); 	// 7일 동안 현재 경로에 저장하겠다
			
		}
	}else{
		$.removeCookie("user_id", { path:'./' });	// 체크를 해제하면 쿠키 날라감
	}
	
});

</script>



</body>
</html>

< BbsDto >

package dto;

import java.io.Serializable;

public class BbsDto implements Serializable {

	private int seq;
	private String id;	// 작성자
	
	private int ref;	// 그룹번호
	private int step;	// 행(row) 번호
	private int depth;	// 깊이
	
	private String title;
	private String content;
	private String wdate;	// 작성일
	
	private int del;
	private int readcount;	// 조회수
	
	public BbsDto() {		
	}

	public BbsDto(int seq, String id, int ref, int step, int depth, String title, String content, String wdate, int del,
			int readcount) {
		super();
		this.seq = seq;
		this.id = id;
		this.ref = ref;
		this.step = step;
		this.depth = depth;
		this.title = title;
		this.content = content;
		this.wdate = wdate;
		this.del = del;
		this.readcount = readcount;
	}

	public BbsDto(String id, String title, String content) {
		super();
		this.id = id;
		this.title = title;
		this.content = content;
	}

	public int getSeq() {
		return seq;
	}

	public void setSeq(int seq) {
		this.seq = seq;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getRef() {
		return ref;
	}

	public void setRef(int ref) {
		this.ref = ref;
	}

	public int getStep() {
		return step;
	}

	public void setStep(int step) {
		this.step = step;
	}

	public int getDepth() {
		return depth;
	}

	public void setDepth(int depth) {
		this.depth = depth;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getWdate() {
		return wdate;
	}

	public void setWdate(String wdate) {
		this.wdate = wdate;
	}

	public int getDel() {
		return del;
	}

	public void setDel(int del) {
		this.del = del;
	}

	public int getReadcount() {
		return readcount;
	}

	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}

	@Override
	public String toString() {
		return "BbsDto [seq=" + seq + ", id=" + id + ", ref=" + ref + ", step=" + step + ", depth=" + depth + ", title="
				+ title + ", content=" + content + ", wdate=" + wdate + ", del=" + del + ", readcount=" + readcount
				+ "]";
	}
	
	
	
}

< login.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>

<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="http://lab.alexcican.com/set_cookies/cookie.js" type="text/javascript" ></script>

<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>

<form id="frm" method="post">

<!-- <div style="padding: 100px 0 0 250px;"> -->
<div style="padding: 200px 0px 0 400px;">
<div id="login-box">

<h2>Login Page</h2>
홍길동 홈페이지에 오신 것을 환영합니다 
<br>
<br>

<div id="login-box-name" style="margin-top:20px;">User Id:</div>
<div id="login-box-field" style="margin-top:20px;">
<input id="id" name="id" class="form-login" title="Username" size="30" maxlength="50" />
<input type="checkbox" id="chk_save_id">Save id 
</div>
<div id="login-box-name">Password:</div>
<div id="login-box-field">
<input id="pwd" name="pwd" type="password" class="form-login" title="Password" value="" size="30" maxlength="48" />
</div>
<br>

<span class="login-box-options">
New User?  <a href="regi.jsp" style="margin-left:30px;">Register Here</a>
</span>
<br/>
<br/>
<!-- <input style="margin-left:100px;" type="submit" value="Login" /> -->
<input type="button" style="margin-left:100px;" id="_btnLogin" value="Login">
</div>
</div>

</form>


<script type="text/javascript">

$("#_btnLogin").click(function() {	
	if( $("#id").val().trim() == "" ){
		alert("id를 입력해 주십시오");
		$("#id").focus();
	}
	else if( $("#pwd").val().trim() == "" ){
		alert("password를 입력해 주십시오");
		$("#pwd").focus();
	}
	else{
		$("#frm").attr({"action":"loginAf.jsp", "target":"_self"}).submit();		
	}	
});

var 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("id를 입력해 주십시오");
			$("#chk_save_id").prop("checked", false);			
		}else{	// 정상 기입한 경우
			// 쿠키 저장
			$.cookie("user_id", $("#id").val().trim(), {expires:7, path:'./'});
		}
	}
	else{
	//	alert("체크 없어짐");
		$.removeCookie("user_id", {path:'./'});
	}
	
});

</script>


</html>

< loginAf.jsp >

<%@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");

// System.out.println("id:" + id + " pwd:" + pwd);

MemberDao dao = MemberDao.getInstance();

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

if(mem != null && !mem.getId().equals("")){
	// login 정보의 저장
	session.setAttribute("login", mem);	
	session.setMaxInactiveInterval(30*60*60);
%>
	<script>
	alert("안녕하세요 <%=mem.getName() %>님");
	location.href = "./bbslist.jsp";
	</script>
<%	
}else{
%>
	<script>
	alert("id나 password를 확인하십시오");
	location.href = "./login.jsp";
	</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");
}

%>

< regi.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>regi.jsp</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>

<h1>회원가입</h1>
<p>환영합니다</p>

<div align="center">

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

<table border="1">
<tr>
	<td>아이디</td>
	<td>
		<input type="text" id="id" name="id" size="20">
		id 확인
		<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" 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 () {
	// alert("btn click");
	
		$.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>

< 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");
%>   

<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");

System.out.println("id:" + id);
System.out.println("pwd:" + pwd);

%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
MemberDao dao = MemberDao.getInstance();

boolean isS = dao.addMember(new MemberDto(id, pwd, name, email, 0));

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>

< member.sql >

DROP TABLE MEMBER
CASCADE CONSTRAINTS;

CREATE TABLE MEMBER(
	ID VARCHAR2(50) PRIMARY KEY,
	PWD VARCHAR2(50) NOT NULL,
	NAME VARCHAR2(50) NOT NULL,
	EMAIL VARCHAR2(50) UNIQUE,
	AUTH NUMBER(1) NOT NULL
);

< bbs.sql >

DROP TABLE BBS
CASCADE CONSTRAINTS;

DROP SEQUENCE SEQ_BBS;

CREATE TABLE BBS(
	SEQ NUMBER(8) PRIMARY KEY,
	ID VARCHAR2(50) NOT NULL,
	
	REF NUMBER(8) NOT NULL,
	STEP NUMBER(8) NOT NULL,
	DEPTH NUMBER(8) NOT NULL,
	
	TITLE VARCHAR2(200) NOT NULL,
	CONTENT VARCHAR2(4000) NOT NULL,
	WDATE DATE NOT NULL,
	
	DEL NUMBER(1) NOT NULL,
	READCOUNT NUMBER(8) NOT NULL
);

CREATE SEQUENCE SEQ_BBS
START WITH 1
INCREMENT BY 1;

ALTER TABLE BBS
ADD CONSTRAINT FK_BBS_ID FOREIGN KEY (ID)
REFERENCES MEMBER(ID);


< MemberDao.java >

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

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/6 addMember success");
			
			psmt = conn.prepareStatement(sql);
			System.out.println("2/6 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/6 addMember success");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("addMember fail");
		} finally {
			DBClose.close(psmt, conn, 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=? ";	// 있으면 1 없으면 0
		
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		
		boolean findid = false;		// 있으면 true로 바꿈
		
		
		try {
			conn = DBConnection.getConnection();
			System.out.println("1/6 getId success");
			
			psmt = conn.prepareStatement(sql);
			System.out.println("2/6 getId success");
			
			psmt.setString(1, id.trim());
			
			rs = psmt.executeQuery();
			System.out.println("3/6 getId success");
			
			if(rs.next()) {		// 찾았다
				findid = true;
			}
			
		} catch (SQLException e) {			
			e.printStackTrace();
			System.out.println("getId fail");
		} finally {
			DBClose.close(psmt, conn, rs);
		}
		return findid;
	}
	
	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();
			System.out.println("1/6 login success");
		
			psmt = conn.prepareStatement(sql);
			System.out.println("2/6 login success");
			
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPwd());
			
			rs = psmt.executeQuery();
			System.out.println("3/6 login success");
			
			if(rs.next()) {
				int i = 1;
				String id = rs.getString(i++);		// 1	
				String name = rs.getString(i++);	// 2
				String email = rs.getString(i++);	// 3
				int auth = rs.getInt(i++);			// 4
				
				mem = new MemberDto(id, null, name, email, auth);
			}
			System.out.println("4/6 login success");
					
		} catch (SQLException e) {
			System.out.println("login fail");
			e.printStackTrace();
		} finally {
			DBClose.close(psmt, conn, rs);
		}
		return mem;
				
	}
}

bbsdao, bbslist, bbswrite, bbswriteaf 수정 요함!