2022.08.26 JSP

sofia·2022년 8월 28일
0

JAVA

목록 보기
22/27
post-thumbnail

저번 시간에 이어서

📚CONNECTION POOL로 JSP와 데이터 베이스 연동(Chapter 14 ppt)

예제- 예제 회원 정보 조회/수정

updateMember.jsp

<%@page import="java.sql.Statement"%>
<%@page import="javax.naming.NamingException"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@ 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>
	<%!
		Connection conn = null;//데이터 베이스 접속
		PreparedStatement pstmt = null;// DB에 SQL 전달
		ResultSet rs = null;//결과값
		DataSource ds = null;//DataSource 객체를 통해서 필요한 Connection을 획득, 반납 등의 작업
	%>
	
	<%
		try{
			Context ctx =  new InitialContext();
			ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");//캐스팅
			conn = ds.getConnection();
			System.out.println("DBCP 연동 성공");//DBCP 연동을 위한 설정 
			
			StringBuffer selectQuery = new StringBuffer(); //쿼리
			selectQuery.append("SELECT name, class, tel FROM MEMBER2 WHERE ID = ?");
			//? 가 있는 이유 : 아이디 값을 받기 위해(파라미터를 받기 위해)
			String id = request.getParameter("id");//viewMember에서 준 데이터 받기)
			pstmt = conn.prepareStatement(selectQuery.toString());
			pstmt.setString(1, id);//sql문을 받고 ?에 매개변수 userID 삽입  //결과는 id 하나만 가지고 온다.(뭔소리이지?)
			rs = pstmt.executeQuery();//쿼리 실행
			
			if(rs.next()){ //원래 반복문인데 이 예제는 id를 pk로 삼아 확인하면 되는거이기 때문
		%>
				<form method="post" action="updateProcess.jsp">
					아이디 : <input readonly type="text" name = "id" value="<%= id %>"><br>
					<!-- 'readonly' 오로지 읽기만 가능(수정 안됨) -->
					이름 : <input  type="text" name = "name" value="<%= rs.getString("name") %>"><br>
					<!-- rs.getString("name")을 쓰는 이유 : name의 값을 받아야하기 때문 -->
					회원등급 : <input  type="text" name = "mclass" value="<%= rs.getString("class") %>"><br>
					전화번호 : <input  type="text" name = "tel" value="<%= rs.getString("tel") %>"><br>
					<input type="submit" value="수정">
					<a href="viewMember.jsp">목록보기</a>
				</form>
		<%
				}else{ //데이터 삭제하였을때 발생 
		%>			
					<font color ="red"> 아이디 없3~~~</font>		
					<a href="viewMember.jsp">목록보기</a>
		<%
				}
				
			
			
		}catch(NamingException ne){
			ne.printStackTrace();
		}catch(SQLException ex) {
	         out.print("데이터베이스 연결이 실패했습니다.<br>");
	         out.print("SQLException : "+ex.getMessage());
	      } finally {
	    	  try{
	    		  
	    	  }catch(Exception e){
	    		  e.printStackTrace();
	    	  }
	         if(conn != null) {
	            conn.close();
	         }
	      }
	%>
</body>
</html>

viewMember.jsp(먼저 실행)

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%!
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;

	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String user = "scott";
	String password = "tiger";
	String selectQuery = "SELECT * FROM MEMBER2";
%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<table width="400" border="1">
		<tr>
			<td>아이디</td>
			<td>이름</td>
			<td>등급</td>
			<td>전화번호</td>
		</tr>
		<%
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				conn = DriverManager.getConnection(url, user, password);
				stmt = conn.createStatement();
				rs = stmt.executeQuery(selectQuery); //쿼리 결과를 rs로 받음
				
				while(rs.next()) {
		%>
		<tr>
			<%-- <td><%= rs.getString("id") %></td> --%>
			<td>
				<a href = "updateMember.jsp?id=<%= rs.getString("id") %>"><%-- 실제 이동하는 거--%>
					 <%= rs.getString("id") %><%-- 화면에 보여주는거 --%>
				</a>
			</td>
			<td>
				<%= rs.getString("name") %>
			</td>
			<%-- <td><%= rs.getInt("class") %></td> 주석 : Ctrl+Shift+/ --%>
			<td>
				<%
					int n_class = rs.getInt("class");
				
					if(n_class == 1) {
						out.print("일반회원");
					} else {
						out.print("교수님");
					}
				%>
			</td>
			<td><%= rs.getString("tel") %></td>
		</tr>
		<%
				}
			} catch(SQLException ex) {
				ex.getMessage();
			} finally {
				try {
					if(rs != null) rs.close();
					if(stmt != null) stmt.close();
					if(conn != null) conn.close();
				} catch(SQLException ex) {
					ex.getMessage();
				}
			}
		%>
	</table>
</body>
</html>

updateProcess.jsp 생성

<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.NamingException"%>
<%@page import="javax.naming.Context"%>
<%@page import="java.sql.SQLException"%>
<%@ 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>
	<%!
		Connection conn = null;//데이터 베이스 접속
		PreparedStatement pstmt = null;// DB에 SQL 전달
	%>
	
	<%
      try { 
        	conn = ((DataSource)(new InitialContext().lookup("java:comp/env/jdbc/oracle"))).getConnection();//캐스팅 필요
      } catch(NamingException ne) { //JDBC? 이름 못찾을 때
         	ne.printStackTrace();
      } catch(SQLException ex) { //데이터베이스 문제 있을 때
         	ex.getMessage();
      }
		
	  String id = "", name="", vclass="", tel="";
	  id = request.getParameter("id");
	  name = request.getParameter("name");
	  vclass = request.getParameter("mclass");
	  tel = request.getParameter("tel");
	  
	  StringBuffer updateQuery = new StringBuffer(); //쿼리
	  updateQuery.append("UPDATE MEMBER2 SET NAME = ?, CLASS = ?, TEL = ? WHERE ID =?");
	  //?에 전달된 값을 받는다.(name,id,vclass등...)
	  
      try{//update에 관련된거
         pstmt = conn.prepareStatement(updateQuery.toString());
         pstmt.setString(1, name);  //값을 넣기 위해(세팅하기 위해서)사용//id는 수정불가능하니깐!!!+걍 쿼리에서 ?된거만 넣음
         pstmt.setInt(2, Integer.parseInt(vclass));//캐스팅 형변환(vclass는 숫자임)
         pstmt.setString(3, tel);
         pstmt.setString(4, id);
         int re = pstmt.executeUpdate();//데이터베이스에서 데이터를 추가, 삭제, 수정하는 SQL 문을 실행
         
         if(re ==1){
     %>
        	 <%= id %>의 정보가 수정되었습니다.
        	 [<a href="viewMember.jsp">목록보기</a>]
     <%
         }else{//이미 기존의 데이터가 삭제되었을때
     %>  	 
        	 변경실패
     <%   	 
         }
      }catch(SQLException ex) { //데이터베이스 문제 있을 때
         out.print("데이터베이스 연결이 실패했습니다.<br>");
         out.print("SQLException : "+ex.getMessage());
      } finally { //Connection 관련 close
         try {
            if(conn != null) {
               conn.close();
            }
         } catch(Exception e) {
            e.printStackTrace();
         }
      }
   %>
	
</body>
</html>

데이터 변경 쿼리를 예로 들면

UPDATE MEMBER2
    SET NAME ='임영웅'
     , CLASS = 2
     , TEL ='010-9999-8888'
WHERE ID ='bbb';

이런 쿼리를 사용한다고 할때, 실제 jsp 테이블에서는
"UPDATE MEMBER2 SET NAME = ?, CLASS = ?, TEL = ? WHERE ID =?" 으로 바꿔주어야함

📚사용자 관리(Chapter 15 ppt)

1단계

📌우리가 최종적으로 만들어야하는 프로젝트의 모습
Dynamic Wep Project 생성 후,
member 폴터에 login.jsp, register.jsp, script.jsp 생성

📍login.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>
	<table  border="1" >
		<form  method="post" action="LoginOk.jsp" >
			<tr height="30">
         		<td width="100">
         			사용자 ID 
         		</td>
         		<td  width="100">
         			<input type="text">
         		</td>
     		</tr>
     		<tr>
         		<td  width="100">
         		 	비밀번호 
         		</td>
         		<td  width="100">
         			 <input type="password">
         		</td>
     		</tr>
     		<tr>
     			<td  colspan = "2" align="center">
         			<input type="submit" value="로그인">
         			 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
         			<input type="button" value="회원가입" onclick="javascirpt:window.location='register.jsp'">
         		</td>
     		</tr>
		</form>
	</table>
</body>
</html>

📍register.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<script language="JavaScript" src="script.js" charset="utf-8"></script>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<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><input type="text" size ="20" name="mem_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= "name">*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">E-mail</td>
     			<td><input type="text" size ="30"name="email">*</td>
     		</tr>
     		<tr height="30">
         		<td width="80">주     소</td>
     			<td><input type="text" size ="40"name="address"></td>
     		</tr>
     		<tr>
     			<td colspan = "2" align="center">
         		 	<input type="button" value="등록" onclick="check_ok()">
         			<input type="reset" value="다시입력">
         			<input type="button" value="가입안함" onclick="javascript:window.location='login.jsp'">
         		</td>
     		</tr>
		</form>
	</table>
</body>
</html>

📍script.jsp

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;//패스워드가 일치하지 않으면 리턴
	}
	document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="registerOk.jsp"으로 가겠다.(전송/submit)
}

0개의 댓글