<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.URLEncoder" %>
<%request.setCharacterEncoding("UTF-8");%>
<%
//------------------- 변수 및 객체 선언
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs1 = null;
ResultSet rs2 = null;
int TotalRecords = 0;
String Query1="";
String Query2="";
String encoded_key="";
//---------------------- 키워드 데이터 추출
String column = request.getParameter("column");
if (column == null) column="";
String key = request.getParameter("key");
if(key != null){
encoded_key = URLEncoder.encode(key, "UTF-8");
} else{
key="";
}
try{
//---------------- JDBC 설정
String jdbcUrl = "jdbc:sqlserver://(localhost):(port);encrypt=false;DatabaseName=(name);";
String jdbcId = "id";
String jdbcPw = "pw";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(jdbcUrl, jdbcId, jdbcPw);
//-------------------- 질의의 생성과 객체의 생성
if (column.equals("") || key.equals("")){
Query1 = "SELECT count(RcdNO) FROM dbo.board";
Query2 = "SELECT RcdNo, UsrSubject, Usrname, UsrDate, UsrRefer FROM dbo.board ORDER BY RcdNo DESC";
} else{
Query1 = "SELECT count(RcdNO) FROM dbo.board WHERE "+column+" LIKE '%"+key+"%'";
Query2 = "SELECT RcdNo, UsrSubject, Usrname, UsrDate, UsrRefer FROM dbo.board WHERE "+column+" LIKE '%"+key+"%'" + " ORDER BY RcdNo DESC";
}
pstmt = conn.prepareStatement(Query1);
rs1 = pstmt.executeQuery();
pstmt = conn.prepareStatement(Query2);
rs2 = pstmt.executeQuery();
//------------------------ 전체 레코드 수 추출
rs1.next();
TotalRecords = rs1.getInt(1);
%>
<!DOCTYPE html>
<html>
<head>
<meta HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML"; charset="UTF-8">
<LINK REL="stylesheet" type="text/css" herf="../include/style.css"/>
<title>게시글 리스트</title>
</head>
<body>
<TABLE WIDTH=620 HEIGHT=40 BORDER=0 CELLSPACING=1 CELLPADDING=1 ALIGN=CENTER>
<TR BGCOLOR=#A0A0A0>
<TD ALIGN=CENTER><FONT SIZe=4><B>게시판(리스트)</B></FONT></TD>
</TR>
</TABLE>
<%
//--------------------- JSP CODE START (세션 속성에 따른 문서 선택)
String member_id = (String)session.getAttribute("member_id");
if(member_id == null) {
%>
<jsp:include page="../member/LoginForm.jsp"/>
<%
} else {
%>
<jsp:include page="../member/LoginState.jsp"/>
<%
}
//--------------------- JSP CODE END
%>
<TABLE WIDTH=620 BORDER=1 CELLSPACING=0 CELLPADDING=1 ALIGN=CENTER>
<TR ALIGN=CENTER>
<TD WIDTH=45><B>번호</B></TD>
<TD WIDTH=395><B>제목</B></TD>
<TD WIDTH=65><B>작성자</B></TD>
<TD WIDTH=70><B>작성일</B></TD>
<TD WIDTH=45><B>참조</B></TD>
</TR>
<%
//----------------------------- 순환문을 이용한 레코드 출력 시작
while(rs2.next()){
//---------------------------------- 필드 데이터 추출과 출력
int rno = rs2.getInt("RcdNo");
String subject = rs2.getString("UsrSubject");
String name = rs2.getString("UsrName");
long date = rs2.getLong("UsrDate");
SimpleDateFormat Current = new SimpleDateFormat("yyyy/MM/dd");
String today = Current.format(date);
int refer = rs2.getInt("UsrRefer");
%>
<TR>
<TD WIDTH=45 ALIGN=CENTER><%=TotalRecords%></TD>
<TD WIDTH=395 ALIGN=LEFT><A HREF="BoardContent.jsp?rno=<%=rno%>&column=<%=column%>&key=<%=encoded_key%>"><%=subject%></A></TD>
<TD WIDTH=65 ALIGN=CENTER><%=name%></TD>
<TD ALIGN=CENTER><%=today%></TD>
<TD ALIGN=CENTER><%=refer%></TD>
</TR>
<%
//------------------------- 순환문을 이용한 레코드 출력 종료
TotalRecords--;
} //---end of while
%>
</TABLE>
<FORM NAME="BoardSerch" METHOD=POST action="BoardList.jsp">
<TABLE WIDTH=620 HEIGHT=50 BORDER=0 CELLSPACING=1 CELLPADDING=1 ALIGN=CENTER>
<TR>
<TD ALIGN=LEFT WIDTH=100>
<IMG SRC="../images/btn_new.gif" onClick="javascript:location.replace('BoardWrite.jsp?column=<%=column%>&key=<%=encoded_key%>')"; STYLE=CURSOR:HAND>
</TD>
<TD WIDTH=320 ALIGN=CENTER>
<IMG SRC="../images/btn_bf_block.gif">
<IMG SRC="../images/btn_bf_page.gif">
1 2 3 4 5 6 7 8 9 10
<IMG SRC="../images/btn_nxt_page.gif">
<IMG SRC="../images/btn_nxt_block.gif">
</TD>
<TD WIDTH=200 ALIGN=RIGHT>
<SELECT NAME="column" SIZE=1>
<OPTION VALUE="" SELECTED>선택</OPTION>
<OPTION VALUE="UsrSubject">제목</OPTION>
<OPTION VALUE="UsrContent">내용</OPTION>
</SELECT>
<INPUT TYPE=TEXT NAME="key" SIZE=10 MAXLENGTH=20>
<IMG SRC="../images/btn_search.gif" ALIGN=absmiddle STYLE=CURSOR:HAND onClick="javascripts:submit()">
</TD>
</TR>
</TABLE>
</FORM>
<%
} catch (SQLException e) {
e.printStackTrace();
} finally {
// close() 호출 전에 conn이 null이 아닌지 확인
if (conn != null) {
//---------------------- 생성된 객체의 제거와 페이지 이동
rs1.close();
rs2.close();
pstmt.close();
conn.close();
}
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder"%>
<%
String encoded_key = "";
//------------------------------- 키워드 데이터 추출
String column = request.getParameter("column");
if (column == null) column="";
String key = request.getParameter("key");
if (key!=null) {
encoded_key = URLEncoder.encode(key, "UTF-8");
} else{
key="";
}
%>
<!DOCTYPE html>
<html>
<head>
<meta HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=UTF-8"/>
<LINK REL="stylesheet" type="text/css" herf="../include/style.css"/>
<SCRIPT language="javascript" SRC="../include/scripts.js"></SCRIPT>
<title>게시글 입력</title>
<SCRIPT type="text/javascript">
function CheckForm(form){
if(!form.name.value){
alert('성명을 입력하세요.');
form.name.focus();
return true;
}
if(form.mail.value){
if( !isCorrectEmail('BoardWrite', 'mail')){
alert('전자우편형식이 올바르지 않습니다.');
form.mail.focus();
form.mail.select();
return;
}
}
if(!form.subject.value){
alert('게시판의 제목을 입력하세요.');
form.subject.focus();
return true;
}
if(!form.pass.value){
alert('패스워드를 입력하세요.');
form.pass.focus();
return true;
}
form.submit();
}
</SCRIPT>
</head>
<body>
<TABLE WIDTH=620 HEIGHT=40 BORDER=0 CELLSPACING=1 CELLPADDING=1 ALIGN=CENTER>
<TR BGCOLOR=#A0A0A0>
<TD ALIGN=CENTER><FONT SIZe=4><B>게시판(게시글 입력)</B></FONT></TD>
</TR>
</TABLE>
<%
/* JSP CODE START (세션 속성에 따른 문서 선택) */
String member_id = (String)session.getAttribute("member_id");
if (member_id == null){
%>
<jsp:include page="../member/LoginForm.jsp"/>
<%
} else {
%>
<jsp:include page="../member/LoginState.jsp"/>
<%
}
/* JSP CODE END */
%>
<FORM NAME="BoardWrite" METHOD=POST ACTION="BoardWriteProc.jsp">
<TABLE WIDTH=620 BORDER=1 CELLSPACING=0 CELLPADDING=2 ALIGN=CENTER>
<TR>
<TD WIDTH=120 ALIGN=CENTER><B>이름</B></TD>
<TD WIDTH=500>
<INPUT TYPE=TEXT NAME="name" SIZE=20 style="ime-mode:inactive" onKeyDown='javascript:Korean()'>
</TD>
</TR>
<TR>
<TD WIDTH=120 ALIGN=CENTER><B>전자우편</B></TD>
<TD WIDTH=500>
<INPUT TYPE=TEXT NAME="mail" SIZE=60 style="ime-mode:inactive">
</TD>
</TR>
<TR>
<TD WIDTH=120 ALIGN=CENTER><B>제목</B></TD>
<TD WIDTH=500>
<INPUT TYPE=TEXT NAME="subject" SIZE=70>
</TD>
</TR>
<TR>
<TD WIDTH=120 ALIGN=CENTER><B>내용</B></TD>
<TD WIDTH=500>
<TEXTAREA NAME="content" COLS=70 ROWS=8></TEXTAREA>
</TD>
</TR>
<TR>
<TD WIDTH=120 ALIGN=CENTER><B>파일첨부</B></TD>
<TD WIDTH=500>
<INPUT TYPE=FILE NAME="filename" SIZE=60>
</TD>
</TR>
<TR>
<TD WIDTH=120 ALIGN=CENTER><B>패스워드</B></TD>
<TD WIDTH=500>
<INPUT TYPE=PASSWORD NAME="pass" SIZE=20>
</TD>
</TR>
</TABLE>
</FORM>
<TABLE WIDTH=620 HEIGHT=50 BORDER=0 CELLSPACING=1 CELLPADDING=1 ALIGN=CENTER>
<TR ALIGN=CENTER>
<TD WIDTH=110 ALIGN=LEFT>
<IMG SRC="../images/btn_list.gif" onClick="javascript:location.replace('BoardList.jsp?column=<%=column%>&key=<%=encoded_key%>')" STYLE=CURSOR:HAND>
</TD>
<TD WIDTH=400 ALIGN=CENTER>
<IMG SRC="../images/btn_save.gif" STYLE=CURSOR:HAND onClick="javascript:CheckForm(BoardWrite)">
<IMG SRC="../images/btn_cancle.gif" onClick="javascript:location.replace('BoardList.jsp?column=<%=column%>&key=<%=encoded_key%>')" STYLE=CURSOR:HAND>
</TD>
<TD WIDTH=110 ALIGN=LEFT> </TD>
</TR>
</TABLE>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.URLEncoder" %>
// JDBC와 encode() 메소드를 사용하기 위한 클래스들을 import 하는 구문
<%
int rno = Integer.parseInt(request.getParameter("rno"));
// request 기본 객체를 통해 전달된 레코드 식별자 rno 추출하는 구문
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs1 = null;
String encoded_key="";
// JDBC를 사용하기 위한 객체와 키워드 인코딩을 위한 변수 선언
//--------------------------- 전송된 검색어 처리
String column = request.getParameter("column");
if (column == null) column="";
String key = request.getParameter("key");
if (key!=null){
encoded_key = URLEncoder.encode(key, "UTF-8");
} else {
key="";
}
// 검색 기능을 사용할 경우 전달된 column, key 추출
// 키워드가 존재할 경우 키워드를 인코딩하는 구문
try{
//------------------------ JDBC 설정
String jdbcUrl = "jdbc:sqlserver://(localhost):(port);encrypt=false;DatabaseName=(name);";
String jdbcId = "id";
String jdbcPw = "pw";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(jdbcUrl, jdbcId, jdbcPw);
// JDBC를 사용하기 위한 Connection 객체 생성
//---------------------------- UsrRefer 필드값 1 증가
String Query1 = "UPDATE dbo.board SET UsrRefer=UsrRefer+1 WHERE RcdNo=?";
pstmt = conn.prepareStatement(Query1);
pstmt.setInt(1, rno);
pstmt.executeUpdate();
// UsrRefer 필드 값을 1만큼 증가시키고 질의 생성하고 수행
String Query2 = "SELECT UsrName, UsrMail, UsrSubject, UsrContent FROM dbo.board WHERE RcdNo=?";
pstmt = conn.prepareStatement(Query2);
pstmt.setInt(1, rno);
rs1 = pstmt.executeQuery();
rs1.next();
// BoardContent.jsp 문서에 출력할 레코드를 추출하는 질의 수행, 레코드의 각 필드 값들 추출하는 구문
String name = rs1.getString(1);
String mail = rs1.getString(2);
String subject = rs1.getString(3).trim();
String content = rs1.getString(4).trim();
content = content.replaceAll("\r\n","<BR>");
%>
<!DOCTYPE html>
<html>
<head>
<meta HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; charset="UTF-8"/>
<LINK REL="stylesheet" type="text/css" herf="../include/style.css">
<title>게시글 출력</title>
</head>
<body>
<TABLE WIDTH=620 HEIGHT=40 BORDER=0 CELLSPACING=1 CELLPADDING=1 ALIGN="CENTER">
<TR BGCOLOR=#A0A0A0>
<TD ALIGN=CENTER><FONT SIZE=4><B>게시판(게시글 출력)</B></FONT></TD>
</TR>
</TABLE>
<%
//---------------JSP CODE START(세션 속성에 따른 문서 선택)
String member_id =(String)session.getAttribute("member_id");
if (member_id ==null){
%>
<jsp:include page="../member/LoginForm.jsp"/>
<%
} else{
%>
<jsp:include page="../member/LoginState.jsp"/>
<%
}
//--------------------- JSP CODE END
%>
<TABLE WIDTH=620 BORDER=1 CELLSPACING=1 CELLPADDING=1 ALIGN="CENTER">
<TR>
<TD WIDTH=120 ALLIGN=CENTER><B>이름</B></TD>
<TD WIDTH=500><%=name%></TD>
</TR>
<TR>
<TD WIDTH=120 ALLIGN=CENTER><B>전자우편</B></TD>
<TD WIDTH=500><%=mail%></TD>
</TR>
<TR>
<TD WIDTH=120 ALLIGN=CENTER><B>제목</B></TD>
<TD WIDTH=500><%=subject%></TD>
</TR>
<TR>
<TD WIDTH=120 ALLIGN=CENTER><B>내용</B></TD>
<TD WIDTH=500><%=content%></TD>
</TR>
// 추출한 이름, email주소, 레코드의 제목, 레코드의 내용이 브라우저 출력되게 함
<TR>
<TD WIDTH=120 ALLIGN=CENTER><B>첨부파일</B></TD>
<TD WIDTH=500>첨부된 파일이 없습니다. </TD>
</TR>
</TABLE>
<TABLE WIDTH=620 HEIGHT=50 BORDER=0 CELLSPACING=1 CELLPADDING=1 ALIGN="CENTER">
<TR ALIGN="CENTER">
<TD WIDTH="310" ALIGN=LEFT>
<IMG SRC="../images/btn_list.gif" STYLE=CURSOR:HAND onClick="javascript:location.replace('BoardList.jsp?column=<%=column%>&key=<%=encoded_key%>')">
</TD>
<TD WIDTH="310" ALIGN=RIGHT>
<IMG SRC="../images/btn_reply.gif" STYLE=CURSOR:HAND onClick="javascript:location.replace('BoardReply.jsp?rno=<%=rno%>&column=<%=column%>&key=<%=encoded_key%>')">
<IMG SRC="../images/btn_mdfy.gif" STYLE=CURSOR:HAND onClick="javascript:location.replace('BoardModify.jsp?rno=<%=rno%>&column=<%=column%>&key=<%=encoded_key%>')">
<IMG SRC="../images/btn_del.gif" STYLE=CURSOR:HAND onClick="javascript:location.replace('BoardDelte.jsp?rno=<%=rno%>&column=<%=column%>&key=<%=encoded_key%>')">
// BoardContent.jsp 문서가 포함하고 있는 목록, 작성, 수정, 삭제 문서로의 하이퍼링크 변수에 rno, column, key 추가 -> 기존 하이퍼 링크 변경
</TD>
</TR>
</TABLE>
<%
} // ---- end of try
catch (SQLException e){
e.printStackTrace();
} finally{
if (conn != null) {
//---------------------- 생성된 객체의 제거와 페이지 이동
rs1.close();
pstmt.close();
conn.close();
}
}
%>
</body>
</html>
int rno = Integer.parseInt(request.getParameter('rno'));

이해 안가는 점 (이름때문에 사진 크롭)
BoardList.jsp로 들어감 → 제목 클릭 → 잘 보임


BoardWrite.jsp로 들어감 → 목록 클릭→ 제목 클릭 ⇒ 잘 보임



BoardContent.jsp 실행 → 에러발생 Why..?!

아니 근데 BoardContent.jsp의 기능인 참조 카운트도 잘 됨

왜 BoardContent.jsp을 실행시키면 rno에서 에러가 날까?