230428 마흔 여섯 번째 수업_Servlet,Bean,JDBC

mary·2023년 4월 28일
0

국비 수업

목록 보기
46/72

post 방식의 servlet 연결

--jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Post Method Servlet방식</h1>
	<form method="post" action="PostServlet">
		id: <input name="id"><p/>
		pw: <input type="password" name="pwd"><p/>
		email: <input name="email"><p/>
		<input type="submit" value="회원가입">
	</form>
</body>
</html>
--servlet파일
package servlet1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/PostServlet")
public class PostServlet4 extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String id = request.getParameter("id");
		String pw = request.getParameter("pwd");
		String email = request.getParameter("email");
		
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter(); //ctrl + shift + o 임포트 단축키
		out.print("<html>");
		out.print("<body>");
		out.print("<h1>Post Method Servlet</h1>");
		out.print("<h3>id: " + id + "</h3>");
		out.print("<h3>pw: " + pw + "</h3>");
		out.print("<h3>email: " + email + "</h3>");
		out.print("</body>");
		out.print("</html>");
	}
}


로그인 기능 구현

--첫번째 jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>login과 logout하기</h1>
	<%
		String id = (String)session.getAttribute("idKey");
		if(id != null) { //로그인한 사람
			out.print(id + "님 반갑습니다");
	%>
		<p/>
		<a href="05.2.logout.jsp">로그아웃</a>
	<% 
		} else {
	%>
		<form method="post" action="loginServlet"> <!-- post방식으로 해야 정보 보안됨-->
			id: <input name="id"><p/>
			pw: <input type="password" name="pwd"><p/>
			<input type="submit" value="로그인">
			<input type="reset">
		</form>
	<%
		}
	%>
</body>
</html>
--servlet파일(두번째)
package servlet1;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/loginServlet")
public class LoginServlet5 extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String id = request.getParameter("id");
		String pw = request.getParameter("pwd");
		
		if(id != null && pw != null) {
			HttpSession session = request.getSession();
			session.setAttribute("idKey", id); //로그인을 했으면 세션에 들어있고 안 했으면 없음
		}
		
		response.sendRedirect("05.1.login.jsp");
	}
}
--세번째 jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	/* String id = (String)session.getAttribute("idKey");
	out.print("<h3>" + id + "님 로그아웃 되었습니다 </h3>"); 
	sendRedirect를 밑에서 해줬기 때문에 창이 넘어가서어차피 안 보이는 구문
	*/
	
	session.invalidate(); //세션 끊기 => id가 null값이 됨
	response.sendRedirect("05.1.login.jsp");
%>
</body>
</html>



JavaBeans

효율성과 재사용을 위해 사용함

데이터베이스에 있는 컬럼명을 private으로 선언


private이라서 get, set(public들임)으로 접근

이렇게 private 변수와 get,set 메소드가 구성되어 있는게 JavaBeans라고 함.


값을 생성하는 구문만 쓰면 값이 100개여도 다 들어감
얻어오는 구문도 쓰기만 하면 모든 값이 다 얻어와짐

중간에 넣어 정보가 모두 저장될 수 있게 함
bean을 사용하지 않으면 request로 사용자 정보를 일일이 써야함

--클래스 파일
package ch05Bean;

public class BeanTest1 {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
--jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="test" class="ch05Bean.BeanTest1"/> 
<!-- class 풀네임(패키지명.클래스명)으로 써야함 -->
<jsp:setProperty name="test" property="name" value="자바빈사용:홍길동"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
당신의 이름: <jsp:getProperty name="test" property="name"/>
</body>
</html>


회원가입 구현

--jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="script.js"></script>
</head>
<body>
	<table border="1">
		<form method="post" name="regFrm" action="02.2.MemProc.jsp">
			<tr>
				<th colspan="3">회원가입</th>	
			</tr>
			<tr>
				<td>아이디</td>
				<td><input name="id"></td> 
				<td>아이디를 적어주세요(8자이내)</td>
			</tr>
			<tr>
				<td>비밀번호</td>
				<td><input type="password" name="pw"></td> 
				<td>비밀번호를 적어주세요(영문,숫자,특수기호를 포함하여 20자이내)</td>
			</tr>
			<tr>
				<td>비밀번호확인</td>
				<td><input type="password" name="rePw"></td> 
				<td>위에 작성한 비밀번호와 동일한 비밀번호를 작성하세요</td>
			</tr>
			<tr>
				<td>이름</td>
				<td><input name="name"></td> 
				<td>이름을 적어주세요</td>
			</tr>
			<tr>
				<td>생년월일</td>
				<td><input name="birthday"></td> 
				<td>생년월일을 적어주세요(ex. 2002/04/28)</td>
			</tr>
			<tr>
				<td>이메일</td>
				<td><input type="email" name="email"></td> 
				<td>이메일를 적어주세요</td>
			</tr>
			<tr>
				<td colspan="3" align="center">
				<input type="button" value="회원가입" onclick="inputCheck()"> 
				<input type="reset" value="다시쓰기"> 
				</td>
			</tr>
		</form>
	</table>
</body>
</html>
--javascript파일
function inputCheck() {
    if(regFrm.id.value == "") {
        alert("아이디를 넣어주세요");
        regFrm.id.focus();
        return;
    }
    if(regFrm.pw.value == "") {
        alert("비밀번호를 넣어주세요");
        regFrm.pw.focus();
        return;
    }
    if(regFrm.rePw.value == "") {
        alert("비밀번호 확인을 넣어주세요");
        regFrm.rePw.focus();
        return;
    }
    if(regFrm.pw.value != regFrm.rePw.value) {
        alert("비밀번호가 일치하지 않습니다");
        regFrm.rePw.focus();
        return;
    }

    if(regFrm.name.value == "") {
        alert("이름을 넣어주세요");
        regFrm.name.focus();
        return;
    }
    regFrm.submit();
}
--javaBean파일
package ch05Bean;

public class MemberBean {
	private String id;
	private String pw;
	private String name;
	private String birthday;
	private String email;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBirthday() {
		return birthday;
	}
	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}
--Bean을 이용하는 jsp파일
<jsp:setProperty name="regBean" property="*"/> 
<!-- property="*": 변수에 들어있는 모든 값 가져오기-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table border="1" align="center">
		<tr>
			<th colspan="2">
				<jsp:getProperty property="name" name="regBean"/>회원님이 작성한 내용입니다. 
			</th>
		</tr>
		<tr>
			<td>아이디</td>
			<td><jsp:getProperty property="id" name="regBean"/></td>
		</tr>
		<tr>
			<td>비밀번호</td>
			<td><jsp:getProperty property="pw" name="regBean"/></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><jsp:getProperty property="name" name="regBean"/></td>
		</tr>
		<tr>
			<td>생년월일</td>
			<td><jsp:getProperty property="birthday" name="regBean"/></td>
		</tr>
		<tr>
			<td>이메일</td>
			<td><jsp:getProperty property="email" name="regBean"/></td>
		</tr>
		<tr>
			<td colspan="2">
				<input type="button" value="확인완료">&emsp;
				<input type="button" value="다시쓰기" onclick="history.back();">
			</td>
		</tr>
	</table>
</body>
</html>

다시쓰기 눌렀을 때



JDBC

데이터베이스(오라클, MYSQL 등) 종류에 따라 연동하기 쉽도록 하는 API

직접연동이 안 되고 JDBC를 거쳐서 연결

  1. Class.forName 함수에 드라이버 이름 넣어주기
  2. 데이터베이스와 연결을 하기 위한 생성
  3. SQL문을 컴파일 할 수 있도록
    5~7. 버전이 높아지면서 close하지 않아도 되게 바뀜

이 방법은 추천하지 않고 별도로 jsp와 servlet으로 하는게 좋음


--자바(jsp없어서 서버아님)에서 실행시킬 자바 파일
package oracle06;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class OracleDBTest1 {

	public static void main(String[] args) {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			// Class.forName("com.mysql.jdbc.Driver"); => MySQL DB 사용시
			// Class.forName("org.mariadb.jdbc.Driver"); => mariadb DB 사용시
			Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "kh","1234"); 
			System.out.println("Success");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}  catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

오라클의 세부정보 넣어줌


프로그램하기

package oracle06;

import java.sql.*; 

public class OracleDBTest2 {

	public static void main(String[] args) {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","kh","1234");
			System.out.println("Success");
			
			Statement st = con.createStatement(); //SQL문이 컴파일 됨
			ResultSet rs = st.executeQuery("SELECT * FROM JOB");
			
			while(rs.next()) {
				//rs.getString(2) 컬럼이 적으면 이렇게 써도 됨
				//rs.getString("job_code"); 컬럼명으로 가져오기
				String jobCode = rs.getString(1); //컬럼 첫번째 거 가져오기
				String jobName = rs.getString("job_name");
				System.out.println(jobCode + " : " + jobName);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

next하면 포인터가 하나하나 내려가면서 돌게 됨
맨 마지막 next가 돌고 나서 값이 있으면 true, 없으면 false 반환
false가 되면 반복하는 것 멈춤(while 속성)


jsp에서 직접 데이터 연동하여 테이블의 형태로 사용자에게 보여주기

--jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %> <!-- 지시자 반드시 써야 연결할 수 있음 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	int count = 0;
	try {
		Class.forName("oracle.jdbc.OracleDriver");
		Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","kh","1234");
		Statement st = con.createStatement();
		ResultSet rs = st.executeQuery("SELECT * FROM DEPARTMENT");
%>
	<table border="1">
		<tr>
			<th>부서코드</th>
			<th>부서명</th>
			<th>부서위치</th>
		</tr>
<%
	if(rs != null) {
		while(rs.next()) {
%>
		<tr>
			<td><%=rs.getString(1) %></td>
			<td><%=rs.getString(2) %></td>
			<td><%=rs.getString(3) %></td>
		</tr>
<%
		count++;
		}
	}
%>
	</table>
	total records : <%=count %>
<%
	} catch(Exception e) {
		System.out.println("예외발생: " +  e);
	}
%>
</body>
</html>


Bean을 이용하여 DB 검색하여 출력

--javaBean 파일
package oracle06;

public class RegisterBean5 {
	private String emp_id;
	private String emp_name;
	private String email;
	private String phone;
	private String dept_code;
	private int salary;
	
	public String getEmp_id() {
		return emp_id;
	}
	public void setEmp_id(String emp_id) {
		this.emp_id = emp_id;
	}
	public String getEmp_name() {
		return emp_name;
	}
	public void setEmp_name(String emp_name) {
		this.emp_name = emp_name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getDept_code() {
		return dept_code;
	}
	public void setDept_code(String dept_code) {
		this.dept_code = dept_code;
	}
	public int getSalary() {
		return salary;
	}
	public void setSalary(int salary) {
		this.salary = salary;
	}
}
--JDBC 파일
package oracle06;

import java.sql.*;
import java.util.ArrayList;

public class RegisterMgr5 {
	private final String JDBC_DRIVER = "oracle.jdbc.OracleDriver";
	private final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:xe";
	private final String USER = "kh";
	private final String PASS = "1234";
	//final은 변수 고정시키는 것
	
	public RegisterMgr5() {
		try {
			Class.forName(JDBC_DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public ArrayList<RegisterBean5> getRegisterList() {
	//반환형은 Bean의 객체가 됨
		ArrayList<RegisterBean5> alist = new ArrayList<RegisterBean5>();
		Connection con;
		try {
			con = DriverManager.getConnection(JDBC_URL, USER, PASS);
			Statement st = con.createStatement();
			String strQuery = "SELECT * FROM EMPLOYEE";
			ResultSet rs = st.executeQuery(strQuery);
			while(rs.next()) {
				RegisterBean5 bean = new RegisterBean5();
				bean.setEmp_id(rs.getString("emp_id"));
				bean.setEmp_name(rs.getString("emp_name"));
				bean.setPhone(rs.getString("phone"));
				bean.setDept_code(rs.getString("dept_code"));
				bean.setEmail(rs.getString("email"));
				bean.setSalary(rs.getInt("salary"));
				alist.add(bean);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return alist;
	}
}
--jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*, oracle06.*" %>
<jsp:useBean id="regMgr" class="oracle06.RegisterMgr5"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Bean을 이용한 Oracle 연동</h1>
	<table border="1">
		<tr>
			<th>사번</th>
			<th>사원명</th>
			<th>이메일</th>
			<th>전화번호</th>
			<th>부서코드</th>
			<th>급여</th>
		</tr>
<%
	ArrayList<RegisterBean5> alist = regMgr.getRegisterList();
	for(int i=0; i<alist.size(); i++) { //ArrayList는 size임 Array는 length
		RegisterBean5 regBean = alist.get(i);
%>
		<tr>
			<td><%=regBean.getEmp_id() %></td>
			<td><%=regBean.getEmp_name() %></td>
			<td><%=regBean.getEmail() %></td>
			<td><%=regBean.getPhone() %></td>
			<td><%=regBean.getDept_code() %></td>
			<td><%=regBean.getSalary() %></td>
		</tr>
<%
	}
%>
	</table>
</body>
</html>

profile
내 인생을 망치러 온 나의 구원, 개발

0개의 댓글