JSP 게시판 만들고 간단히 구현
package bbs;
//게시판의 글을 관리하기 위한 것이다.
//Bbs라는 걸로 하나의 자바 빈즈가 만들어진것이다.
public class Bbs {
private int bbsID;
private String bbsTitle;
private String userID;
private String bbsDate;
private String bbsContent;
private int bbsAvailable;
public int getBbsID() {
return bbsID;
}
public void setBbsID(int bbsID) {
this.bbsID = bbsID;
}
public String getBbsTitle() {
return bbsTitle;
}
public void setBbsTitle(String bbsTitle) {
this.bbsTitle = bbsTitle;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getBbsDate() {
return bbsDate;
}
public void setBbsDate(String bbsDate) {
this.bbsDate = bbsDate;
}
public String getBbsContent() {
return bbsContent;
}
public void setBbsContent(String bbsContent) {
this.bbsContent = bbsContent;
}
public int getBbsAvailable() {
return bbsAvailable;
}
public void setBbsAvailable(int bbsAvailable) {
this.bbsAvailable = bbsAvailable;
}
}
package bbs;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class BbsDAO {
private Connection conn=null; //데이터베이스를 접근하기 위한 객체
//private PreparedStatement pstmt=null;
private ResultSet res=null; //정보를 담을 수 있는 변수를 만들어 준다.
//Oracle 처리부분
public BbsDAO() {
//생성자를 만들었다.
try {
//1. Driver 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DBMS와 연결 (Connection 사용)
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","BBS", "1234");
//첫번째는 연결 정보(DB종류, 타입, IP주소, 포트 등등)
//두번째는 연결하는 DB의 ID(아이디)
//세번째는 연결하는 ID의 PW(비밀번호)
//get으로 읽어오는것이므로 저장하는 것이다.conn에 저장하는 것이다.
System.out.println(conn);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//게시판에 시간을 저장해줄 것이다.
public String getDate() {
String query="select sysdate from dual";
//mysql에서는 select now();
try {
PreparedStatement pstmt = conn.prepareStatement(query);
res = pstmt.executeQuery();
if(res.next()) {
return res.getString(1);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ""; //데이터베이스 오류
}
//게시판에 마지막 번호의 글에서 +1을 해야되니 그거때문에 가져올려는 것이다.
public int getNext() {
String query="select bbsid from bbs order by bbsid desc";
//mysql 구문은 select bbsID from BBS order by bbsID desc;
try {
PreparedStatement pstmt = conn.prepareStatement(query);
res = pstmt.executeQuery();
if(res.next()) {
return res.getInt(1)+1;//게시글에 다음번호를 쓰기 위해 1을 더했다.
}
return 1;//첫번째 게시물인 경우
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1; //데이터베이스 오류
}
//실제로 글을 작성하는 함수
public int write(String bbsTitle, String userID, String bbsContent) {
String query="insert into bbs values (?,?,?,?,?,?)";
try {
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setInt(1, getNext());
pstmt.setString(2, bbsTitle);
pstmt.setString(3, userID);
pstmt.setString(4, getDate());
pstmt.setString(5, bbsContent);
pstmt.setInt(6, 1);
return pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1; //데이터베이스 오류
}
//게시판 목록 구현하기
public ArrayList<Bbs> getList(int pageNumber) {
String query="select * from (select * from bbs where bbsid <? and bbsAvailable=1 order by bbsID desc) where rownum<=10";
/*
* "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1 ORDER BY bbsID DESC LIMIT 10";
ArrayList<Bbs> list = new ArrayList<Bbs>();
*/
//Bbs에서나오는 걸 보관할수 있는 인스턴스를 만들자
ArrayList<Bbs> list = new ArrayList<Bbs>();
try {
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setInt(1, getNext() - (pageNumber -1)*10);
//게시글의 개수에 따라 값으로 나오게 할려고 그래서 6보다 작게 할려고 모든 글자가 다 나오게 할려고 이다.그래서 일부러 함수를 만든 것이다.
res = pstmt.executeQuery();
//System.out.println("여기에러");
if(res.next()) {
Bbs bbs = new Bbs();
bbs.setBbsID(res.getInt(1));
bbs.setBbsTitle(res.getString(2));
bbs.setUserID(res.getString(3));
bbs.setBbsDate(res.getString(4));
bbs.setBbsContent(res.getString(5));
bbs.setBbsAvailable(res.getInt(6));
list.add(bbs);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
//다음페이지 버튼이 없어야 한다.왜냐하면 글을 10개씩 출력을 하는데 없는경우 알려주거나 할려고 페이징처리를 위해 만들었다.
//게시물이 10,20단위로 끊을때 게시물이 10개라면 다음 페이지가 없어야된다.
public boolean nextPage(int pageNumber) {
String query="select * from (select * from bbs where bbsid <? and bbsAvailable=1 order by bbsID desc) where rownum<=10";
//String query="select * from bbs where bbsID < ? AND bbsAvailable = 1";
try {
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setInt(1, getNext() - (pageNumber - 1)*10);
//게시글의 개수에 따라 값으로 나오게 할려고 그래서 6보다 작게 할려고 모든 글자가 다 나오게 할려고 이다.그래서 일부러 함수를 만든 것이다.
res = pstmt.executeQuery();
if(res.next()) {
return true;//게시글 20개면 페이지 2개 , 게시글 21개면 3으로 늘어나는 것이다.
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
package user;
public class User1 {
private String userID;
private String userPassword;
private String userName;
private String userGender;
private String userEmail;
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserGender() {
return userGender;
}
public void setUserGender(String userGender) {
this.userGender = userGender;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
}
package user;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//DBMS에 접근하는 클래스파일이다.
public class User1DAO {
private Connection conn=null;
private PreparedStatement pstmt=null;
private ResultSet res=null;
public User1DAO() {
try {
//1. Driver 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DBMS와 연결 (Connection 사용)
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","BBS", "1234");
//첫번째는 연결 정보(DB종류, 타입, IP주소, 포트 등등)
//두번째는 연결하는 DB의 ID(아이디)
//세번째는 연결하는 ID의 PW(비밀번호)
//get으로 읽어오는것이므로 저장하는 것이다.conn에 저장하는 것이다.
System.out.println(conn);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//회원 로그인 메소드를 만들 것이다.
public int login(String userID, String userPassword) {
String query="select userPassword from user1 where userID=?";
try {
pstmt=conn.prepareStatement(query);
pstmt.setString(1, userID);
res=pstmt.executeQuery();
if(res.next()) {
if(res.getString(1).equals(userPassword)) {
return 1; //로그인 성공
}
else {
return 0; //비밀번호 불일치
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -2; //데이터베이스 오류
}
//회원 가입 메소드를 만들것이다.
public int join(User1 user) {
String query = "insert into user1 values (?,?,?,?,?)";
try {
pstmt = conn.prepareStatement(query);
pstmt.setString(1, user.getUserID());
pstmt.setString(2, user.getUserPassword());
pstmt.setString(3, user.getUserName());
pstmt.setString(4, user.getUserGender());
pstmt.setString(5, user.getUserEmail());
//성공할 경우 0이상의 값이 들어간다.
return pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1; //데이터베이스 오류
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 지시어 삽입 스크립트 문장이 실행될수 있도록 할것이다. -->
<%@ page import="java.io.PrintWriter" %>
<%@ page import="bbs.BbsDAO" %>
<%@ page import="bbs.Bbs" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<!-- 반응형 웹을 위해서 meta date를 넣어주었다. 핸드폰과 사이트 둘다 봤을때 깔끔하게 보이게 하기 위해서이다. -->
<meta name="viewport" content="width=device-width" , initial-scale="1">
<!-- 디자인을 담당하는 css가 참조가 되었다. -->
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<%
//로그인된사람은 로그인정보를 담을수 있도록 만들것이다.
String userID=null;
if(session.getAttribute("userID") != null){
userID = (String) session.getAttribute("userID");
}
//몇번째 페이지인지 알려주기 위해서이다.
int pageNumber=1;//기본 페이지를 의미한다.
if(request.getParameter("pageNumber") !=null){
pageNumber=Integer.parseInt(request.getParameter("pageNumber"));
}
%>
<!-- 네비게이션을 구현할 것인데 네비게이션이란 하나의 웹사이트에 전반적인 구성을 보여주는 역할을 한다.-->
<nav class="navbar navbar-default">
<div class="navbar-header">
<!-- 헤더라는건 홈페이지의 로고같은걸 넣는것이다. -->
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<!-- 작대기의 역할이라고 생각하면 된다 우측 상단 줄이면 나타난다. -->
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
</div>
<!-- 위에 data-target이름과 똑같은걸 넣어줘야한다. -->
<div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
<!-- 하나의 리스트 같은걸 보여줄때 사용하는 것이다. -->
<ul class="nav navbar-nav">
<li><a href="main.jsp">메인</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
<li class="active"><a href="bbs.jsp">게시판</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
</ul>
<!-- 로그인 되어있지 않은 경우만 나오게 할것이다.즉 로그인 되어있지 않은 사람들이 볼 수 있는 화면 -->
<%
if(userID ==null){
%>
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">접속하기<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<li><a href="login.jsp">로그인</a></li>
<li><a href="join.jsp">회원가입</a></li>
</ul>
</li>
</ul>
<%
}else{
%>
<!-- 로그인 되어있는 사람들이 볼수 있는 화면 -->
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">회원관리<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<!-- 로그아웃을 눌러서 링크를 타고 들어갔을 때는 로그아웃페이지가서 세션해제하도록 해보자 -->
<li><a href="logoutAction.jsp">로그아웃</a></li>
</ul>
</li>
</ul>
<%
}
%>
</div>
</nav>
<!-- 게시판 화면의 글을 넣어줄것이고 글이 일렬로 정리되는 형태가 되어야 한다. 그러므로 간단히 테이블을 만들어줘야한다. -->
<div class="container">
<div class="row"><!-- 이거 방금 추가함 -->
<!-- 회색 비슷하게 갈것이다. -->
<table class="table table-striped" style="text-align:center; border:1px solid #dddddd">
<!-- 테이블의 제목부분을 말하는 것으로서 가장 윗줄을 말하는 것이다. -->
<thead>
<!-- tr은 테이블하나의 행을 말한다. th는 하나의 속성을 말한다.-->
<tr>
<th style="background-color : #eeeeee; text-align: center;">번호</th>
<th style="background-color : #eeeeee; text-align: center;">제목</th>
<th style="background-color : #eeeeee; text-align: center;">작성자</th>
<th style="background-color : #eeeeee; text-align: center;">작성일</th>
</tr>
</thead>
<tbody>
<!-- 게시글을 뽑아올수 있도록 할것이다. -->
<%
BbsDAO bbsDAO = new BbsDAO();//하나의 인스턴스 만들기
ArrayList<Bbs> list = bbsDAO.getList(pageNumber);
for(int i=0; i<list.size(); i++){
out.println(list.size());
out.println(pageNumber);
//11, 12
%>
<tr>
<!-- 게시글을 가져올수 있게끔 만들어보기 -->
<td><%= list.get(i).getBbsID() %></td> <!-- 값을 갖고와서 그대로 보여준다. -->
<td><a href="view.jsp?bbsID=<%= list.get(i).getBbsID() %>"><%= list.get(i).getBbsTitle() %></a></td>
<td><%= list.get(i).getUserID() %></td>
<td><%= list.get(i).getBbsDate().substring(0,11)+ list.get(i).getBbsDate().substring(11, 13)+"시"+list.get(i).getBbsDate().substring(14,16)+"분" %></td>
</tr>
<%
}
%>
</tbody>
</table>
<%
if(pageNumber != 1){
%>
<a href="bbs.jsp?pageNumber=<%=pageNumber - 1 %>" class="btn btn-success btn-arraw-left">이전</a>
<%
} if(bbsDAO.nextPage(pageNumber + 1)){
%>
<a href="bbs.jsp?pageNumber=<%=pageNumber + 1 %>" class="btn btn-success btn-arraw-left">다음</a>
<%
}
%>
<a href="write.jsp" class="btn btn-primary pull-right">글쓰기</a>
</div>
</div>
<!--
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.js"></script>
2가지가 있으면 정상 작동 될것이다.
-->
<!-- jquery를 여기서 갖고올 것이다.애니메이션을 담당하게 될 것이다.특정 홈페이지에서 갖고오도록 할것이다. -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- 부트스트랩에서 기본적으로 제공하는 자바스크립트파일도 넣어줄 것이다. js폴더안에 bootstrap.js를 쓸것이다. -->
<script src="js/bootstrap.js"></script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<script>
location.href = "main.jsp"
</script>
Hello World
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<!-- 반응형 웹을 위해서 meta date를 넣어주었다. 핸드폰과 사이트 둘다 봤을때 깔끔하게 보이게 하기 위해서이다. -->
<meta name="viewport" content="width=device-width" , initial-scale="1">
<!-- 디자인을 담당하는 css가 참조가 되었다. -->
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<!-- 네비게이션을 구현할 것인데 네비게이션이란 하나의 웹사이트에 전반적인 구성을 보여주는 역할을 한다.-->
<nav class="navbar navbar-default">
<div class="navbar-header">
<!-- 헤더라는건 홈페이지의 로고같은걸 넣는것이다. -->
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<!-- 작대기의 역할이라고 생각하면 된다 우측 상단 줄이면 나타난다. -->
<span class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
</div>
<!-- 위에 data-target이름과 똑같은걸 넣어줘야한다. -->
<div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
<!-- 하나의 리스트 같은걸 보여줄때 사용하는 것이다. -->
<ul class="nav navbar-nav">
<li><a href="main.jsp">메인</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
<li><a href="main.jsp">게시판</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
</ul>
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">접속하기<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<li class="active"><a href="login.jsp">로그인</a></li>
<li><a href="join.jsp">회원가입</a></li>
</ul></li>
</ul>
</div>
</nav>
<!-- 로그인 양식을 만들어 볼것이다. -->
<!-- 마치하나의 컨테이너처럼 감싸주는걸 할것이다. -->
<div class="container">
<div class="col-lg-4"></div>
<div class="col-lg-4"></div>
<div class="jumbotron" style="padding-top: 20px;">
<!-- post같은 경우 회원가입이나 로그인같이 숨기면서 보낼때 사용하는 것이다. -->
<!-- joinAction페이지로 아래 내용것을 다 보낼것이다. -->
<form method="post" action="joinAction.jsp">
<h3 style="text-align: center;">회원가입 화면</h3>
<!-- 회원가입이니 여기부분을 추가시킬 것이다. -->
<div class="form-group">
<!-- placeholder은 어떠한것도 입력되지 않았을때 나오게 할수 있는 것이다.아이디 길이 20으로 제한 -->
<input type="text" class="form-control" placeholder="아이디"
name="userID" maxlength="20">
</div>
<div class="form-group">
<!-- placeholder은 어떠한것도 입력되지 않았을때 나오게 할수 있는 것이다.패스워드 길이 20으로 제한 -->
<input type="password" class="form-control" placeholder="비밀번호"
name="userPassword" maxlength="20">
</div>
<!-- 이름을 넣는 것이다. -->
<div class="form-group">
<!-- placeholder은 어떠한것도 입력되지 않았을때 나오게 할수 있는 것이다.이름 길이 20으로 제한 -->
<input type="text" class="form-control" placeholder="이름"
name="userName" maxlength="20">
</div>
<!-- 성별을 넣는 것이다. -->
<div class="form-group" style="text-align: center;">
<!-- 성별을 넣을 것이다. -->
<div class="btn-group" data-toggle="buttons">
<!-- label 태그는 양식 입력창 을 설명하는 이름표이다 -->
<label class="btn btn-primary active"> <input type="radio"
name="userGender" autocomplete="off" value="남자" checked>남자
</label> <label class="btn btn-primary"> <input type="radio"
name="userGender" autocomplete="off" value="여자" checked>여자
</label>
</div>
</div>
<!-- 이메일 만드는 것이다. type가 email형식이라 @를 넣어줘야한다.-->
<div class="form-group">
<input type="email" class="form-control" placeholder="이메일" name="userEmail" maxlength="20">
</div>
<input type="submit" class="btn btn-primary form-control"
value="회원가입">
</form>
</div>
<!--
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.js"></script>
2가지가 있으면 정상 작동 될것이다.
-->
<!-- jquery를 여기서 갖고올 것이다.애니메이션을 담당하게 될 것이다.특정 홈페이지에서 갖고오도록 할것이다. -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- 부트스트랩에서 기본적으로 제공하는 자바스크립트파일도 넣어줄 것이다. js폴더안에 bootstrap.js를 쓸것이다. -->
<script src="js/bootstrap.js"></script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 지시어 기능이다. -->
<%@ page import="user.User1DAO"%>
<%@ page import="java.io.PrintWriter"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<!-- 로그인페이지에서 userID를 받아서 한명의 사용자에 userID에 넣어주는 것이다 이페이지에 넘어오는게 그대로 담겨질 것이다. -->
<!-- loginAction에서 값을 2개만 받아오면 되었지만 이건 가입하는거니 5개의 값을 갖고와야 한다. -->
<jsp:useBean id="user" class="user.User1" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<jsp:setProperty name="user" property="userName" />
<jsp:setProperty name="user" property="userGender" />
<jsp:setProperty name="user" property="userEmail" />
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<!-- 자바 코드를 삽입하기 위한 것이다. -->
<%
//로그인된사람은 회원가입에 접속할 수 없게끔 만든것이다.
String userID = null;
if (session.getAttribute("userID") != null) {
//userID가 세션된 값을 담을 수 있게 만든다.
userID = (String) session.getAttribute("userID");
}
//로그인 한사람은 또 로그인 할 수 없도록 막을 것이다.
if (userID != null) {
PrintWriter script = response.getWriter();
script.println("<script>");
//-1일경우 아이디가 존재하지 않는다.
script.println("alert('이미 로그인이 되어있습니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("location.href='main.jsp'");
script.println("</script>");
}
//입력이 안되었을 경우를 말하는 것이다.
if (user.getUserID() == null || user.getUserPassword() == null || user.getUserName() == null
|| user.getUserGender() == null || user.getUserEmail() == null) {
PrintWriter script = response.getWriter();
script.println("<script>");
//입력이 안되었다고 출력하는 것이다.
script.println("alert('입력이 안된 사항이 있습니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("history.back()");
script.println("</script>");
} else {
//로그인 페이지에서 값을 넣을경우 여기다가 저장을 하는 것이다.얻어오는건 getUserID랑 getUserpassword를 갖고올 것이다.
User1DAO userDAO = new User1DAO();
int result = userDAO.join(user); //user라는 인스턴스가 join함수를 쓰도록 할것이다.
if (result == -1) {
PrintWriter script = response.getWriter();
script.println("<script>");
//동일한 아이디를 거르는 것이다. 왜냐하면 ID는 primary key이기 때문이다.
script.println("alert('아이디가 미리 존재합니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("history.back()");
script.println("</script>");
} else {//회원가입이 이루어진 경우이다.
//세션은 현재 접속한 회원에게 주는 고유한 ID이다.
session.setAttribute("userID", user.getUserID());
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href='main.jsp'");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("</script>");
}
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<!-- 반응형 웹을 위해서 meta date를 넣어주었다. 핸드폰과 사이트 둘다 봤을때 깔끔하게 보이게 하기 위해서이다. -->
<meta name="viewport" content="width=device-width" , initial-scale="1">
<!-- 디자인을 담당하는 css가 참조가 되었다. -->
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<!-- 네비게이션을 구현할 것인데 네비게이션이란 하나의 웹사이트에 전반적인 구성을 보여주는 역할을 한다.-->
<nav class="navbar navbar-default">
<div class="navbar-header">
<!-- 헤더라는건 홈페이지의 로고같은걸 넣는것이다. -->
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<!-- 작대기의 역할이라고 생각하면 된다 우측 상단 줄이면 나타난다. -->
<span class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
</div>
<!-- 위에 data-target이름과 똑같은걸 넣어줘야한다. -->
<div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
<!-- 하나의 리스트 같은걸 보여줄때 사용하는 것이다. -->
<ul class="nav navbar-nav">
<li><a href="main.jsp">메인</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
<li><a href="main.jsp">게시판</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
</ul>
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">접속하기<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<li class="active"><a href="login.jsp">로그인</a></li>
<li><a href="join.jsp">회원가입</a></li>
</ul>
</li>
</ul>
</div>
</nav>
<!-- 로그인 양식을 만들어 볼것이다. -->
<!-- 마치하나의 컨테이너처럼 감싸주는걸 할것이다. -->
<div class="container">
<div class="col-lg-4"></div>
<div class="col-lg-4"></div>
<div class="jumbotron" style="padding-top: 20px;">
<!-- post같은 경우 회원가입이나 로그인같이 숨기면서 보낼때 사용하는 것이다. -->
<form method="post" action="loginAction.jsp">
<h3 style="text-align: center;">로그인 화면</h3>
<div class="form-group">
<!-- placeholder은 어떠한것도 입력되지 않았을때 나오게 할수 있는 것이다.아이디 길이 20으로 제한 -->
<input type="text" class="form-control" placeholder="아이디" name="userID" maxlength="20">
</div>
<div class="form-group">
<!-- placeholder은 어떠한것도 입력되지 않았을때 나오게 할수 있는 것이다.패스워드 길이 20으로 제한 -->
<input type="password" class="form-control" placeholder="비밀번호" name="userPassword" maxlength="20">
</div>
<input type="submit" class="btn btn-primary form-control" value="로그인">
</form>
</div>
<!--
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.js"></script>
2가지가 있으면 정상 작동 될것이다.
-->
<!-- jquery를 여기서 갖고올 것이다.애니메이션을 담당하게 될 것이다.특정 홈페이지에서 갖고오도록 할것이다. -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- 부트스트랩에서 기본적으로 제공하는 자바스크립트파일도 넣어줄 것이다. js폴더안에 bootstrap.js를 쓸것이다. -->
<script src="js/bootstrap.js"></script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 지시어 기능이다. -->
<%@ page import="user.User1DAO" %>
<%@ page import="java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>
<!-- 로그인페이지에서 userID를 받아서 한명의 사용자에 userID에 넣어주는 것이다 이페이지에 넘어오는게 그대로 담겨질 것이다. -->
<jsp:useBean id="user" class="user.User1" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<!-- 자바 코드를 삽입하기 위한 것이다. -->
<%
String userID=null;
if(session.getAttribute("userID")!= null){
//userID가 세션된 값을 담을 수 있게 만든다.
userID = (String) session.getAttribute("userID");
}
//로그인 한사람은 또 로그인 할 수 없도록 막을 것이다.
if(userID !=null){
PrintWriter script = response.getWriter();
script.println("<script>");
//-1일경우 아이디가 존재하지 않는다.
script.println("alert('이미 로그인이 되어있습1니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("location.href='main.jsp'");
script.println("</script>");
}
//로그인 페이지에서 값을 넣을경우 여기다가 저장을 하는 것이다.얻어오는건 getUserID랑 getUserpassword를 갖고올 것이다.
User1DAO userDAO = new User1DAO();
int result=userDAO.login(user.getUserID(), user.getUserPassword());
if(result==1){
//세션은 현재 접속한 회원에게 주는 고유한 ID이다.
session.setAttribute("userID", user.getUserID());
PrintWriter script = response.getWriter();
script.println("<script>");
//로그인 성공시 이페이지 넘어가게끔 할것이다.
script.println("location.href='main.jsp'");
script.println("</script>");
}
else if(result==0){
PrintWriter script = response.getWriter();
script.println("<script>");
//0일경우 비밀번호가 틀린 경우이다.
script.println("alert('비밀번호가 틀립니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("history.back()");
script.println("</script>");
}
else if(result==-1){//아이디가 없는 경우이다.
PrintWriter script = response.getWriter();
script.println("<script>");
//-1일경우 아이디가 존재하지 않는다.
script.println("alert('존재하지 않는 아이디입니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("history.back()");
script.println("</script>");
}
else if(result==-2){//이거인경우엔 user1DAO에 리턴값을 -2 해놓았기때문이다.
PrintWriter script = response.getWriter();
script.println("<script>");
//로그인 성공시 이페이지 넘어가게끔 할것이다.
script.println("alert('데이터베이스 오류가 발생했습니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("history.back()");
script.println("</script>");
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<!-- 자바 코드를 삽입하기 위한 것이다. -->
<%
//로그아웃 할경우 세션의 값을 없앨 것이다.
session.invalidate();
%>
<!-- main.jsp으로 가면 끝이다. -->
<script>
location.href = 'main.jsp';
</script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 지시어 삽입 스크립트 문장이 실행될수 있도록 할것이다. -->
<%@ page import="java.io.PrintWriter" %>
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<!-- 반응형 웹을 위해서 meta date를 넣어주었다. 핸드폰과 사이트 둘다 봤을때 깔끔하게 보이게 하기 위해서이다. -->
<meta name="viewport" content="width=device-width" , initial-scale="1">
<!-- 디자인을 담당하는 css가 참조가 되었다. -->
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<%
//로그인된사람은 로그인정보를 담을수 있도록 만들것이다.
String userID=null;
if(session.getAttribute("userID") != null){
userID = (String) session.getAttribute("userID");
}
%>
<!-- 네비게이션을 구현할 것인데 네비게이션이란 하나의 웹사이트에 전반적인 구성을 보여주는 역할을 한다.-->
<nav class="navbar navbar-default">
<div class="navbar-header">
<!-- 헤더라는건 홈페이지의 로고같은걸 넣는것이다. -->
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<!-- 작대기의 역할이라고 생각하면 된다 우측 상단 줄이면 나타난다. -->
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
</div>
<!-- 위에 data-target이름과 똑같은걸 넣어줘야한다. -->
<div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
<!-- 하나의 리스트 같은걸 보여줄때 사용하는 것이다. -->
<ul class="nav navbar-nav">
<!-- 메인페이지에 class=active를 넣을 것이다.현재 접속한 페이지가 메인페이지라고 알려주면 된다. -->
<li class="active"><a href="main.jsp">메인</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
<li><a href="bbs.jsp">게시판</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
</ul>
<!-- 로그인 되어있지 않은 경우만 나오게 할것이다.즉 로그인 되어있지 않은 사람들이 볼 수 있는 화면 -->
<%
if(userID ==null){
%>
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">접속하기<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<li><a href="login.jsp">로그인</a></li>
<li><a href="join.jsp">회원가입</a></li>
</ul>
</li>
</ul>
<%
}else{
%>
<!-- 로그인 되어있는 사람들이 볼수 있는 화면 -->
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">회원관리<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<!-- 로그아웃을 눌러서 링크를 타고 들어갔을 때는 로그아웃페이지가서 세션해제하도록 해보자 -->
<li><a href="logoutAction.jsp">로그아웃</a></li>
</ul>
</li>
</ul>
<%
}
%>
</div>
</nav>
<!--
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.js"></script>
2가지가 있으면 정상 작동 될것이다.
-->
<!-- jquery를 여기서 갖고올 것이다.애니메이션을 담당하게 될 것이다.특정 홈페이지에서 갖고오도록 할것이다. -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- 부트스트랩에서 기본적으로 제공하는 자바스크립트파일도 넣어줄 것이다. js폴더안에 bootstrap.js를 쓸것이다. -->
<script src="js/bootstrap.js"></script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 지시어 삽입 스크립트 문장이 실행될수 있도록 할것이다. -->
<%@ page import="java.io.PrintWriter"%>
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<!-- 반응형 웹을 위해서 meta date를 넣어주었다. 핸드폰과 사이트 둘다 봤을때 깔끔하게 보이게 하기 위해서이다. -->
<meta name="viewport" content="width=device-width" , initial-scale="1">
<!-- 디자인을 담당하는 css가 참조가 되었다. -->
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<%
//로그인된사람은 로그인정보를 담을수 있도록 만들것이다.
String userID = null;
if (session.getAttribute("userID") != null) {
userID = (String) session.getAttribute("userID");
}
%>
<!-- 네비게이션을 구현할 것인데 네비게이션이란 하나의 웹사이트에 전반적인 구성을 보여주는 역할을 한다.-->
<nav class="navbar navbar-default">
<div class="navbar-header">
<!-- 헤더라는건 홈페이지의 로고같은걸 넣는것이다. -->
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<!-- 작대기의 역할이라고 생각하면 된다 우측 상단 줄이면 나타난다. -->
<span class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
</div>
<!-- 위에 data-target이름과 똑같은걸 넣어줘야한다. -->
<div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
<!-- 하나의 리스트 같은걸 보여줄때 사용하는 것이다. -->
<ul class="nav navbar-nav">
<li><a href="main.jsp">메인</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
<li class="active"><a href="bbs.jsp">게시판</a></li>
<!-- 하나의 원소를 넣는 것이다. -->
</ul>
<!-- 로그인 되어있지 않은 경우만 나오게 할것이다.즉 로그인 되어있지 않은 사람들이 볼 수 있는 화면 -->
<%
if (userID == null) {
%>
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">접속하기<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<li><a href="login.jsp">로그인</a></li>
<li><a href="join.jsp">회원가입</a></li>
</ul></li>
</ul>
<%
} else {
%>
<!-- 로그인 되어있는 사람들이 볼수 있는 화면 -->
<ul class="nav navbar-nav navbar-right">
<!-- 오른쪽에 넣어줄 것이다. -->
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">회원관리<span class="caret"></span></a> <!-- #을 쓴이유는 가리키는 링크가 더이상 없다는걸 알려주는 것이다. -->
<!-- 접속하기버튼을 누르면 아래 뜨도록 할것이다. -->
<ul class="dropdown-menu">
<!-- 로그아웃을 눌러서 링크를 타고 들어갔을 때는 로그아웃페이지가서 세션해제하도록 해보자 -->
<li><a href="logoutAction.jsp">로그아웃</a></li>
</ul></li>
</ul>
<%
}
%>
</div>
</nav>
<!-- 게시판 화면의 글을 넣어줄것이고 글이 일렬로 정리되는 형태가 되어야 한다. 그러므로 간단히 테이블을 만들어줘야한다. -->
<div class="container">
<div class="row">
<form method="post" action="writeAction.jsp">
<!-- 회색 비슷하게 갈것이다. -->
<table class="table table-striped"
style="text-align: center; border: 1px solid #dddddd">
<!-- 테이블의 제목부분을 말하는 것으로서 가장 윗줄을 말하는 것이다. -->
<thead>
<!-- tr은 테이블하나의 행을 말한다. th는 하나의 속성을 말한다.-->
<tr>
<!-- 2개의 열만 들어갈수 있도록 해보겠다. -->
<th colspan="2"
style="background-color: #eeeeee; text-align: center;">게시판
글쓰기 양식</th>
</tr>
</thead>
<tbody>
<tr>
<!-- 한개의 예시 데이터를 넣어볼 것이다. -->
<td><input type="text" class="form-control"
placeholder="글 제목" name="bbsTitle" maxlength="50"></td>
</tr>
<tr>
<!-- 장문의 글을 작성할때 textarea를 쓴다. 크기가 커지지 않게 350으로 고정하겠다.-->
<td><textarea class="form-control" placeholder="글 내용"
name="bbsContent" maxlength="2048" style="height: 350px"></textarea></td>
</tr>
</tbody>
</table>
<input type="submit" class="btn btn-primary pull-right" value="글쓰기">
</form>
</div>
</div>
<!--
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.js"></script>
2가지가 있으면 정상 작동 될것이다.
-->
<!-- jquery를 여기서 갖고올 것이다.애니메이션을 담당하게 될 것이다.특정 홈페이지에서 갖고오도록 할것이다. -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- 부트스트랩에서 기본적으로 제공하는 자바스크립트파일도 넣어줄 것이다. js폴더안에 bootstrap.js를 쓸것이다. -->
<script src="js/bootstrap.js"></script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 지시어 기능이다. -->
<%@ page import="bbs.BbsDAO"%>
<%@ page import="java.io.PrintWriter"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<!-- 로그인페이지에서 userID를 받아서 한명의 사용자에 userID에 넣어주는 것이다 이페이지에 넘어오는게 그대로 담겨질 것이다. -->
<jsp:useBean id="bbs" class="bbs.Bbs" scope="page" />
<jsp:setProperty name="bbs" property="bbsTitle" />
<jsp:setProperty name="bbs" property="bbsContent" />
<!DOCTYPE html>
<html>
<head>
<meta httq-equiv="Content-Type" content="text/html; charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<!-- 자바 코드를 삽입하기 위한 것이다. -->
<%
//로그인된사람은 회원가입에 접속할 수 없게끔 만든것이다.
String userID = null;
if (session.getAttribute("userID") != null) { //유저아이디이름으로 세션이 존재하는 회원들은
//userID가 세션된 값을 담을 수 있게 만든다.
userID = (String) session.getAttribute("userID"); //유저아이디에 해당 세션값을 넣어준다.
}
//로그인 한사람은 또 로그인 할 수 없도록 막을 것이다.
if (userID == null) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('로그인을 하세요')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("location.href='login.jsp'");
script.println("</script>");
}else{
//입력이 안되었을 경우를 말하는 것이다.
if (bbs.getBbsTitle() == null || bbs.getBbsContent()==null) {
PrintWriter script = response.getWriter();
script.println("<script>");
//입력이 안되었다고 출력하는 것이다.
script.println("alert('입력이 안된 사항이 있습니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("history.back()");
script.println("</script>");
} else {
//로그인 페이지에서 값을 넣을경우 여기다가 저장을 하는 것이다.얻어오는건 getUserID랑 getUserpassword를 갖고올 것이다.
BbsDAO bbsDAO = new BbsDAO();
int result = bbsDAO.write(bbs.getBbsTitle(),userID,bbs.getBbsContent());
//int result = bbsDAO.write(bbs.getBbsTitle(),userID,bbs.getBbsContent()); 였다.
if (result == -1) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('글쓰기에 실패했습니다.')");
//이전페이지로 돌려보내는것이다. 즉 로그인페이지로 돌려버리는 것이다.
script.println("history.back()");
script.println("</script>");
} else {//회원가입이 이루어진 경우이다.
//세션은 현재 접속한 회원에게 주는 고유한 ID이다.
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href='bbs.jsp'");
script.println("</script>");
}
}
}
%>
</body>
</html>
'IT일반과목 > JSP' 카테고리의 다른 글
20180902 집공부14 (프로젝트 게시판기능) (0) | 2018.09.02 |
---|---|
20180902 집공부13 (프로젝트1) (0) | 2018.09.02 |
20180831 집공부11 (0) | 2018.08.31 |
20180831 집공부10 (0) | 2018.08.31 |
20180829 집공부9 (0) | 2018.08.29 |