2022.08.31 JSP

sofia·2022년 9월 4일
0

JAVA

목록 보기
24/27
post-thumbnail

사용자 관리 이어서

사용자 관리 3-1

main.jsp

  • 여기서 회원정보 변경 클릭시
    memberUpdate.jsp로 이동
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	if(session.getAttribute("Member")== null){
		response.sendRedirect("login.jsp");
	}//loginOk에서 session.setAttribute("Mebmer", "yes");가 아닌경우 login.jsp로 보낸다.(튕기게함)
	
	String uid = (String)session.getAttribute("uid");
	String name = (String)session.getAttribute("name");
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

	<table border="1" align="center">
	<form method="post" action ="logOut.jsp">
	<tr>
		<td>안녕하세요. <%= name %>(<%= uid %>)</td>
	</tr>
	<tr>
		<td>
			<input type="submit" value="로그아웃">
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			<input type="button" value="회원정보변경"
			onclick="javascript:window.location='memberUpdate.jsp'">
		</td>
	</tr>
	</form>
	</table>
</body>
</html>

memberUpdate.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<script language="JavaScript" src="script.js" charset="utf-8"></script>
<body>
<%
	
	String uid = (String)session.getAttribute("uid");
	String name = (String)session.getAttribute("name");
	
%>

<table  border="1" align ="center">
		<form name="reg_frm" method="post" action="registerOk.jsp">
			<tr height="50">
         		<td colspan = "2">
         			<h1>회원 가입 신청</h1>
         			'*'표시 항목은 필수 입력 항목입니다.
         		</td>
     		</tr>
     		<tr height="30">
         		<td width="80">User ID</td >
     			<td><%=uid %></td>
     		</tr>
     		<tr height="30">
         		<td width="80">암호</td>
     			<td><input type="password" size ="20" name="mem_pwd">*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">암호 확인</td>
     			<td><input type="password" size ="20" name="pwd_check">*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">이     름</td>
     			<td><%= name %></td>
     		</tr>
     		<tr height="30">
         		<td width="80">E-mail</td>
     			<td><input type="text" size ="30" name="mem_email" >*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">주     소</td>
     			<td><input type="text" size ="40"name="mem_addr"></td>
     		</tr>
     		<tr>
     			<td colspan = "2" align="center">
         		 	<input type="button" value="수정" onclick="update_check_ok()">
         			<input type="reset" value="다시입력">
         			<input type="button" value="수정안함" onclick="javascript:window.location='login.jsp'">
         		</td>
     		</tr>
		</form>
	</table>
</body>
</html>

script.js

  • update_check_ok() 추가
function check_ok(){
	//if(document.reg_frm.mem_uid.value==""){
	//if(reg_frm.mem_uid.value==""){
	if(reg_frm.mem_uid.value.length==0){
		alert("아이디를 써주세요");
		reg_frm.mem_uid.focus();
		return;//아이디가 없으면 리턴
	}
	
	if(reg_frm.mem_uid.value.length < 4){
		alert("아이디는 4글자이상이어야 합니다.");
		reg_frm.mem_uid.focus();
		return;//패스워드가  없으면 리턴
	}
	
	if(reg_frm.mem_pwd.value.length == 0){
		alert("패스워드는 반드시 입력해야 합니다.");
		reg_frm.mem_pwd.focus();
		return;//아이디가 없으면 리턴
	}
	
	if( reg_frm.pwd_check.value != reg_frm.mem_pwd.value){
		alert("패스워드가 일치하지 않습니다.");
		reg_frm.pwd_check.focus();
		return;//패스워드가 일치하지 않으면 리턴
	}

	if( reg_frm.mem_name.value.length==0){
		alert("이름을  써주세요.");
		reg_frm.mem_name.focus();
		return;//이름가 없으면 리턴
	}
	
	if( reg_frm.mem_email.value.length==0){
		alert("Email을  써주세요.");
		reg_frm.mem_email.focus();
		return;//이름가 없으면 리턴
	}
	
	document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="registerOk.jsp"으로 가겠다.(전송/submit)
}

function update_check_ok(){
	if(upd_frm.mem_pwd.value.length == 0){
		alert("패스워드는 반드시 입력해야 합니다.");
		upd_frm.mem_pwd.focus();
		return;//아이디가 없으면 리턴
	}
	
	if( upd_frm.pwd_check.value != upd_frm.mem_pwd.value){
		alert("패스워드가 일치하지 않습니다.");
		upd_frm.pwd_check.focus();
		return;//패스워드가 일치하지 않으면 리턴
	}
	
	if( upd_frm.mem_email.value.length==0){
		alert("Email을  써주세요.");
		upd_frm.mem_email.focus();
		return;//이름가 없으면 리턴
	}
	
	document.upd_frm.submit();
}

memberDBBean.java

  • updateMember()메소드 추가
package magic.member;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MemberDBBean {
	Connection conn = null;
	PreparedStatement pstmt = null;
	
	//1. 전역 MemberDBBean 객체 레퍼런스를 리턴하는 메소드
	private static MemberDBBean instance = new MemberDBBean();
	//참조변수 instance를 객체로 받아서 사용
	public static MemberDBBean getInstance(){
		return instance;
	//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
	//jsp에서 메소드 호출하면 편하기 때문
	}
	
	
	
	//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
	public Connection getConnection( ) throws Exception{
		Context ctx =  new InitialContext();
		DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
		//경로 찾기
		return ds.getConnection();
		//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
		//jsp에서 메소드 호출하면 편하기 때문
	}

	
	//3. 전달인자로 받은 member를 memberT 테이블에 삽입하는 메소드
	public int insertMember(MemberBean member) throws Exception{// MemberBean member(매개변수)객체
		int re = -1;
		Connection conn = null;//데이터 베이스 접속
		PreparedStatement pstmt = null;// DB에 SQL 전달
		String sql = "INSERT INTO MEMBERT VALUES (?,?,?,?,sysdate,?)";
		
		
		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
			
			pstmt.setString(1, member.getMem_uid()); 
			//값을 넣기 위해(세팅하기 위해서)사용
	        pstmt.setString(2, member.getMem_pwd());
	        pstmt.setString(3, member.getMem_name());
	        pstmt.setString(4, member.getMem_email());
//	        pstmt.setTimestamp(5, member.getMem_regdate());
	        pstmt.setString(5, member.getMem_addr());
	        pstmt.executeUpdate();//쿼리 실행
	        //여기서 sql문은 insert문이기 때문에 executeUpdate();를 사용해야함
	        
	        re=1;//쿼리가 정상적으로 실행되었을때, re =1 이 됨.
	       
		} catch(SQLException ex) {
	         System.out.println("추가 실패");
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		  if(pstmt != null)  pstmt.close();
	    		  if(conn != null)  conn.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		return re;
	}

	
	
	//4. 회원 가입시 아이디 중복 확인 할때 사용하는 메소드 
	public int confirmID(String id) throws Exception{//String id를 받아서 사용
			int re = -1;//결과값 분기처리하기 위해서 변수 선언 
			Connection conn = null;//데이터 베이스 접속//dbcp 연결위한 참조변수 선언
			PreparedStatement pstmt = null;// DB에 SQL 전달//SQL문 사용하기 위한 참조변수 선언
			ResultSet rs = null;//조회시 결과값받음 //쿼리결과값 받기 위해서 참조변수 선언
			String sql ="SELECT * FROM MEMBERT WHERE mem_uid = ?";//쿼리를 변수로 사용
			
			try {//DB 처리를 위해서 예외발생을 위한 try~catch문 사용
				conn = getConnection();//dbcp 연결해서 conn 참조변수로 받음
				pstmt = conn.prepareStatement(sql);
				//conn 객체에서 prepareStatment 메소드의 매개변수로 쿼리문 사용
				pstmt.setString(1,id); //쿼리 파라미터를 index로 받아서 처리
				rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음
				//select 조회문은 executeQuery 메소드 처리
				
				//결과를 확인하기 위해서 while(여러개의 결과값) 또는 if문 사용
				if (rs.next()) {
					re = 1; //id 조회했을 때 중복인 경우
				}else {
					re = -1; //id 조회했을 때 중복이 아닌 경우
				}
			} catch(SQLException ex) {//쿼리 조회했다가 오류 발생시 
		         System.out.println("조회 실패");
		         ex.printStackTrace();
		      } finally {
		    	  try{//자원반납(순서 중요)
		    		  if(rs != null) rs.close();
		    		  if(pstmt != null)  pstmt.close();
		    		  if(conn != null)  conn.close();
		    	  }catch(Exception e){
		    		  e.printStackTrace();
		    	  }
		      }
			return re;
	}

	
	//5. 사용자 인증시 사용하는 메소드
	 public int userCheck(String id, String pwd) throws Exception{
		int re = -1;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String db_mem_pwd;
		String sql="SELECT MEM_PWD FROM MEMBERT WHERE mem_uid = ?"; 
		
		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1,id); 
			rs = pstmt.executeQuery();
	        
			
			if (rs.next()) {//아이디가 일치하는 로우 존재
				db_mem_pwd = rs.getString("mem_pwd");
				
				if(db_mem_pwd.equals(pwd)) {//패스워드도  일치
					re = 1;					
				}else {//패스워드가 불일치
					re = 0;
				}
			}else {//해당 아이디가 존재하지 않음
				re = -1; 
			}
		} catch(SQLException ex) {
	         System.out.println("조회 실패");
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		  if(rs != null) rs.close();
	    		  if(pstmt != null)  pstmt.close();
	    		  if(conn != null)  conn.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		return re;
	  }

	private String mem_address;
	
	//6. 아이디가 일치하는 멤버의 정보를 얻어오는 메소드
	public MemberBean getMember(String id) throws Exception{
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		 String sql = "SELECT MEM_UID, MEM_PWD, MEM_NAME, MEM_EMAIL, MEM_REGDATE, MEM_ADDRESS "
                 +"FROM MEMBERT WHERE MEM_UID=?";

		//*가 아니라 다 적으면 나중에 수정할때 편함
		//재시작하지 않아도 됨.
		MemberBean member=null;
		
		try{
			conn = getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();

			//while 또는 if
			  if(rs.next()) {//아이디가 일치하는 로우 존재
				member=new MemberBean();
				//가지고 와서 값 setting
				member.setMem_uid(rs.getString("mem_uid"));
	            member.setMem_pwd(rs.getString("mem_pwd"));
	            member.setMem_name(rs.getString("mem_name"));
	            member.setMem_email(rs.getString("mem_email"));
	            member.setMem_regdate(rs.getTimestamp("mem_regdate"));
	            member.setMem_addr(rs.getString("mem_address"));
			  }
		} catch(SQLException ex) {
	         System.out.println("조회 실패");
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		 rs.close();
	    		 pstmt.close();
	    		 conn.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		return member;
	  }
	
	
	//7. 회원 정보 테이블내의 특정 행의 값을 변경한다
	public int updateMember(MemberBean member)throws Exception{
		 
		int re = -1;
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql="UPDATE MEMBERT SET MEM_PWD=?, MEM_NAME=?, MEM_EMAIL=? , MEM_ADDRESS=? WHERE MEM_UID=?";
		
		try{ 
		  conn=getConnection();
		  pstmt=conn.prepareStatement(sql);
//		    하나하나 확인 해봐야함
//		  System.out.println("@@@### member.getMem_pwd() ===>"+member.getMem_pwd());
//		  System.out.println("@@@### member.getMem_name() ===>"+member.getMem_name());
//		  System.out.println("@@@### member.getMem_email() ===>"+member.getMem_email());
//		  System.out.println("@@@### member.getMem_addr() ===>"+member.getMem_addr());
//		  System.out.println("@@@### member.getMem_uid() ===>"+member.getMem_uid());
		  
		  
		  pstmt.setString(1, member.getMem_pwd());
		  pstmt.setString(2, member.getMem_name());
		  pstmt.setString(3, member.getMem_email());
		  pstmt.setString(4, member.getMem_addr());
		  pstmt.setString(5, member.getMem_uid());
		 
		  re = pstmt.executeUpdate();//쿼리 실행
		  System.out.println("@@@### re ===>"+re);
		  
		  System.out.println("변경 성공");
		}catch (Exception ex) {
			System.out.println("변경 실패");
			ex.printStackTrace();
		} finally {
	    	  try{//자원반납(순서 중요)
	    		 pstmt.close();
	    		 conn.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		return re;
	  }
}

memberUpdateOk.jsp

<%@page import="magic.member.MemberBean"%>
<%@page import="magic.member.MemberDBBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<jsp:useBean id="mb" class="magic.member.MemberBean"></jsp:useBean>
<jsp:setProperty property="*" name="mb"/> 
  
  
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
	 String uid = (String)session.getAttribute("uid");	
	 mb.setMem_uid(uid);// id값을 따로 받아와야함.
	 //memberUpdate.jsp에서 id부분은 표현식으로 결과만 나오게 되어있음
	 //그러면 실제로 updateMember메소드 실행할 때 uid 값은 받아오지 않아서 null값이 뜬다.
	 //그래서 String uid = (String)session.getAttribute("uid");으로 받아온 후에
	 //자바빈 set으로 id값를 받아온다.
	
	 MemberDBBean manager=MemberDBBean.getInstance();
	 int re = manager.updateMember(mb);
	 //updateMember 메소드 보면 member객체를 가지고 mb가 나옴
	 //여기서 re값을 받는다.//억지로 re =1할 필요 없음
	 
	 
	 if(re==1){
%>	 
		<script>	
			alert("입력하신대로 회원 정보가 수정되었습니다.");
			document.location.href="main.jsp";
		</script>
<%
		}else{ 
%>
		<script>	
		    alert("수정이 실패되었습니다.");
		    history.go(-1);
		</script>
<%
		} 
%>
</body>
</html>

memberUpdate.jsp 수정 필요

action="memberUpdateOk.jsp```sql
<%@page import="magic.member.MemberDBBean"%>
<%@page import="magic.member.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>

Insert title here <% /* if(session.getAttribute("Member")== null){ response.sendRedirect("login.jsp"); }//loginOk에서 session.setAttribute("Mebmer", "yes");가 아닌경우 login.jsp로 보낸다.(튕기게함) */ String uid = (String)session.getAttribute("uid"); //String name = (String)session.getAttribute("name"); MemberDBBean manager= MemberDBBean.getInstance(); //겟인스턴스로 메소드 호출해서 결과 받음 MemberBean mb = manager.getMember(uid); //겟인스턴스로 메소드 호출해서 리턴된 멤버 결과 받을때 mb.getMem_~~식으로 받음 %>

회원 정보 수정

'*'표시 항목은 필수 입력 항목입니다.
User ID <%= uid %>
암호 *
암호 확인 *
이 름 *
E-mail *
주 소
```
<%@page import="magic.member.MemberDBBean"%>
<%@page import="magic.member.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<script language="JavaScript" src="script.js" charset="utf-8"></script>
<body>
<%
	/* if(session.getAttribute("Member")== null){
		response.sendRedirect("login.jsp");
	}//loginOk에서 session.setAttribute("Mebmer", "yes");가 아닌경우 login.jsp로 보낸다.(튕기게함) */
	
	String uid = (String)session.getAttribute("uid");
	//String name = (String)session.getAttribute("name");
	
	 MemberDBBean manager= MemberDBBean.getInstance(); //겟인스턴스로 메소드 호출해서 결과 받음
	 MemberBean mb = manager.getMember(uid);
	 //겟인스턴스로 메소드 호출해서 리턴된 멤버 결과 받을때 mb.getMem_~~식으로 받음
	
%>

<table  border="1" align ="center">
		<form name="upd_frm" method="post" action="memberUpdateOk.jsp">
			<tr height="50">
         		<td colspan = "2">
         			<h1>회원 정보 수정</h1>
         			'*'표시 항목은 필수 입력 항목입니다.
         		</td>
     		</tr>
     		<tr height="30">
         		<td width="80">User ID</td >
     			<td><%= uid %></td>
     		</tr>
     		<tr height="30">
         		<td width="80">암호</td>
     			<td><input type="password" size ="20" name="mem_pwd">*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">암호 확인</td>
     			<td><input type="password" size ="20" name="pwd_check">*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">이     름</td>
     			<td><input type="text" size ="20" name="mem_name" value="<%= mb.getMem_name() %>">*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">E-mail</td>
     			<td><input type="text" size ="30" name="mem_email" value="<%= mb.getMem_email() %>" >*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">주     소</td>
     			<td><input type="text" size ="40"name="mem_addr"  value="<%= mb.getMem_addr() %>"></td>
     		</tr>
     		<tr>
     			<td colspan = "2" align="center">
         		 	<input type="submit" value="수정" onclick="update_check_ok()">
         			<input type="reset" value="다시입력">
         			<input type="button" value="수정안함" onclick="javascript:window.location='login.jsp'">
         		</td>
     		</tr>
		</form>
	</table>
</body>
</html>

게시판

  • CRTL+SHIFT+O
    : 안쓰는 import 삭제
💡 write.jsp post 방식으로 write_ok.jsp 호출// magic.board 패키지에 BoardBean.java 작성자, 이메일주소, 글 제목, 글 내용 프로퍼티 및 getter, setter// magic.board 패키지에 BoardDBBean.java 값을 저장하는 insertBoard 메소드 생성 write_ok.jsp write.jsp 에서 넘어온 값을 BoardBean 자바빈에 값을 저장 BoardBean 자바빈의 값을 가지고 BoardDBBean 자바빈의 insertBoard 메소드 호출

1단계

wirte.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<center>
		<h1>글올리기</h1>
		<form name="form" method="post" action="write_ok.jsp">
			<table align ="center">
				<tr height ="30">
					<td width="80">작성자 </td>
					<td width="140">
						<input type="text" name="b_name" size="10" maxlength="20">
					</td>
					<td  ="80">이메일</td>
					<td width="240">
						<input type="text" name="b_email"size="24" maxlength="50">
					</td>
				</tr>
				<tr height ="30">
					<td width ="80">글제목 </td>
					<td colspan="3" width="460">
						<input type="text"name="b_title" size="55" maxlength="80">
					</td>
				</tr>
				<tr>
					<td colspan="4"  align ="center">
					<textarea cols="65" rows="10" name="b_content"></textarea>
					</td>
				</tr>
				<tr height ="50" align ="center">
					<td colspan = "4" >
						<input type="submit" value="글쓰기"> &nbsp;
		         		<input type="reset" value="다시입력">
					</td>
				</tr>
			</table>
		</form>
	</center>
</body>
</html>

처음에 name이 없으면 위의 사진처럼 데이터값을 받지 못한다.

그래서 write.jsp의 input 부분에 name="b_content" name="b_email" name="b_title" name="b_name"를 추가하여 입력


BoardBean.java

package magic.board;

public class BoardBean {
	private String b_name;
	private String b_email;
	private String b_title;
	private String b_content;
	
	public String getB_name() {
		return b_name;
	}
	public void setB_name(String b_name) {
		this.b_name = b_name;
	}
	public String getB_email() {
		return b_email;
	}
	public void setB_email(String b_email) {
		this.b_email = b_email;
	}
	public String getB_title() {
		return b_title;
	}
	public void setB_title(String b_title) {
		this.b_title = b_title;
	}
	public String getB_content() {
		return b_content;
	}
	public void setB_content(String b_content) {
		this.b_content = b_content;
	}
	
}

BoardDBBean.java

package magic.board;

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

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDBBean {

	//1. 전역 BoardDBBean 객체 레퍼런스를 리턴하는 메소드
	private static BoardDBBean instance = new BoardDBBean();
	public static BoardDBBean getInstance(){
		return instance;
	//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
	//jsp에서 메소드 호출하면 편하기 때문
	}
	
	//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
	public  Connection getConnection( ) throws Exception{
		Context ctx =  new InitialContext();
		DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
		//경로 찾기
		return ds.getConnection();
		//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
		//jsp에서 메소드 호출하면 편하기 때문
	}
	
	
	//3. 전달인자로 받은 BoardBean board를 BOARDT 테이블에 삽입하는 메소드
	public int insertBoard(BoardBean board) throws Exception{
		int re = -1;
		Connection conn = null;//데이터 베이스 접속
		PreparedStatement pstmt = null;// DB에 SQL 전달
		String sql = "INSERT INTO BOARDT VALUES (?,?,?,?)";
		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(sql);
			System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
			System.out.println("@@@@#### board.getB_name()=====>"+board.getB_email());
			System.out.println("@@@@#### board.getB_name()=====>"+board.getB_title());
			System.out.println("@@@@#### board.getB_name()=====>"+board.getB_content());
			
			
			pstmt.setString(1, board.getB_name());
			pstmt.setString(2, board.getB_email());
			pstmt.setString(3, board.getB_title());
			pstmt.setString(4, board.getB_content());
			pstmt.executeUpdate();
			re =1;
	       
		} catch(SQLException ex) {
	         System.out.println("추가 실패");
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		  if(pstmt != null)  pstmt.close();
	    		  if(conn != null)  conn.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		
		return re;
		
	}
}

wirte_ok.jsp

<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<jsp:useBean id="board" class="magic.board.BoardBean"/>
<jsp:setProperty property="*" name="board"/>    

<%
    	BoardDBBean db = BoardDBBean.getInstance();
        		//instance를 db객체로 받음.
        db.insertBoard(board);
    %>

2단계

  • 자바스크립트, 글번호 추가
    💡 board.js check_ok() 함수 작성자, 글 제목, 글 내용 validation(필수) Document.form.submit();

Write.jsp
글쓰기 버튼의 type 을 button 으로 변경하고 onclick 속성에 check_ok() 함수 호출
head 태그 안에 자바스크립트 board.js 추가

BoardBean.java
글 번호 프로퍼티 및 getter, setter 추가

BoardDBBean.java
글번호가 가장 큰 값을 조회해서 1증가 한 값을 insert 구분에 추가

board.js

function check_ok(){
	
	if(reg_frm.b_name.value.length==0){
		alert("이름을 써주세요.");
		reg_frm.b_name.focus();
		return;//아이디가 없으면 리턴
	}

	if(reg_frm.b_title.value.length==0){
		alert("제목을 써주세요.");
		reg_frm.b_title.focus();
		return;//아이디가 없으면 리턴
	}
	if(reg_frm.b_content.value.length==0){
		alert("내용을 써주세요.");
		reg_frm.b_content.focus();
		return;//아이디가 없으면 리턴
	}
	
	
	document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="write_ok.jsp"으로 가겠다.(전송/submit)
}

Write.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<script language="JavaScript" src="board.js" charset="utf-8"></script>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<center>
		<h1>글올리기</h1>
		<form name="reg_frm" method="post" action="write_ok.jsp">
			<table align ="center">
				<tr height ="30">
					<td width="80">작성자 </td>
					<td width="140">
						<input type="text" name="b_name" size="10" maxlength="20">
					</td>
					<td  ="80">이메일</td>
					<td width="240">
						<input type="text" name="b_email"size="24" maxlength="50">
					</td>
				</tr>
				<tr height ="30">
					<td width ="80">글제목 </td>
					<td colspan="3" width="460">
						<input type="text"name="b_title" size="55" maxlength="80">
					</td>
				</tr>
				<tr>
					<td colspan="4"  align ="center">
					<textarea cols="65" rows="10" name="b_content"></textarea>
					</td>
				</tr>
				<tr height ="50" align ="center">
					<td colspan = "4" >
						<input type="button" value="글쓰기"  onclick="check_ok()"> &nbsp;
		         		<input type="reset" value="다시입력">
					</td>
				</tr>
			</table>
		</form>
	</center>
</body>
</html>

BoardBean.java

package magic.board;

public class BoardBean {
	private int b_id;
	private String b_name;
	private String b_email;
	private String b_title;
	private String b_content;
	
	
	public int getB_id() {
		return b_id;
	}
	public void setB_id(int b_id) {
		this.b_id = b_id;
	}
	public String getB_name() {
		return b_name;
	}
	public void setB_name(String b_name) {
		this.b_name = b_name;
	}
	public String getB_email() {
		return b_email;
	}
	public void setB_email(String b_email) {
		this.b_email = b_email;
	}
	public String getB_title() {
		return b_title;
	}
	public void setB_title(String b_title) {
		this.b_title = b_title;
	}
	public String getB_content() {
		return b_content;
	}
	public void setB_content(String b_content) {
		this.b_content = b_content;
	}
	
}

BoardDBBean.java

package magic.board;

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

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDBBean {

	//1. 전역 BoardDBBean 객체 레퍼런스를 리턴하는 메소드
	private static BoardDBBean instance = new BoardDBBean();
	public static BoardDBBean getInstance(){
		return instance;
	//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
	//jsp에서 메소드 호출하면 편하기 때문
	}
	
	//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
	public  Connection getConnection( ) throws Exception{
		Context ctx =  new InitialContext();
		DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
		//경로 찾기
		return ds.getConnection();
		//getConnection이나  getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
		//jsp에서 메소드 호출하면 편하기 때문
	}
	
	
	//3. 전달인자로 받은 BoardBean board를 BOARDT 테이블에 삽입하는 메소드
	public int insertBoard(BoardBean board) throws Exception{
		int re = -1;
		int number;
		Connection conn = null;//데이터 베이스 접속
		PreparedStatement pstmt = null;// DB에 SQL 전달
		ResultSet rs = null;
		String sql ="";
		
		try {
			conn = getConnection();
			sql = "SELECT MAX(B_ID) FROM BOARDT";//글번호 추가
			pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
			rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
			
			if(rs.next()) {//다음 쿼리 데이터가 있는 경우를 조건문으로 줌.
				number = rs.getInt(1)+1;
				//글번호가 가장 큰 값을 조회하여 1증가 한 값을 INSERT쿼리에 추가
			} else {
				number = 1;
			}
			
			
			
			sql = "INSERT INTO BOARDT VALUES (?,?,?,?,?)";
			pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
			
//			데이터가 제대로 들어갔는지 확인 해야함
			System.out.println("@@@@#### number=====>"+number);
			System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
			System.out.println("@@@@#### board.getB_email()=====>"+board.getB_email());
			System.out.println("@@@@#### board.getB_title()=====>"+board.getB_title());
			System.out.println("@@@@#### board.getB_content()=====>"+board.getB_content());
			
			pstmt.setInt(1, number);//인덱스 번호 변경 및 글번호 (number) 추가
			pstmt.setString(2, board.getB_name());
			pstmt.setString(3, board.getB_email());
			pstmt.setString(4, board.getB_title());
			pstmt.setString(5, board.getB_content());
			
			pstmt.executeUpdate();
			re =1;
			
			
	       
		} catch(SQLException ex) {
	         System.out.println("추가 실패");
	         ex.printStackTrace();
	      } finally {
	    	  try{//자원반납(순서 중요)
	    		  if(pstmt != null)  pstmt.close();
	    		  if(conn != null)  conn.close();
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	      }
		
		return re;
		
	}
}

0개의 댓글