get => a태그
=> 개발자가 의도한 방식으로 데이터 전송
post => form태그
=> 사용자 입력 대기
웹 프로그래머
게시판이 시작이자 끝
=> CRUD
(CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다)
웹 프로그램
UI 제작 - 웹디자이너(psd, ai) / 퍼블리셔(산출물 - html) 에서 발전한게 => front - end programmer(js) 이렇게 완성된 것을 => back - end programmer한테 넘긴다.
디자인 시안을 가지고 -> 웹 사이트 프로그램
1.페이지의 흐름 + 데이터의 흐름
*기획
2.UML
3.ERD
4.DFD (data flow diagram) - 새로운 프로그램이나 (기획)
데이터 흐름도(DFD)는 프로세스나 시스템의 정보 흐름을 나타낸다
4-1.page간 흐름
4-2.page 내부에 흐름(알고리즘)
프로젝트생성 -> board폴더 webapp에 넣기 -> META-INF에 context.xml 설정 -> lib에 mariadb 넣기
새로 만든 사용자와 데이터베이스 이름으로 설정 ( 밑에서 새로 만드는 작업 함 )
1.ERD - 1개...테이블에 대한 컬럼(어떤 컬럼이 있으면 프로그램이 돌아갈지)을 .. 한글로 정의
테이블명 board1
번호 seq int not null primary key auto_increment
제목 subject varchar(150) not null
글쓴이 writer varchar(12) not null
이메일 mail varchar(50)
비밀번호 password varchar(12) not null
내용 content varchar(2000)
조회수 hit int not null
아이피 wip varchar(15) not null
등록일 wdate datetime not null
=> 로지컬 다이어그램
*암호화
평문 -> 비문
기법 -> md5, sha
java
mariadb
create 구문 만들기
create table board1 (
seq int not null primary key auto_increment,
subject varchar(150) not null,
writer varchar(12) not null,
mail varchar(50),
password varchar(12) not null,
content varchar(2000) not null,
hit int not null,
wip varchar(15) not null,
wdate datetime not null
);
데이터베이스명 : board
사용자명 : board
암호 : 1234
insert into board1 values(0,'제목','이름','test@test.com','1234','내용',0,'000,000,000,000', now());
페이지 흐름 + 데이터의 흐름
글 목록 board_list1.jsp
글 쓰기 board_write1.jsp
글자세히보기 board_view1.jsp
글 수정 board_modify1.jsp
글 삭제 board_delete1.jsp
페이지의 흐름(page navigation)
board_list1.jsp
(데이터x)넘어갈 때 -> (입력내용) 넘어갈 때 -> (x)
board_write1.jsp -> board_write_ok1.jsp -> board_list1.jsp
(seq)
board_view1.jsp
(seq) -> (seq 수정내용)
board_modify1.jsp -> board_modify_ok1.jsp -> 수정하면 board_view1.jsp
(seq) -> (seq, 비밀번호) -> (x)
board_delete1.jsp -> board_delete1_ok.jsp -> board_list
게시판 정보 입력한 것 데이터베이스에 저장
프로그램 제작은 write쪽 하고 view로 넘어가는것이 좋다.
board_writer1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="../../css/board.css">
<script type="text/javascript">
window.onload = function() {
document.getElementById('wbtn').onclick = function() {
// alert('click');
if(document.wfrm.info.checked == false) {
alert('동의하셔야 합니다.');
return false;
}
if(document.wfrm.writer.value.trim() == '') {
alert('글쓴이를 입력하셔야 합니다.');
return false;
}
if(document.wfrm.subject.value.trim() == '') {
alert('제목을 입력하셔야 합니다.');
return false;
}
if(document.wfrm.password.value.trim() == '') {
alert('비밀번호를 입력하셔야 합니다.');
return false;
}
document.wfrm.submit();
}
}
</script>
</head>
<body>
<!-- 상단 디자인 -->
<div class="con_title">
<h3>게시판</h3>
<p>HOME > 게시판 > <strong>게시판</strong></p>
</div>
<div class="con_menu"></div>
<div class="con_txt">
<form action="board_write1_ok.jsp" method="post" name="wfrm">
<div class="contents_sub">
<!--게시판-->
<div class="board_write">
<table>
<tr>
<th class="top">글쓴이</th>
<td class="top"><input type="text" name="writer" value="" class="board_view_input_mail" maxlength="5" /></td>
</tr>
<tr>
<th>제목</th>
<td><input type="text" name="subject" value="" class="board_view_input" /></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="password" value="" class="board_view_input_mail"/></td>
</tr>
<tr>
<th>내용</th>
<td><textarea name="content" class="board_editor_area"></textarea></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="text" name="mail1" value="" class="board_view_input_mail"/> @ <input type="text" name="mail2" value="" class="board_view_input_mail"/></td>
</tr>
</table>
<table>
<tr>
<br />
<td style="text-align:left;border:1px solid #e0e0e0;background-color:f9f9f9;padding:5px">
<div style="padding-top:7px;padding-bottom:5px;font-weight:bold;padding-left:7px;font-family: Gulim,Tahoma,verdana;">※ 개인정보 수집 및 이용에 관한 안내</div>
<div style="padding-left:10px;">
<div style="width:97%;height:95px;font-size:11px;letter-spacing: -0.1em;border:1px solid #c5c5c5;background-color:#fff;padding-left:14px;padding-top:7px;">
1. 수집 개인정보 항목 : 회사명, 담당자명, 메일 주소, 전화번호, 홈페이지 주소, 팩스번호, 주소 <br />
2. 개인정보의 수집 및 이용목적 : 제휴신청에 따른 본인확인 및 원활한 의사소통 경로 확보 <br />
3. 개인정보의 이용기간 : 모든 검토가 완료된 후 3개월간 이용자의 조회를 위하여 보관하며, 이후 해당정보를 지체 없이 파기합니다. <br />
4. 그 밖의 사항은 개인정보취급방침을 준수합니다.
</div>
</div>
<div style="padding-top:7px;padding-left:5px;padding-bottom:7px;font-family: Gulim,Tahoma,verdana;">
<input type="checkbox" name="info" value="1" class="input_radio"> 개인정보 수집 및 이용에 대해 동의합니다.
</div>
</td>
</tr>
</table>
</div>
<div class="btn_area">
<div class="align_left">
<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'" />
</div>
<div class="align_right">
<input type="button" id="wbtn" value="쓰기" class="btn_write btn_txt01" style="cursor: pointer;" />
</div>
</div>
<!--//게시판-->
</div>
</form>
</div>
<!-- 하단 디자인 -->
</body>
</html>
board_writer1_ok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.naming.NamingException"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%
request.setCharacterEncoding("utf-8");
String subject = request.getParameter("subject");
String writer = request.getParameter("writer");
String mail = "";
if(!request.getParameter("mail1").equals("") && !request.getParameter("mail2").equals("")) {
mail = request.getParameter("mail1") + "@" + request.getParameter("mail2");
}
String password = request.getParameter("password");
String content = request.getParameter("content");
// request.getRemoteAeer() : JAVA, jsp 에서 클라이언트의 ip주소를 얻기 위해 사용하는 코드
// 0:0:0:0:0:0:0:1로 얻는데, IPV6 체계로 얻어오는것이라서 그렇다.
String wip = request.getRemoteAddr();
/* 잘 출력되는지 꼭 확인해보기
System.out.println(subject);
System.out.println(writer);
System.out.println(mail);
System.out.println(password);
System.out.println(content);
System.out.println(wip);
*/
Connection conn = null;
PreparedStatement pstmt = null;
int flag = 2;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb3");
conn = dataSource.getConnection();
String sql = "insert into board1 values(0,?,?,?,?,?,0,?, now())";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, subject);
pstmt.setString(2, writer);
pstmt.setString(3, mail);
pstmt.setString(4, password);
pstmt.setString(5, content);
pstmt.setString(6, wip);
int result = pstmt.executeUpdate();
if(result == 1) {
flag = 0;
System.out.println("성공");
} else {
flag = 1;
System.out.println("실패");
}
} catch (NamingException e) {
System.out.println("[에러] : " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
out.println( "<script type='text/javascript'>" );
if( flag == 0 ) {
out.println( "alert('글쓰기에 성공');" );
out.println( "location.href='board_list1.jsp';" );
} else {
out.println( "alert('글쓰기에 실패');" );
out.println( "history.back();" );
}
out.println( "</script>" );
%>
각 부분에 내용 적고 쓰기 클릭하기
데이터베이스에 입력이 된다.
board_list1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.naming.NamingException"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="java.sql.ResultSet"%>
<%
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// 데이터 건수 집어넣기
int totalRecord = 0;
StringBuilder sbHtml = new StringBuilder();
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb3");
conn = dataSource.getConnection();
// seq를 내림차순으로 만듦
String sql = "select seq, subject, writer, date_format(wdate,'%Y-%m-%d')wdate, hit from board1 order by seq desc";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
// 커서 맨 마지막으로 이동
rs.last();
// getRow가 갯수 읽어줌
totalRecord = rs.getRow();
// 다시 돌려놓기
rs.beforeFirst();
while(rs.next()) {
String seq = rs.getString("seq");
String subject = rs.getString("subject");
String writer = rs.getString("writer");
String wdate = rs.getString("wdate");
String hit = rs.getString("hit");
sbHtml.append("<tr>");
sbHtml.append("<td> </td>");
sbHtml.append("<td>" + seq + "</td>");
/*
list를 통하여 board_view1를 눌렀을 때 seq값을 갖고 가라는 의미
"<td class='left'><a href='board_view1.jsp?seq=" + seq + "'>"
*/
sbHtml.append("<td class='left'><a href='board_view1.jsp?seq=" + seq + "'>" + subject + "</a> <img src='../../images/icon_new.gif' alt='NEW'></td>");
sbHtml.append("<td>" + writer + "</td>");
sbHtml.append("<td>" + wdate + "</td>");
sbHtml.append("<td>" + hit + "</td>");
sbHtml.append("<td> </td>");
sbHtml.append("</tr>");
}
} catch(NamingException e) {
System.out.println("[에러] : " + e.getMessage());
} catch(SQLException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="../../css/board.css">
</head>
<body>
<!-- 상단 디자인 -->
<div class="con_title">
<h3>게시판</h3>
<p>HOME > 게시판 > <strong>게시판</strong></p>
</div>
<div class="con_txt">
<div class="contents_sub">
<div class="board_top">
<div class="bold">총 <span class="txt_orange"><%=totalRecord %></span>건</div>
</div>
<!--게시판-->
<div class="board">
<table>
<tr>
<th width="3%"> </th>
<th width="5%">번호</th>
<th>제목</th>
<th width="10%">글쓴이</th>
<th width="17%">등록일</th>
<th width="5%">조회</th>
<th width="3%"> </th>
</tr>
<!-- 내용 시작 -->
<%=sbHtml %>
<!-- 내용 끝 -->
</table>
</div>
<div class="btn_area">
<div class="align_right">
<input type="button" value="쓰기" class="btn_write btn_txt01" style="cursor: pointer;" onclick="location.href='board_write1.jsp'" />
</div>
</div>
<!--//게시판-->
</div>
</div>
<!--//하단 디자인 -->
</body>
</html>
java적으로 처리
db적으로 처리 :
date_format(wdate,'%Y-%m-%d')wdate
// 데이터 건수 집어넣기
int totalRecord = 0;
// 이 코드 이후에 코드 작성
rs = pstmt.executeQuery();
// 커서 맨 마지막으로 이동
rs.last();
// getRow가 갯수 읽어줌
totalRecord = rs.getRow();
// 다시 돌려놓기
rs.beforeFirst();
//
<div class="bold">총 <span class="txt_orange"><%=totalRecord %></span>건</div>
list를 통해서 확인이 가능하다.
바로 view 실행하면 확인 안됨.
seq를 통해(담아서) 간다.
list를 통하여 board_view1를 눌렀을 때 seq값을 갖고 가라는 의미
"<td class='left'><a href='board_view1.jsp?seq=" + seq + "'>"
board_view1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.naming.NamingException"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="java.sql.ResultSet"%>
<%
request.setCharacterEncoding("utf-8");
String seq = request.getParameter("seq");
//System.out.println(seq);
// try ~ catch를 지나서도 사용할 변수라서 바깥에 선언
String subject = "";
String writer = "";
String mail = "";
String wip = "";
String wdate = "";
String hit = "";
String content = "";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb3");
conn = dataSource.getConnection();
// 번호에 해당하는 값 가져오기
String sql = "select subject, writer, mail, wip, date_format(wdate,'%Y-%m-%d')wdate, hit, content from board1 where seq=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, seq);
rs = pstmt.executeQuery();
// view에서는 데이터를 하나만 가져오기때문에 if문을 사용
if(rs.next()) {
subject = rs.getString("subject");
writer = rs.getString("writer");
mail = rs.getString("mail");
wip = rs.getString("wip");
wdate = rs.getString("wdate");
hit = rs.getString("hit");
content = rs.getString("content");
}
} catch(NamingException e) {
System.out.println("[에러] : " + e.getMessage());
} catch(SQLException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="../../css/board.css">
</head>
<body>
<!-- 상단 디자인 -->
<div class="con_title">
<h3>게시판</h3>
<p>HOME > 게시판 > <strong>게시판</strong></p>
</div>
<div class="con_txt">
<div class="contents_sub">
<!--게시판-->
<div class="board_view">
<table>
<tr>
<th width="10%">제목</th>
<td width="60%"><%=subject %></td>
<th width="10%">등록일</th>
<td width="20%"><%=wdate %></td>
</tr>
<tr>
<th>글쓴이</th>
<td><%=writer %>(<%=mail%>)(<%=wip %>)</td>
<th>조회</th>
<td><%=hit %></td>
</tr>
<tr>
<td colspan="4" height="200" valign="top" style="padding: 20px; line-height: 160%"><%=content %></td>
</tr>
</table>
</div>
<div class="btn_area">
<div class="align_left">
<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'" />
</div>
<div class="align_right">
<input type="button" value="수정" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_modify1.jsp?seq=<%=seq %>'" />
<input type="button" value="삭제" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_delete1.jsp?seq=<%=seq %>'" />
<input type="button" value="쓰기" class="btn_write btn_txt01" style="cursor: pointer;" onclick="location.href='board_write1.jsp'" />
</div>
</div>
<!--//게시판-->
</div>
</div>
<!-- 하단 디자인 -->
</body>
</html>
아까는 목록을 눌러도 빈 공백으로 나왔지만 리스트를 통해 뷰를 들어가면 이렇게 저장돼 있는 정보들이 나온다.
내용란에 글을 쓸 때 줄바꿈을 하여도 줄바꿈이 안돼서 replaceAll 해줘야 줄바꿈 인식 해줌
content = rs.getString("content").replaceAll("\n","<br>");
// view에서 밑의 코드에 삭제부분에 넣어줘서 버튼 누르면 seq값 가져가게 한다.
<div class="align_right">
<input type="button" value="수정" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_modify1.jsp'" />
<input type="button" value="삭제" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_delete1.jsp?seq=<%=seq %>'" />
<input type="button" value="쓰기" class="btn_write btn_txt01" style="cursor: pointer;" onclick="location.href='board_write1.jsp'" />
</div>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.naming.NamingException"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="java.sql.ResultSet"%>
<%
request.setCharacterEncoding("utf-8");
String seq = request.getParameter("seq");
// System.out.println(seq);
String subject = "";
String writer = "";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb3");
conn = dataSource.getConnection();
// 번호에 해당하는 값 가져오기
String sql = "select subject, writer from board1 where seq=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, seq);
rs = pstmt.executeQuery();
// view에서는 데이터를 하나만 가져오기때문에 if문을 사용
if(rs.next()) {
subject = rs.getString("subject");
writer = rs.getString("writer");
}
} catch(NamingException e) {
System.out.println("[에러] : " + e.getMessage());
} catch(SQLException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="../../css/board.css">
<script type="text/javascript">
window.onload = function() {
document.getElementById('dbtn').onclick = function() {
if(document.dfrm.password.value.trim() == '') {
alert('비밀번호를 입력하셔야 합니다.');
return false;
}
document.dfrm.submit();
}
}
</script>
</head>
<body>
<!-- 상단 디자인 -->
<div class="con_title">
<h3>게시판</h3>
<p>HOME > 게시판 > <strong>게시판</strong></p>
</div>
<div class="con_txt">
<form action="board_delete1_ok.jsp" method="post" name="dfrm">
<!--hiddne은 디자인에 안보이고싶을 때 사용한다-->
<input type="hidden" name="seq" value="<%=seq %>" >
<div class="contents_sub">
<!--게시판-->
<div class="board_write">
<table>
<tr>
<th class="top">글쓴이</th>
<td class="top"><input type="text" name="writer" value="<%=writer %>" class="board_view_input_mail" maxlength="5" readonly/></td>
</tr>
<tr>
<th>제목</th>
<td><input type="text" name="subject" value="<%=subject %>" class="board_view_input" readonly/></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="password" value="" class="board_view_input_mail"/></td>
</tr>
</table>
</div>
<div class="btn_area">
<div class="align_left">
<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'" />
<input type="button" value="보기" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_view1.jsp'" />
</div>
<div class="align_right">
<input type="button" id="dbtn" value="삭제" class="btn_write btn_txt01" style="cursor: pointer;" />
</div>
</div>
<!--//게시판-->
</div>
</form>
</div>
<!-- 하단 디자인 -->
</body>
</html>
board_delete1_ok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.naming.NamingException"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%
request.setCharacterEncoding("utf-8");
String seq = request.getParameter("seq");
String password = request.getParameter("password");
// System.out.println(seq);
// System.out.println(password);
Connection conn = null;
PreparedStatement pstmt = null;
// 2 : 시스템 오류
int flag = 2;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb3");
conn = dataSource.getConnection();
// 암호 비교
String sql = "delete from board1 where seq=? and password=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, seq);
pstmt.setString(2, password);
// result가 0이면 비밀번호 틀린 것 / 0 : 비밀번호 오류, 1 : 정상
int result = pstmt.executeUpdate();
if(result == 1) {
flag = 0; // 정상
} else if(result == 0) {
flag = 1; // 오류
}
} catch(NamingException e) {
System.out.println("[에러] : " + e.getMessage());
} catch(SQLException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}
// 자바스크립트로 출력 / JSP 코드로 javascript 만듦
// 오류 났을때 알림창을 띄우기 위한 것.
out.println("<script type='text/javascript'>");
if(flag == 0) {
out.println("alert('글삭제 성공');");
out.println("location.href='board_list1.jsp';");
} else if(flag == 1) {
out.println("alert('비밀번호 오류');");
out.println("history.back();");
} else {
out.println("alert('글삭제에 실패');");
out.println("history.back();");
}
out.println("</script>");
%>
삭제시킴
seq를 가져와야함.
board_modify1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.NamingException" %>
<%@ page import="javax.sql.DataSource" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.SQLException" %>
<%
request.setCharacterEncoding( "utf-8" );
String seq = request.getParameter( "seq" );
//System.out.println( seq );
String subject = "";
String writer = "";
String[] mail = null;
String content = "";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup( "java:comp/env" );
DataSource dataSource = (DataSource)envCtx.lookup( "jdbc/mariadb3" );
conn = dataSource.getConnection();
String sql = "select subject, writer, mail, content from board1 where seq=?";
pstmt = conn.prepareStatement( sql );
pstmt.setString( 1, seq );
rs = pstmt.executeQuery();
if( rs.next() ) {
subject = rs.getString( "subject" );
writer = rs.getString( "writer" );
if( rs.getString("mail").equals("") ) {
mail = new String[] { "","" };
} else {
mail = rs.getString( "mail" ).split( "@" );
}
content = rs.getString( "content" );
}
} catch( NamingException e ) {
System.out.println( "[에러] " + e.getMessage() );
} catch( SQLException e ) {
System.out.println( "[에러] " + e.getMessage() );
} finally {
if( rs != null ) rs.close();
if( pstmt != null ) pstmt.close();
if( conn != null ) conn.close();
}
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="../../css/board.css">
<script type="text/javascript">
window.onload = function() {
document.getElementById( 'mbtn' ).onclick = function() {
if( document.mfrm.subject.value.trim() == '' ) {
alert( '제목을 입력하셔야 합니다.' );
return false;
}
if( document.mfrm.password.value.trim() == '' ) {
alert( '비밀번호를 입력하셔야 합니다.' );
return false;
}
document.mfrm.submit();
};
};
</script>
</head>
<body>
<!-- 상단 디자인 -->
<div class="con_title">
<h3>게시판</h3>
<p>HOME > 게시판 > <strong>게시판</strong></p>
</div>
<div class="con_txt">
<form action="board_modify1_ok.jsp" method="post" name="mfrm">
<input type="hidden" name="seq" value="<%=seq %>" />
<div class="contents_sub">
<!--게시판-->
<div class="board_write">
<table>
<tr>
<th class="top">글쓴이</th>
<td class="top"><input type="text" name="writer" value="<%=writer %>" class="board_view_input_mail" maxlength="5" readonly/></td>
</tr>
<tr>
<th>제목</th>
<td><input type="text" name="subject" value="<%=subject %>" class="board_view_input" /></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="password" value="" class="board_view_input_mail"/></td>
</tr>
<tr>
<th>내용</th>
<td><textarea name="content" class="board_editor_area"><%=content %></textarea></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="text" name="mail1" value="<%=mail[0] %>" class="board_view_input_mail"/> @ <input type="text" name="mail2" value="<%=mail[1] %>" class="board_view_input_mail"/></td>
</tr>
</table>
</div>
<div class="btn_area">
<div class="align_left">
<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'" />
<input type="button" value="보기" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_view1.jsp'" />
</div>
<div class="align_right">
<input type="button" id="mbtn" value="수정" class="btn_write btn_txt01" style="cursor: pointer;" />
</div>
</div>
<!--//게시판-->
</div>
</form>
</div>
<!-- 하단 디자인 -->
</body>
</html>
board_modify1_ok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.naming.NamingException"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%
request.setCharacterEncoding("utf-8");
String seq = request.getParameter("seq");
String subject = request.getParameter("subject");
String mail = "";
if (!request.getParameter("mail1").equals("") && !request.getParameter("mail2").equals("")) {
mail = request.getParameter("mail1") + "@" + request.getParameter("mail2");
}
String password = request.getParameter("password");
String content = request.getParameter("content");
Connection conn = null;
PreparedStatement pstmt = null;
int flag = 2;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource) envCtx.lookup("jdbc/mariadb3");
conn = dataSource.getConnection();
String sql = "update board1 set subject=?, mail=?, content=? where seq=? and password=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, subject);
pstmt.setString(2, mail);
pstmt.setString(3, content);
pstmt.setString(4, seq);
pstmt.setString(5, password);
int result = pstmt.executeUpdate();
if (result == 1) {
flag = 0;
} else if (result == 0) {
flag = 1;
}
} catch (NamingException e) {
System.out.println("[에러] " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] " + e.getMessage());
} finally {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
// 자바스크립트로 출력 / JSP 코드로 javascript 만듦
out.println("<script type='text/javascript'>");
if (flag == 0) {
out.println("alert('글수정 성공');");
out.println("location.href='board_modify1.jsp?seq=" + seq + "';");
} else if (flag == 1) {
out.println("alert('비밀번호 오류');");
out.println("history.back();");
} else {
out.println("alert('글수정 실패');");
out.println("history.back();");
}
out.println("</script>");
%>