ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP와 데이터베이스 연동1
    jsp(Model1) 2020. 5. 16. 13:48

    회원가입 폼페이지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>
    	<h2>회원 가입</h2>
    	<form action = "MemberJoinProc.jsp" method = "post">
    	<table width = "500" border = "1">
    		<tr height="50">
    			<td width="150" align="center">아이디</td>
    			<td width="350" align="center">
    				<input type="text" name="id" size="40" placeholder="아이디를 입력해주세요">
    			</td>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">패스워드</td>
    			<td width="350" align="center">
    				<input type="password" name="pass1" size="40">
    			</td>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">패스워드확인</td>
    			<td width="350" align="center">
    				<input type="password" name="pass2" size="40">
    			</td>
    		</tr>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">이메일</td>
    			<td width="350" align="center">
    				<input type="email" name="email" size="40">
    			</td>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">전화번호</td>
    			<td width="350" align="center">
    				<input type="tel" name="tel" size="40">
    			</td>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">당신의 관심분야</td>
    			<td width="350" align="center">
    				<input type="checkbox" name="hobby" value="캠핑">캠핑 &nbsp;
    				<input type="checkbox" name="hobby" value="등산">등산 &nbsp;
    				<input type="checkbox" name="hobby" value="영화">영화 &nbsp;
    				<input type="checkbox" name="hobby" value="독서">독서 &nbsp;
    			</td>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">당신의 직업은</td>
    			<td width="350" align="center">
    				<select name="job">
    					<option value="교사">교사</option>
    					<option value="변호사">변호사</option>
    					<option value="의사">의사</option>
    					<option value="기술사">기술사</option>
    				</select>
    			</td>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">하고 싶은 말</td>
    			<td width="350" align="center">
    				<textarea rows="5" cols="40" name="info"></textarea>
    			</td>
    		</tr>
    		<tr height="50">
    			<td width="150" align="center">당신의 연령은</td>
    			<td width="350" align="center">
    				<input type="radio" name="age" value="10">10대 &nbsp;
    				<input type="radio" name="age" value="20">20대 &nbsp;
    				<input type="radio" name="age" value="30">30대 &nbsp;
    				<input type="radio" name="age" value="40">40대 &nbsp;
    			</td>
    		</tr>
    		<tr height="50">
    			<td colspan="2" align="center">
    				<input type="submit" value="회원가입">
    				<input type="reset" value="취소">
    			</td>
    		</tr>
    	
    	</table>
    	
    	</form>
    	
    	
    	</center>
    
    
    </body>
    </html>

    회원가입 처리페이지jsp

    <%@page import="java.sql.PreparedStatement"%>
    <%@page import="java.sql.DriverManager"%>
    <%@page import="java.sql.Connection"%>
    <%@page import="model.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>
    <body>
    
    <%
    	request.setCharacterEncoding("euc-kr");//한글처리
    	
    	//취미 부분은 별도로 읽어드려 다시 빈 클래스에 저장(여러개이기 때문에 배열로 받아서 저장해 줘야 한다.) 
    	String [] hobby = request.getParameterValues("hobby");
    	//배열에 있는 내용을 하나의 스트링으로 저장
    	String texthobby = new String();
    	
    	for(int i = 0; i<hobby.length; i++){
    		texthobby += hobby[i] + " ";
    	}
    %>
    
    <!-- useBean을 이용하여 한꺼번에 데이터를 받아옴 -->
    <jsp:useBean id="mbean" class="model.MemberBean">
    	<jsp:setProperty name="mbean" property="*" />
    </jsp:useBean>
    
    <%
    	mbean.setHobby(texthobby);	//기존 취미는 주소 번지가 저장이 되기 때문에(배열이기 때문에) 위의 배열의 내용을 하나의 스트링으로 저장한 변수를 다시 입력
    
    	//오라클에 접속하는 소스를 작성
    	String id = "wogus";//접속 아이디
    	String pass = "Akdhfl1593";//접속 패스워드
    	String url = "jdbc:oracle:thin:@localhost:1521:XE";//접속 url
    	
    	try{
    		//1.해당 데이터 베이스를 사용한다고 선언(클래스를 등록 = 오라클용을 사용)
    		Class.forName("oracle.jdbc.driver.OracleDriver");
    		//2.해당 데이터 베이스에 접속
    		Connection con = DriverManager.getConnection(url,id,pass);
    		//3.접속 후 쿼리준비하여 
    		String sql = "insert into member values(?,?,?,?,?,?,?,?)";
    		//4.쿼리를 사용하도록 설정
    		PreparedStatement pstmt = con.prepareStatement(sql);//jsp에서 쿼리를 사용하도록 설정
    		//5.?에 맞게 데이터 맵핑
    		pstmt.setString(1, mbean.getId());
    		pstmt.setString(2, mbean.getPass1());
    		pstmt.setString(3, mbean.getEmail());
    		pstmt.setString(4, mbean.getTel());
    		pstmt.setString(5, mbean.getHobby());
    		pstmt.setString(6, mbean.getJob());
    		pstmt.setString(7, mbean.getAge());
    		pstmt.setString(8, mbean.getInfo());
    		//6.오라클에서 쿼리를 실행
    		pstmt.executeUpdate();//insert, update, delete 에서 사용하는 메서드
    		//7.자원 반납(커넥션이 연결되어 있으니깐 끊어줘야한다.)
    		con.close();
    		
    		
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	
    %>
    
    <!-- 체크박스로 여러개가 선택된 hobby는 배열을 통해서 받아와 그 배열을 다시 풀어서 하나의 스트링으로 만들어 줘야 한다.
    그냥 바로 값을 집어넣게 되면 처음 선택한 하나의 값만 들어가게 된다. -->
    
    <h2>당신의 아이디 = <%=mbean.getId() %></h2>
    당신의 취미는 = <%=mbean.getHobby() %>
    Email : <%=mbean.getEmail() %>
    
    오라클에 완료
    </body>
    </html>

    Bean

    package model;
    
    public class MemberBean {
    	
    	private String id;
    	private String pass1;
    	private String pass2;
    	private String email;
    	private String tel;
    	private String hobby;
    	private String job;
    	private String age;
    	private String info;
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getPass1() {
    		return pass1;
    	}
    	public void setPass1(String pass1) {
    		this.pass1 = pass1;
    	}
    	public String getPass2() {
    		return pass2;
    	}
    	public void setPass2(String pass2) {
    		this.pass2 = pass2;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String eamil) {
    		this.email = eamil;
    	}
    	public String getTel() {
    		return tel;
    	}
    	public void setTel(String tel) {
    		this.tel = tel;
    	}
    	public String getHobby() {
    		return hobby;
    	}
    	public void setHobby(String hobby) {
    		this.hobby = hobby;
    	}
    	public String getJob() {
    		return job;
    	}
    	public void setJob(String job) {
    		this.job = job;
    	}
    	public String getAge() {
    		return age;
    	}
    	public void setAge(String age) {
    		this.age = age;
    	}
    	public String getInfo() {
    		return info;
    	}
    	public void setInfo(String info) {
    		this.info = info;
    	}
    	
    	
    	
    
    }
    

     

    회원가입 처리페이지가 중요하다.

     

    특히 오라클에 접속하는 부분.

    String url = "jdbc:oracle:thin:@localhost:1521:XE";//접속 url 먼저 이부분부터.

    url이 웹에서만 쓰이는 줄 알았는데 위키 설명을 찾아보니

     

    URL(Uniform Resource Locator 또는 web address, 문화어: 파일식별자, 유일자원지시기)은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다. 흔히 웹 사이트 주소로 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다. 그 주소에 접속하려면 해당 URL에 맞는 프로토콜을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다.

     

    라고 나와있다. 따라서 저 url로 접속하면 오라클과 jdbc를 연결시켜 줄 수 있다.

    jdbc:oracle:thin:@localhost:1521:XE 구문에 대해서는 https://developer-joe.tistory.com/82 참조

     

    Oracle database의 JDBC 사용에 필요한 url 정보에 대해

    ※ Oracle Database 11g Express Edition 중심으로 자바에서 Oracle DB를 사용할 때 JDBC 라이브러리를 사용하게 되는데 이때 JDBC를 사용하기 위해 몇가지 필요한 정보가 있다. 즉 JDBC를 통해 Oracle DB에 conn..

    developer-joe.tistory.com

    Class.forName()과 Connection con = DriverManager.getConnection(url,id,pass); 에 대해서는 

    https://stackoverflow.com/questions/4202252/how-does-class-forname-work/39768345#39768345 참조

     

    How does Class.forName() work?

    I just learned about java.sql package. It uses Class.forName() to dynamically load the driver which extends DriverManager. Then we get connection using DriverManager.getConnection() method. So how...

    stackoverflow.com

     

    String sql = "insert into member values(?,?,?,?,?,?,?,?)";
    PreparedStatement pstmt = con.prepareStatement(sql);

    부분은 http://blog.naver.com/PostView.nhn?blogId=javaking75&logNo=140162466611참조

     

    [JDBC] JDBC 기초 - PreparedStatement란.

    [JDBC] JDBC 기초 - PreparedStatement란. PreparedStatement 객체 statement를 상속받는 인터...

    blog.naver.com

    또, 공식 api문서도 읽어보면 좋다.

     

    An object that represents a precompiled SQL statement.

    A SQL statement is precompiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times.

    Note: The setter methods (setShort, setString, and so on) for setting IN parameter values must specify types that are compatible with the defined SQL type of the input parameter. For instance, if the IN parameter has SQL type INTEGER, then the method setInt should be used.

    If arbitrary parameter type conversions are required, the method setObject should be used with a target SQL type.

    In the following example of setting a parameter, con represents an active connection:

    PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, 153833.00) pstmt.setInt(2, 110592)

     

    ?는 sql문법이 아니라 PreparedStatement의 문법이다.

     

    참조 : 인프런 - JSP 웹 쇼핑몰 프로그래밍 기본 과정(JSP WEB Programming) - JSP와 데이터베이스 연동

    'jsp(Model1)' 카테고리의 다른 글

    Cookie  (0) 2020.05.17
    JSP와 데이터베이스연동2(DAO패턴 적용)  (0) 2020.05.17
    JSP 액션태그  (0) 2020.05.15
    JSP 페이지 디렉티브 - Include  (0) 2020.05.15
    JSP 페이지 스크립트 요소  (0) 2020.05.10

    댓글

Designed by Tistory.