Be a groovy man by positive thinking
JSP_03_DB연동 본문
1. jdbc드라이버를 아래경로에 추가하기
이클립스의 Dynamic Web Project를 만들면
다음과 같이 생성된다. 사용할 프로젝트에서 WEB-INF/lib/ jdbc드라이버.jar에
ojbdc6.jar를 넣어준다.
ex. 보통 oracle 설치 된 곳에 깔려있음(기본설치 경로는 C:\app에 설치되어있음
C:\app\사용자명\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar
2. tomcat설치하기
tomcat.apache.org 에서 원하는 버전을 설치하되 관리계정을 사용하기 위해서는
빨간줄이 그어진 부분을 받고 설치를 하는 것이 좋다.
오라클에서 내부적으로 8080포트를 사용하므로 다른 번호를 쓰도록 하자
그리고 다음으로 관리자 계정을 등록하고 비번을 정한다음 넥스트를 누르면 된다.
필자는 8181은 톰캣 8.0으로 8282는 7.0 버전으로 쓰고 있다.
자바가 깔려있다면 자동으로 잡아준다
설치 장소 정하기 필자는 C:\바로 밑에다가 해당 버전을 깐다.
설치 위치는 개인의 자유
3. Eclipse에서 톰캣 설정하기(javaEE로 깔려있어야한다.)
밑의 서버텝에서 no servers...이부분을 클릭한다 그러면 다음과 같은 창이 나오는데
창을 조금 늘리면 Apache 탭이 보인다
클릭하면 tomcat의 버전이 보이는데 설치한 버전을 클릭하고 Next를 누른다.
이전에 톰캣 설치한 폴더 위치를 클릭해주면 된다.
필자는 C바로 밑에 tomcat 8.0 폴더가 있다.
또한 밑줄 그어진부분 밑으로 내려가는 화살표를 눌러서 깔려져 있는 것을 선택해주면된다.
필자는 다음과 같이 설정하였다.
다음으로 넘어가면 어떤것을 서버에 올릴지 설정하는게 나오는데 일단을 Finish를 눌러 그 창을 나가도록 하자
Finish를 누르면 밑줄 그어진 것처럼 잡히게 되는데 여기서 끝이 아니다 설정을 좀 더 해야한다.
형관펜 된 부분을 톰캣을 설치할때 설정한 포트번호로 바꿔준다.
또한 Server Locations에서는 두번째를 클릭해주고
Deploy path 에서는 wtp를 지우고 webapps만을 남겨둔다.
또한 Server Options에서 두번째 것도 클릭해준다.
필자의 설정화면은 다음과 같다.
창의 탭을 닫고
화살표 버튼을 누르면 톰캣이 실행이 된다.
밑줄 그어진 부분이 stopped에서 Started~ 라고 바뀌면 톰캣이 실행된 것이다.
그다음에 지구본 모양을 누르면 인터넷이 켜지는데
http://localhost:포트번호
를 누르게 되면 다음과 같은 화면이 나오게 된다.
밑줄친 부분을 누르게 되면
다음과 같은 창이 뜨는데
톰캣을 설치할때 설정했던 관리자 계정과 비밀번호를 입력하면 된다.
그러면 관리자 계정으로 들어갈 수 있다.
4. server.xml에 Resource태그 추가하기
톰캣을 오라클과 연동하기 위해서는 Server탭을 눌러서 열면 server.xml이 있다.
기본적으로 scott계정에 연동해서 사용한다. 추후에 있을 예문이 scott과 관련이 깊다.
server.xml
==========
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxIdle="10" maxTotal="20" maxWaitMillis="-1" name="jdbc/myoracle" password="연결할 계정 비밀번호" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:서비스이름(ex. orcl,xe)" username="연결할 계정"/>
빨간색 부분을 개인이 설치한 것에 맞게 변경한후에 server.xml에서 39번째 줄에
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
와
</GlobalNamingResources> 사이에 붙여넣기를 하고 저장을 누른다.
커서가 있는 부분이 추가한 위치이다.
5. context.xml에 ResourceLink태그 추가하기
context.xml에서 마지막줄 바로위에 밑의 소스를 복사해서 붙여넣으면 된다.
<ResourceLink global="jdbc/myoracle" name="jdbc/myoracle" type="javax.sql.DataSource"/>
6. Conenection객체 얻기
dynamic web project를 만들고
만들때 버전은 3.0미만으로 한다. 그래야 web.xml이 포함되어있다.
ConnUtil.java를 해당 프로젝트에 만든다.
package kr.co.study.common.util;
import java.sql.SQLException;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class ConnUtil {
public static Connection getConnection() throws SQLException, NamingException, ClassNotFoundException {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
return conn;
}
}
7. jsp페이지작성
<%@page import="kr.co.study.common.util.ConnUtil"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Connection conn = null;
PreparedStatement allStmt = null;
ResultSet rs = null;
try {
conn = ConnUtil.getConnection();
String all = "select * from member";
allStmt = conn.prepareStatement(all);
rs = allStmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
out.println(id + "<br/>");
}
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (allStmt != null) {
allStmt.close();
allStmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
%>
</body>
</html>
8. db연동과 관련된 예제
실습하기 전에 미리 오라클의 사용할 계정에서 테이블을 만들어 놓아야한다.(scott계정 연동이 기준)
create table member(
id varchar2(20),
pw varchar2(20),
addr varchar2(20),
tel varchar2(20)
);
insert into member values('id1','pw1','addr1','tel1');
insert into member values('id2','pw2','addr2','tel2');
insert into member values('id3','pw3','addr3','tel3');
insert into member values('id4','pw4','addr4','tel4');
insert into member values('id5','pw5','addr5','tel5');
insert into member values('id6','pw6','addr6','tel6');
commit;
[출처 create table member( (서울IT교육센터직업전문학교) |작성자 체리
Ex_01 아래와 같이 요청했을때 emp테이블의 ename칼럼의 값이 출력될 수 있도록 소스코드를 작성하시오.(scott계정이랑 연결되어있어야 한다.)
http://localhost:설정한 포트번호/프로젝트명/a.jsp?empno=7369
SMITH
Sol_01
a.jsp
=====
<%
String empno=request.getParameter("empno");
Connection conn=null;
PreparedStatement allStmt=null;
ResultSet rs=null;
try{
conn=ConnUtil.getConnection();
String all="select ename from emp where empno=?";
allStmt=conn.prepareStatement(all);
allStmt.setString(1,empno);
rs=allStmt.executeQuery();
if(rs.next()){
out.println(rs.getString("ename"));
}
}finally{
if(rs!=null){ rs.close();rs=null; }
if(allStmt!=null){allStmt.close();allStmt=null; }
if(conn!=null){ conn.close();conn=null; }
}
%>
Ex_02 아래와 같이 요청했을때 member테이블의 id칼럼의 값이 모두 출력될 수 있도록 소스코드를 작성하시오.
http://localhost:설정한 포트번호/프로젝트명/a.jsp
id1
id2
id3
id4
id5
Sol_02
a.jsp
=====
<%
Connection conn=null;
PreparedStatement allStmt=null;
ResultSet rs=null;
try{
conn=ConnUtil.getConnection();
String all="select id from member";
allStmt=conn.prepareStatement(all);
rs=allStmt.executeQuery();
while(rs.next()){
out.println(rs.getString("id")+"<br/>");
}
}finally{
if(rs!=null){ rs.close();rs=null; }
if(allStmt!=null){allStmt.close();allStmt=null; }
if(conn!=null){ conn.close();conn=null; }
}
%>
Ex_03 emp테이블의 empno를 텍스트박스에 입력한뒤 "직원검색" 버튼누르면 "url"이 아래와 같이 변경되게 하려면?(scott과 연관)
http://localhost:설정한 포트번호/프로젝트명/b.jsp?empno=7369
<h1>직원의no를 입력하세요</h1>
<input type="text"><br/>
<input type="submit" value="직원검색">
Sol_03
<form action="b.jsp">
<h1>직원의no를 입력하세요</h1>
<input type="text" name="empno"><br/>
<input type="submit" value="직원검색">
</form>
Ex_04 아래와 같이 요청했을때 member테이블의 id칼럼의 값이 모두 출력될 수 있도록 소스코드를 작성하시오.
http://localhost:설정한 포트번호/프로젝트명/a.jsp
(단, 응답된 소스코드가 아래와 같아야한다. 중복 선택되어서는 안된다. id1,id2,id3은 member테이블의 id칼럼의 값이다.)
라디오버튼 + 아이디
Sol_04
<%@page import="kr.co.study.common.util.ConnUtil"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Connection conn = null;
PreparedStatement allStmt = null;
ResultSet rs = null;
try {
conn = ConnUtil.getConnection();
String all = "select id from member";
allStmt = conn.prepareStatement(all);
rs = allStmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
out.println("<input type=radio name=id value=" + id + ">");
out.println(id);
out.println("<br/>");
}
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (allStmt != null) {
allStmt.close();
allStmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
%>
</body>
</html>
Ex_05 아래와 같이 요청했을때 member테이블의 id칼럼의 값이 모두 출력될 수 있도록 소스코드를 작성하시오.
http://localhost:설정한 포트번호/프로젝트명/a.jsp
( 단, 응답된 소스코드가 아래와 같아야한다. id1,id2,id3은 member테이블의 id칼럼의 값이다.)
a태그로 된 아이디
Sol_05
<%@page import="kr.co.study.common.util.ConnUtil"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Connection conn = null;
PreparedStatement allStmt = null;
ResultSet rs = null;
try {
conn = ConnUtil.getConnection();
String all = "select id from member";
allStmt = conn.prepareStatement(all);
rs = allStmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
out.println("<a href=b.jsp?id=" + id + ">");
out.println(id);
out.println("<a/><br/>");
}
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (allStmt != null) {
allStmt.close();
allStmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
%>
</body>
</html>
Ex_06 텍스트박스에 각각id와 pw를 입력한뒤 "로그인"버튼을 누르면 아래와 같은 결과가 출력될 수 있도록 "b.jsp"를 완성하시오.
존재하지 않는 ID입니다.
비번이 잘못되었습니다.
로그인성공했습니다.
a.jsp
=====
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="b.jsp">
<input type="text" name="id"><br/>
<input type="text" name="pw"><br/>
<input type="submit" value="로그인">
</form>
</body>
</html>
Sol_06
b.jsp
=====
<%@page import="kr.co.study.common.util.ConnUtil"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
Connection conn = null;
PreparedStatement allStmt = null;
ResultSet rs = null;
try {
conn = ConnUtil.getConnection();
String all = "select * from member where id=?";
allStmt = conn.prepareStatement(all);
allStmt.setString(1, id);
rs = allStmt.executeQuery();
if (rs.next()) {
String dbpw = rs.getString("pw");
if (pw.equals(dbpw)) {
out.println("로그인성공했습니다.");
} else {
out.println("비밀번호일치하지않습니다.");
}
} else {
out.println("존재하지 않는 ID입니다.");
}
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (allStmt != null) {
allStmt.close();
allStmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
%>
</body>
</html>
Ex_07 아래와 같이 요청했을때 here 부분을 완성하여 id파라미터에 해당하는 비번,주소,전번을 텍스트박스에 출력되게 하시오.
http://localhost:설정한 포트번호/프로젝트명/a.jsp?id=id3
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
//here
<h1>회원정보수정폼</h1>
ID : <input type="text" disabled><br />
PW : <input type="text"><br />
ADDR : <input type="text"><br />
TEL : <input type="text"><br />
</body>
</html>
Sol_07
<%@page import="kr.co.study.common.util.ConnUtil"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String str = request.getParameter("id");
String id = "", pw = "", addr = "", tel = "";
Connection conn = null;
PreparedStatement allStmt = null;
ResultSet rs = null;
try {
conn = ConnUtil.getConnection();
String all = "select * from member where id=?";
allStmt = conn.prepareStatement(all);
allStmt.setString(1, str);
rs = allStmt.executeQuery();
if (rs.next()) {
id = rs.getString("id");
pw = rs.getString("pw");
addr = rs.getString("addr");
tel = rs.getString("tel");
}
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (allStmt != null) {
allStmt.close();
allStmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
%>
<h1>회원정보수정폼</h1>
ID : <input type="text" disabled><br />
PW : <input type="text"><br />
ADDR : <input type="text"><br />
TEL : <input type="text"><br />
</body>
</html>
'IT > JSP' 카테고리의 다른 글
JSP_04_DB연동, MemberDAO 이용 (0) | 2017.07.13 |
---|---|
JSP_02_request객체들 (0) | 2017.07.07 |
JSP_01_JSP시작 (0) | 2017.07.06 |