목록보기에 이어 글쓰기파일을 만들어 보겠습니다.

write.jsp파일을 생성하시고~

코드를 입력합니다. 우선 동작은 없는 디자인뿐인 코드입니다.


<%@ page language="javacontentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <title>게시판</title>
 </head>
 <body>
<table>
  <tr>
   <td>
    <table width="100%" cellpadding="0" cellspacing="0" border="0">
     <tr style="background:url('img/table_mid.gif') repeat-x; text-align:center;">
      <td width="5"><img src="img/table_left.gif" width="5" height="30" /></td>
      <td>글쓰기</td>
      <td width="5"><img src="img/table_right.gif" width="5" height="30" /></td>
     </tr>
    </table>
   <table>
     <tr>
      <td>&nbsp;</td>
      <td align="center">제목</td>
      <td><input name="title" size="50" maxlength="100"></td>
      <td>&nbsp;</td>
     </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
    <tr>
      <td>&nbsp;</td>
      <td align="center">이름</td>
      <td><input name="name" size="50" maxlength="50"></td>
      <td>&nbsp;</td>
     </tr>
      <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
    <tr>
      <td>&nbsp;</td>
      <td align="center">비밀번호</td>
      <td><input name="password" size="50" maxlength="50"></td>
      <td>&nbsp;</td>
     </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
     <tr>
      <td>&nbsp;</td>
      <td align="center">내용</td>
      <td><textarea name="memo" cols="50" rows="13"></textarea></td>
      <td>&nbsp;</td>
     </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
     <tr height="1" bgcolor="#82B5DF"><td colspan="4"></td></tr>
     <tr align="center">
      <td>&nbsp;</td>
      <td colspan="2"><input type=button value="등록">
       <input type=button value="취소">
      <td>&nbsp;</td>
     </tr>
    </table>
   </td>
  </tr>
 </table>
</body

</html>


코드를 입력하시고 실행해보시면


글쓰기 양식이 생겼습니다.


write.jsp 파일도 생성했으니 list.jsp에서 write.jsp로 넘어가는 코드를 삽입하겠습니다.

list.jsp를 열어서 맨아래에 보시면

<td><input type=button value="글쓰기"></td>

이 부분이 있습니다. 현재는 글쓰기 버튼을 눌러도 아무 반응이 없습니다.

자 이곳에 

OnClick="window.location='write.jsp'"

이 코드를 삽입하겠습니다.

<td><input type=button value="글쓰기" OnClick="window.location='write.jsp'"></td>

이렇게 링크를 걸게 되면 버튼을 눌렀을때 write.jsp로 넘어가게 됩니다.

다시 write.jsp로 넘어와서 글쓰기에 필요한 코딩을 추가시키도록 하겠습니다.

첫번째 테이블 안쪽에

<form name=writeform method=post action="write_ok.jsp">

이 코드를 추가시킵니다.

이 곳에 쓰인 값들을 write_ok.jsp에 보내야 하는데 

데이터전달에는 주소에 값을 붙여서 보내는 Get방식과

파일형식으로 보내는 Post방식중 이곳은 Post방식을 사용합니다.

form을 열었으니 맨아래에 </form>을 써서 form을 닫아줍니다.


그리고 상단에 이 코드를 추가시킵니다.


<script language = "javascript"> // 자바 스크립트 시작

function writeCheck()
  {
   var form = document.writeform;
   
   if( !form.name.value )   // form 에 있는 name 값이 없을 때
   {
    alert( "이름을 적어주세요" ); // 경고창 띄움
    form.name.focus();   // form 에 있는 name 위치로 이동
    return;
   }
   
   if( !form.password.value )
   {
    alert( "비밀번호를 적어주세요" );
    form.password.focus();
    return;
   }
   
  if( !form.title.value )
   {
    alert( "제목을 적어주세요" );
    form.title.focus();
    return;
   }
 
  if( !form.memo.value )
   {
    alert( "내용을 적어주세요" );
    form.memo.focus();
    return;
   }
 
  form.submit();
  }
 </script>


자바스크립트를 이용한 유효성검사입니다. 이름, 비밀번호, 제목, 내용을 입력 안했을시에 경고창을 띄우고 입력하게끔 합니다.


이제 아래쪽에 있는 버튼에 링크를 걸겠습니다.

<input type=button value="등록" OnClick="javascript:writeCheck();"

<input type=button value="취소" OnClick="javascript:history.back(-1)">

등록 버튼을 누를시 writeCheck() 함수로 가서 검사를 하고 이상이 없을시 form.submit()으로 write_ok.jsp로 값을 보내게 됩니다.

취소 버튼을 누를시 뒤로가기 코드인 history.back()을 넣었습니다.

그리고 write_ok.jsp파일을 만들어 놓고

잘 실행되는지 테스트해보겠습니다. list.jsp파일을 실행시켜서 글쓰기 버튼을 누릅니다.








모든 값을 입력하고 등록버튼을 눌렀을때 이 주소처럼 write_ok.jsp가 열리는지 확인합니다.


여기까지 소스를 보겠습니다.

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

<script language = "javascript"> // 자바 스크립트 시작 function writeCheck() { var form = document.writeform; if( !form.name.value ) // form 에 있는 name 값이 없을 때 { alert( "이름을 적어주세요" ); // 경고창 띄움 form.name.focus(); // form 에 있는 name 위치로 이동 return; } if( !form.password.value ) { alert( "비밀번호를 적어주세요" ); form.password.focus(); return; } if( !form.title.value ) { alert( "제목을 적어주세요" ); form.title.focus(); return; } if( !form.memo.value ) { alert( "내용을 적어주세요" ); form.memo.focus(); return; } form.submit(); } </script> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>게시판</title> </head> <body> <table> <form name=writeform method=post action="write_ok.jsp"> <tr> <td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr style="background:url('img/table_mid.gif') repeat-x; text-align:center;"> <td width="5"><img src="img/table_left.gif" width="5" height="30" /></td> <td>글쓰기</td> <td width="5"><img src="img/table_right.gif" width="5" height="30" /></td> </tr> </table> <table> <tr> <td>&nbsp;</td> <td align="center">제목</td> <td><input name="title" size="50" maxlength="100"></td> <td>&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr> <tr> <td>&nbsp;</td> <td align="center">이름</td> <td><input name="name" size="50" maxlength="50"></td> <td>&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr> <tr> <td>&nbsp;</td> <td align="center">비밀번호</td> <td><input type="password" name="password" size="50" maxlength="50"></td> <td>&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr> <tr> <td>&nbsp;</td> <td align="center">내용</td> <td><textarea name="memo" cols="50" rows="13"></textarea></td> <td>&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr> <tr height="1" bgcolor="#82B5DF"><td colspan="4"></td></tr> <tr align="center"> <td>&nbsp;</td> <td colspan="2"><input type=button value="등록" OnClick="javascript:writeCheck();"> <input type=button value="취소" OnClick="javascript:history.back(-1)"> <td>&nbsp;</td> </tr> </table> </td> </tr> </form> </table> </body> </html>


이제 write_ok.jsp 파일을 열겠습니다. 이 ok파일에서는 실질적인 동작이 이루어집니다. 데이터베이스에 접근을 해서 자료를 데이터베이스에 입력하겠습니다.


<%@ page import="java.sql.*"%> 

SQL문을 사용하기 위해 java.sql.* 을 import시킵니다.


<% request.setCharacterEncoding("euc-kr"); //받아오는 값들을 한글로 인코딩합니다. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:board2"; String id = ""; String pass = "";

String name = request.getParameter("name"); //write.jsp에서 name에 입력한 데이터값 String password = request.getParameter("password");//write.jsp에서 password에 입력한 데이터값 String title = request.getParameter("title"); //write.jsp에서 title에 입력한 데이터값 String memo = request.getParameter("memo"); //write.jsp에서 memo에 입력한 데이터값 try { Connection conn = DriverManager.getConnection(url,id,pass); String sql = "INSERT INTO board1(USERNAME,PASSWORD,TITLE,MEMO) VALUES(?,?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, name); pstmt.setString(2, password); pstmt.setString(3, title); pstmt.setString(4, memo); pstmt.execute(); pstmt.close(); conn.close(); } catch(SQLException e) { out.println( e.toString() ); } 

%>

list.jsp에서는 Statement를 사용했는데 이곳에서는 PreparedStatement를 사용했습니다.

둘다 사용하기에 따라 장점이 있지만 PrepatedStatement가 더 오류잡기도 편한것 같습니다.


  <script language=javascript>
   self.window.alert("입력한 글을 저장하였습니다.");
   location.href="list.jsp"; 
   </script>

자바스크립트를 이용하여 데이터베이스에 자료가 입력된후 "입력한 글을 저장하였습니다"라는 경고창을 띄운후

list.jsp 즉 게시판 목록으로 돌아가게됩니다.

이곳은 사용자가 페이지를 볼 이유가 없기때문에 html파일은 필요없습니다.

이제 코딩이 잘 되었나 확인하기 위해 write.jsp를 실행시켜서 자료를 입력해봅니다.



저장하였다고 경고창이 뜹니다.


목록으로 이동하니 테스트2라는 게시물이 하나 더 생겼네요.


데이터베이스를 한번 봤더니 잘 들어가있네요.


write_ok.jsp 최종코드


<%@ page language="javacontentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%> <%@ page import="java.sql.*"%> <% request.setCharacterEncoding("euc-kr"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:board2"; String id = ""; String pass = ""; String name = request.getParameter("name"); String password = request.getParameter("password"); String title = request.getParameter("title"); String memo = request.getParameter("memo"); try { Connection conn = DriverManager.getConnection(url,id,pass); String sql = "INSERT INTO board1(USERNAME,PASSWORD,TITLE,MEMO) VALUES(?,?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, name); pstmt.setString(2, password); pstmt.setString(3, title); pstmt.setString(4, memo); pstmt.execute(); pstmt.close(); conn.close(); } catch(SQLException e) { out.println( e.toString() ); } %> <script language=javascript> self.window.alert("입력한 글을 저장하였습니다."); location.href="list.jsp"; 

</script>



이미지출처 : 판다의 이상한 블로그(http://ssppmm.tistory.com/)

Posted by 세이나린
,

1. Ms Access 연동

 - 우선 세팅을 하기 위해 ODBC를 설정합니다.

 세팅법 <-- 클릭


 - 소스코드


2. Oracle(오라클) 연동

 - 오라클 설치 폴더의 Lib폴더 안에 있는 ojdbc14.jar, classes12.jar 파일을 복사합니다.
    복사한 파일을 톰캣설치 폴더 안에 있는 common\lib 폴더에 붙여넣습니다.
    이번에는 자바 설치 폴더안에 있는 jre\lib\ext 폴더에 붙여넣습니다.

 - 소스코드


3. My SQL 연동

 - mysql connector <-- 클릭시 다운로드
   커넥터를 다운받아서 해당 프로젝트의 WebContent - WEB-INF-lib 폴더에 넣습니다.

 - 소스코드




Posted by 세이나린
,

1. 이클립스를 실행하고 New - Dynamic Web Project를 클릭합니다.


New - Dynamic Web Project


Project name에 프로젝트이름을 입력하고 Finish를 누릅니다.



저는 Board_Blog라는 프로젝트명을 입력해서 만들었습니다.

WebContent에 jsp파일이 들어가게 됩니다.

src는 자바파일이 들어가는데 이번에는 사용하지 않습니다.


WebContent나 Board_Blog에 우측 클릭을 하셔서 New - Other로 갑니다.


아래쪽에 보면 Web폴더에 JSP File을 선택하고 Next


File name 에 list.jsp로 작성하고 Finish버튼을 누릅니다.



이렇게 list.jsp가 만들어졌습니다.

이제 이곳에 코딩을 하게됩니다.

기본적으로 HTML문서로 이루어져있습니다.

저희는 게시판을 만들예정이니 주로 테이블로 구성되겠습니다.

제가 만든 게시판의 디자인은 

판다의 이상한 블로그(http://ssppmm.tistory.com/) 에서

참고하고 이미지파일도 사용했습니다.


<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>게시판</title> </head> <body> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr height="5"><td width="5"></td></tr> <tr style="background:url('img/table_mid.gif') repeat-x; text-align:center;"> <td width="5"><img src="img/table_left.gif" width="5" height="30" /></td> <td width="73">번호</td> <td width="379">제목</td> <td width="73">작성자</td> <td width="164">작성일</td> <td width="58">조회수</td> <td width="7"><img src="img/table_right.gif" width="5" height="30" /></td> </tr> <tr height="25" align="center"> </tr> <tr height="1" bgcolor="#D2D2D2"><td colspan="6"></td></tr> <tr height="1" bgcolor="#82B5DF"><td colspan="6" width="752"></td></tr> </table> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr><td colspan="4" height="5"></td></tr> <tr align="center"> <td><input type=button value="글쓰기"></td> </tr> </table> </body

</html>


저희가 사용할 게시판의 디자인양식입니다. 

중간에 보시면 img/table_mid.gif 이런게 보이실겁니다.

이미지 파일을 사용하기위해 WebContent폴더에 img폴더를 하나 생성합니다.


   <-- table_left.gif 

  <--table_mid.gif

  <--table_right.gif

이 이미지들은 

판다의 이상한 블로그(http://ssppmm.tistory.com/) 에서

참고하고 이미지파일도 사용했습니다.


그리고 이제 실행을 시켜보기 위해

Run을 누릅니다. 


서버(톰캣)을 확인하고 Finish!



실행된 화면입니다.

http://localhost:8080/Board_Blog/list.jsp란 주소도 보이군요



본격적으로 코딩을 하기 전에 DataBase파일을 만들겠습니다. 

Oracle이나 My sql은 Create 테이블로 만들면 되지만 Ms Access는 따로 만들어줘야겠죠?

Access를 실행시킵니다.


새 데이터베이스를 더블클릭


테이블에 항목들을 추가시킵니다.


저는 Num, UserName, Password, Title, Memo, Time, Hit, Ref, Indent, Step을 만들었습니다.

만들고 저장을 하면 테이블명을 저장하라고 합니다. 저희는 게시판이니 board로 하겠습니다.



왼쪽 위에 보면 보기버튼이 있습니다. 클릭합니다.


우측에 보면 저장한 필드들이 있고 데이터형식이 있습니다.

Num은 일련번호 형식입니다. 자동적으로 +1이 되어 생성됩니다.

mysql에서는 auto increment를 해주면 됩니다. 

오라클에서는 Sequence를 해주시면 됩니다. (올닉스님의 지식제공)

또한 기본키를 주게됩니다


날짜에는 기본값을 =Now() 값을 줍니다.

값이 저장될때 현재시간을 입력하게 됩니다.

다른 데이터베이스에서는 SQL문에서 Now()로 넣으시면 됩니다.

그밖에 hit, ref, indent는 기본값 0을 넣겠습니다.

여기까지 데이터베이스 세팅이었습니다.


본격적으로 코딩을 시작하겠습니다.

====================================================================================================


우선 자바(jsp)와 데이터베이스의 연동코드를 보시길 바랍니다.

 - 연동코드 보러가기 <--클릭


====================================================================================================

기본틀을 만들어놨던 위에 코드에 디비연결을 하는 코드를 추가시키겠습니다.


<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <title>게시판</title>
 </head>
 <body>
 <%
	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	String url = "jdbc:odbc:board2";
	String id = "";
	String pass = "";
	int total = 0;
	
	try {
		Connection conn = DriverManager.getConnection(url,id,pass);
		Statement stmt = conn.createStatement();

		String sqlCount = "SELECT COUNT(*) FROM board";
		ResultSet rs = stmt.executeQuery(sqlCount);
		
		if(rs.next()){
			total = rs.getInt(1);
		}
		rs.close();
		out.print("총 게시물 : " + total + "");
		
		String sqlList = "SELECT NUM, USERNAME, TITLE, TIME, HIT from board order by NUM DESC";
		rs = stmt.executeQuery(sqlList);
		
%>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr height="5"><td width="5"></td></tr>
 <tr style="background:url('img/table_mid.gif') repeat-x; text-align:center;">
   <td width="5"><img src="img/table_left.gif" width="5" height="30" /></td>
   <td width="73">번호</td>
   <td width="379">제목</td>
   <td width="73">작성자</td>
   <td width="164">작성일</td>
   <td width="58">조회수</td>
   <td width="7"><img src="img/table_right.gif" width="5" height="30" /></td>
  </tr>
<%
	if(total==0) {
%>
	 		<tr align="center" bgcolor="#FFFFFF" height="30">
	 	   <td colspan="6">등록된 글이 없습니다.</td>
	 	  </tr>
<%
	 	} else {
	 		
		while(rs.next()) {
			int idx = rs.getInt(1);
			String name = rs.getString(2);
			String title = rs.getString(3);
			String time = rs.getString(4);
			int hit = rs.getInt(5);
		
%>
<tr height="25" align="center">
	<td>&nbsp;</td>
	<td><%=idx %></td>
	<td align="left"><%=title %></td>
	<td align="center"><%=name %></td>
	<td align="center"><%=time %></td>
	<td align="center"><%=hit %></td>
	<td>&nbsp;</td>
</tr>
  <tr height="1" bgcolor="#D2D2D2"><td colspan="6"></td></tr>
<% 
		}
	} 
	rs.close();
	stmt.close();
	conn.close();
} catch(SQLException e) {
	out.println( e.toString() );
}
%>
 <tr height="1" bgcolor="#82B5DF"><td colspan="6" width="752"></td></tr>
 </table>
 
<table width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr><td colspan="4" height="5"></td></tr>
  <tr align="center">
   <td><input type=button value="글쓰기"></td>
  </tr>
</table>
</body

</html>

코드를 부분부분 설명 하겠습니다.

<%@ page import = "java.sql.*"%// sql문을 사용하기 위해 import시킵니다.  


<% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:board2"; String id = ""; String pass = ""; int total = 0; try { Connection conn = DriverManager.getConnection(url,id,pass); //DB연결 Statement stmt = conn.createStatement(); //Statement타입의 객체생성 String sqlCount = "SELECT COUNT(*) FROM board"; // DB내의 자료개수를 찾는 SQL문 ResultSet rs = stmt.executeQuery(sqlCount); // DB실행 if(rs.next()){ // rs.next()의 반환값은 true or false입니다. 찾는결과가 있으면 true total = rs.getInt(1); // SELECT문의 첫번째 필드 여기선 COUNT(*) } out.print("총 게시물 : " + total + ""); // 게시물수 출력 String sqlList = "SELECT NUM, USERNAME, TITLE, TIME, HIT from board order by NUM DESC"; // board 테이블에 있는 Num, UserName, title, time, hit의 값을 가져오되 Num을 기준으로 내림차순정렬 rs = stmt.executeQuery(sqlList); // DB실행

%>


<% if(total==0) { // total 즉, 자료가 없다면 %> <tr align="center" bgcolor="#FFFFFF" height="30"> <td colspan="6">등록된 글이 없습니다.</td> </tr> <% } else { // total이 0이 아닌 즉 자료가 1개이상 있다면 while(rs.next()) { // while이라는 반복문으로 자료를 찾습니다. rs.next()는 다음라인으

로 커서 이동 int idx = rs.getInt(1); // 1은 첫번째 즉 num값을 idx라는 변수에 대입 String name = rs.getString(2); // name String title = rs.getString(3); // title String time = rs.getString(4); // time int hit = rs.getInt(5); // hit %> <tr height="25" align="center"> <td>&nbsp;</td> <td><%=idx %></td> <td align="left"><%=title %></td> <td align="center"><%=name %></td> <td align="center"><%=time %></td> <td align="center"><%=hit %></td> <td>&nbsp;</td> </tr> <tr height="1" bgcolor="#D2D2D2"><td colspan="6"></td></tr> <% } } rs.close(); //rs객체 반환 stmt.close(); // stmt객체 반환 conn.close(); // conn객체 반환 } catch(SQLException e) { out.println( e.toString() ); //에러 날경우 에러출력

%>


이렇게 코딩을 하고 실행을 시켜보면


게시물이 없기 때문에 0개로 뜨고 등록된 글이 없습니다.라고 잘 뜨고있네요.

아직 글쓰기는 구현하지 않은 상태이므로 테스트겸 

수작업으로 데이터베이스에 자료를 추가해보겠습니다.


입력하고 저장하고


실행했더니 게시글도 잘나오네요!


에러가 나시는분은 오타 잘 찾아보세요~

코딩은 에러찾기가 반이상인것 같네요



이미지출처 : 판다의 이상한 블로그(http://ssppmm.tistory.com/)



Posted by 세이나린
,