2011. 2. 13. 01:35
QuntumDB가 아무리 해도 연결이 안되니 너무도 답답하더라구요..ㅠㅠ
The Network Adapter could not establish the connection   error  code:17002
이 말이 뜨면서 연동안됨..


방법 1)

JDBC와 ORACLE 연결 중 IO 예외 상황 ( IO 예외 상황: The Network Adapter could not establish the connection... )

이 될 경우가 종종 있습니다. 해결방법은... 아래 처럼 해보세요.

 

DB 와의 접속되는. Connection 쪽의 연결 IP를

"oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@192.168.123.000:1521:ORCL", "scott", "tiger"

붉은색 글씨부분을 'localhost' 말고 위에처럼 ip주소로 적어보세요.

자신의 컴퓨터 즉 연결할 DB컴퓨터의 ip확인은 시작-실행-cmd 창에서 ipconfig 를 처보면 확인가능.

 

------------------------------------------------------------------------------------------

가끔 톰캣과의 연동에서 ojdbc14.jar 파일을 못읽는 경우가 있음.

자바 나 오라클이 설치된 곳에 가서 ojdbc14.jar 파일을 톰캣의 lib폴더에 복사해보세요.

 

------------------------------------------------------------------------------------------

자신의 컴퓨터에 방화벽이 켜져있어서 그럴경우도 있음.

제어판-방화벽 에 가서 '사용안함'으로 변경후 해보세요.

 

------------------------------------------------------------------------------------------
시작 - 실행 - cmd 창에서 lsnrctl -start를 입력하신 후

 

연결이 실패 했다고 나오면


C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 폴더에


listener.org, tnsnames.ora를 열어 보시면


현재 아이피와 포트번호가 맞는지 확인해주시면 됩니다.

--------------------------------------------------------------------------------------


연결이 실패하지 않았다면


Tomcat Server.xml 파일(resource 설정 부분)에서

 

연결 IP를 localhost로 사용하지 말고

 

tnsnames.ora 파일에서


(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))


부분의 HOST IP를 사용해보도록 한다.

--------------------------------------------------------------------------------------------------
출처 : http://www.cyworld.com/prizm0911/2598829님 홈피



전.. 이래도 안됐습니다...ㅠㅠ 방법 2)
알 수 없어서 
cmd - >tnsping orcl 을 입력해 보니
리스너가 없더군요..ㅠㅠ

ORA-12541: TNS:리스너가 없습니다.
그래서

시작->실행->cmd->lsnrctl start
명령어로 리스너를 실행시켰습니다..ㅠㅠ
그래도,, 여전히 연결이 안되더군요..ㅠㅠ


결국 마지막 방법으로 웹 서핑 하다 찾은 방법.


시작->실행->cmd->lsnrctl services

여기에 들어가 보니,
제가 알던 포트번호랑 다르더군요..ㅠㅠ
포트번호를 바꿔주니 , 실행이 되네요.ㅠ

이유는 왜 일까요??? 궁금하네요.ㅠ





Posted by Triany
2011. 1. 27. 11:13


톰캣 다운 받을 시 받았던 파일에서 lib 폴더로 가 위의 두 파일을 복사하여
[WEB-INF]-[lib] 에 넣는다.

Web App Libraries에 여러 jar 파일이 추가된 것을 볼 수 있다.


JSTL
JSP는 개발자가 직접 <jsp:include>와 같이 태그를 작성할 수 있는 기능을 제공하는데 이를 커스텀 태그라고 한다. 커스텀 태그 중에서 가장 많이 사용되는 것들을 모아서 JSTL이라는 규약을 만들었다. JSP페이지에서 논리적인 판단, 반복문의 처리, 데이터 베이스등의 처리를 하는 코드를 깔끔하게 작성하기 위해서 커스텀 태그를 작성해왔는데, 이런 중복되는 노력을 없애기 위해서 나온 것이 바로 JSTL(JSP Standard Tag Library)이다.

코어태그(p.479)

>JSTL이 제공하는 태그의 종류

라이브러리

하위기능

접두어

관련 URI

코어

변수 지원

흐름 제어

URL 처리

c

http://java.sun.com/jsp/jstl/core

XML

XML 코어

흐름 제어

XML 변환

x

http://java.sun.com/jsp/jstl/xml

국제화

지역

메시지 형식

숫자 및 날짜 형식

fmt

http://java.sun.com/jsp/jstl/fmt

데이터베이스

SQL

sql

http://java.sun.com/jsp/jstl/sql

함수

컬렉션 처리

fn

http://java.sun.com/jsp/jstl/function

※이번 프로젝트에서는 코어를 중심으로 사용.

>코어 태그 라이브러리

기능분류

태그

설명

변수지원

set

JSP에서 사용될 변수를 설정한다.

remove

설정한 변수를 제거한다.

흐름제어

if

조건에 따라 내부 코드를 수행한다.

choose

다중 조건을 처리할 때 사용된다.

forEach

컬렉션이나 Map의 각 항목을 처리할 때 사용된다.

forTokens

구분자로 분리된 각각의 토큰을 처리할 때 사용된다.

URL처리

import

URL을 사용하여 다른 자원의 결과를 삽입한다.

redirect

지정한 경로로 리다이렉트 한다.

url

URL을 재작성한다.

기타 태그

catch

예외 처리에 사용된다.

out

JspWriter에 내용을 알맞체 처리한 후 출력한다.

코어 태그 라이브러리를 사용하려면 JSP페이지에 다음과 같이 taglib디렉티브를 추가해 주어야 한다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>




<c:set>태그

<c:set>태그는 EL 변수의 값이나 EL변수의 프로퍼티의 값을 지정할 때 사용한다.
page, request, session, application의 네 영역에 저장되어 있는 객체를 <jsp:useBean>태그와 <jsp:setProperty>태그를 사용하여 JSP코드 내에서 사용될 변수를 지정하고 변수 프로퍼티의 값을 지정할 수 있는 것과 마찬가지로, <c:set>태그는 JSTL의 태그에서 사용될 변수의 값을 처리할 때 사용된다.


   <c:set   var="varName"  value="varValue" [scope="영역"] />
   <c:set   var="varName"  [scope="영역"]>varValue</c:set> 
var: 값을 지정할 EL 변수의 이름
value : 변수의 값을 지정한다. 표현식, EL, 정적인 텍스트를 사용하여 값을 지정할 수 있다.
scope : 변수를 지정할 영역을 지정한다. 값은 page, request, session, application 중 하나가 온다. 지정하지 않을 경우 기본값은 page이다.


test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
        <p> c:set테스트 </p>
        <c:set var="name"  value="홍길동" scope="session" />
        c:set 이후 name: ${name}<br>
       c:set 이후 requestScope.name: ${requestScope.name}<br>
       c:set 이후 sessionScope.name: ${sessionScope.name}<br>
       <c:remove var = "name" />
        c:remove 이후 name: ${name}<br/>
</body>
</html>







<c:if> 태그
 
 <c:if test="조건">
  ....
 </c:if>

test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
        <p> c:set테스트 </p>
        <c:set var="name"  value="홍길동" scope="session" />
        c:set 이후 name: ${name}<br>
        c:set 이후 requestScope.name: ${requestScope.name}<br>
        c:set 이후 sessionScope.name: ${sessionScope.name}<br>
        <c:remove var = "name" />
        c:remove 이후 name: ${name}<br/>
        <c:if test ="${empty name}">
             name값이 설정되어 있지 않습니다.<br>
        </c:if>
        <c:if test ="${ name == null }" >
             name값이 설정되어 있지 않습니다.<br>
        </c:if>
        <c:set var="a" value="100"/>
        <c:if test="${ a>50 }">
                                    예, a의 값은 50보다 큽니다.</br>
              a의 값은 ${a}입니다.
        </c:if>
</body>
</html>






<c:choose><c:when><c:otherwise>
<c:choose>태그는 자바의 switch 구문과 if-else 블록을 혼합한 혀태로서 다수의 조건문을 하나의 블록에서 수행하고자 할 때 사용된다.
 
   <c:choose>
       <c:when test="${memver.level == 'trial'}">
        ........
       </c:when>
       <c:when test="${memver.level == 'regular'}">
        ........
       </c:when>
       <c:when test="${memver.level == 'provider'}">
        ........
       </c:when>
       <c:otherwise>
        .......
       </c:otherwise>
   </c:choose>

test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
 <p> c:choose 테스트 </p>
 <c:choose>
    <c:when test = "${param.type == 'in' }">
                    내부검색을 요청하였습니다.
    </c:when>
       <c:when test = "${param.type == 'out' }">
                             외부검색을 요청하였습니다.  
       </c:when>
       <c:otherwise>
                            요청정보가 전달되지 않았습니다.
       </c:otherwise>
    </c:choose>        
      
</body>
</html>



    http://localhost:8080/test.jsp?type=in 을 사용하여 파라메터를 넘겨 줄 수있다.




<c:forEach>태그
<c:forEach> 태그는 배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할 때 사용할 수 있는 태그로서, 자바의 for, do-while 등을 대신해서 사용할 수 있다. <c:forEach>태그의 기본적인 사용 방법은 다음과 같다.
 
    <c:forEach var ="변수"  item="아이템">
       ......
       <tr>
          <td align="right"    bgcolor="#ffffff">
          ${변수사용}
          </td>
      .....
   </c:forEach>


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
   <p> c:forEach 테스트 </p>
   <%
        String[] list={"사과", "바나나", "키위"};
        session.setAttribute("fruits", list);
   %>
   <ul>
      <c:forEach var="f" items="${fruits}">
         <li> ${f}</li> 
      </c:forEach>
   </ul> 
</body>
</html>










<c:forEach>태그를 selection과 혼합


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
   <p> c:forEach 테스트 </p>
   <%
        String[] list={"사과", "바나나", "키위"};
        session.setAttribute("fruits", list);
   %>
   <ul>
      <c:forEach var="f" items="${fruits}">
         <li> ${f}</li> 
      </c:forEach>
   </ul>
   
     과일을 선택하세요:
   <select name="choice">
     <c:forEach var="f" items="${fruits}">
         <option>${f}</option>
     </c:forEach>
   </select>        
        
      
</body>
</html> 








JAVABEAN 객체와 혼합..
Member.java
package simple.web.model;
import java.io.Serializable;
/*
 * JAVA Bean객체를 만들 수 있는 클래스를 만든다.
 * JAVA Bean이란?
 *  1) Encapsulation 구현 O
 *  2) getter, setter O
 *  3) default 생성자 O
 *  4) Serializable 구현.
 */
public class Member implements Serializable {
 private String id;
 private String passwd;
 private String name;
 private String email;
 private String phone;
 private String address;
 private String sex;
 private String[] interest;
 
 
 public Member() {
  super();
 }
 
 public Member(String id, String passwd, String name, String email,
   String phone, String address) {
  super();
  this.id = id;
  this.passwd = passwd;
  this.name = name;
  this.email = email;
  this.phone = phone;
  this.address = address;
 }
 public Member(String id, String passwd, String name, String email,
   String phone, String address, String sex, String[] interest) {
  super();
  this.id = id;
  this.passwd = passwd;
  this.name = name;
  this.email = email;
  this.phone = phone;
  this.address = address;
  this.sex = sex;
  this.interest = interest;
 }
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getPasswd() {
  return passwd;
 }
 public void setPasswd(String passwd) {
  this.passwd = passwd;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = 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 getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public String[] getInterest() {
  return interest;
 }
 public void setInterest(String[] interest) {
  this.interest = interest;
 } 
}
test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "simple.web.model.*, java.util.*"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
   <p> c:forEach 테스트 </p>
   <%
        String[] list={"사과", "바나나", "키위"};
        session.setAttribute("fruits", list);
        ArrayList<Member> members = new ArrayList<Member>();
        members.add(new Member("kim", "111","김영숙",
          "yskim@korea.com", "010-1111-2222","address"));
        members.add(new Member("lee", "111","이순신",
          "yskim@korea.com", "010-1111-2222","address"));
        members.add(new Member("hong", "111","홍길동",
          "yskim@korea.com", "010-1111-2222","address"));
        members.add(new Member("park", "111","박찬호",
          "yskim@korea.com", "010-1111-2222","address"));
        request.setAttribute("member", members); //m이라는 객체를 request 스콥에 박아넣음
   %>
       회원목록<br/>
   <ul>
       <c:forEach var="m" items="${member}">
          <li>회원ID  : ${m.id}    &nbsp;&nbsp;
                패스워드: ${m.passwd} &nbsp;&nbsp;
                                     회원명     : ${m.name}  &nbsp;&nbsp;
                이메일     : ${m.email} &nbsp;&nbsp;<br/>
               전화번호: ${m.phone} &nbsp;&nbsp;
                주소          : ${m.address} &nbsp;&nbsp;
          </li>    
       </c:forEach>
   </ul>
   </body>
</html>
 
<!-- 여기서 m.id라는 것은 member에 있는 getId라는 것을 호출해서 출력한다.
                                       그러하기에 반드시 JAVA BEAN 객체여야 한다.
  -->






<c:forEach>와 <c:forTokens>태그
<c:froTokens>태그는 items 속성으로 전달받은 문자열을 구분자를 이용해서 나눈 뒤 나뉘어진 각 문자열을 var속성에 명시한 변수에 저장한다. 예를 들어, 아래 코드는 item을 속성의 값을 (/)로 나눈 "red", "green", "blue"문자열을 color변수에 차례로 대입한다.
 
  <c:forTokens var="color"   items="red,green,blue" delims=",">
       ${color}
  </forTokens}


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "simple.web.model.*, java.util.*"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
   <p> c:forEach 테스트 </p>
   <%
        String wishList="집,돈,맥북,아이폰";
        request.setAttribute("wish", wishList);
       
        String wishList2="토끼/사슴/호랑이/앵무새";
        request.setAttribute("wish2", wishList2); 
   %>
       희망목록
   <ol>
        <c:forEach var="w" items="${wish}">
            <li>${w}</li>
        </c:forEach>
   </ol>
   <!-- forEach는 ,(콤마)를 기준으로 자른다. -->
       구분자를 지정해 준 forToken
   <ol>
         <c:forTokens var="w" items="${wish2}" delims = "/">
                       <li>${w}</li>
         </c:forTokens>
   </ol>
 </body>
</html>  








<c:catch>태그
<c:catch>태그는 발생된 예외를 EL 변수에 저장할 때 사용되는 태그이다.

  <c:catch   var="exName">
       ......
       예외가 발생할 수 있는 코드 
       .......
  </c:catch>
      .....
   ${exName}   사용

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
   <c:catch var="ex">
     <% int b = 10/0;%>
  </c:catch>
  <c:if test="${not empty ex}">
          ${ex}
  </c:if>
  </body>
</html>
















Posted by Triany
2011. 1. 27. 11:00


표현언어의 기능
- JSP의 네가지 기본 객체가 제공하는 영역의 속성 사용
   : 네가지 기본객체 - SCOP(session, application,
- 집합 객체(Collection)객체에 대한 접근 방법 제공
- 수치 연산, 관계 연산, 논리 연산자 제공
- 자바 클래스 메서드 호출 기능 제공
- 표현 언어만의 기본 객체 제공

 ${변수명}
 ${메소드호출}
 ${계산}


>EL이 제공하는 11개의 기본 객체

기본객체

설명

pageContext

JSP의 page 기본객체와 동일하다

pageScope

pageContext 기본 객체에 저장된 속성의 <속성, 값>매핑을 저장한

Map 객체

requestScope

request 기본객체에 저장된 속성의 <속성,값>매핑을 저장한

Map객체

sessionScope

session 기본객체에 저장된 속성의 <속성,값>매핑을 저장한

Map객체

applicationScope

application 기본객체에 저장된 속성의 <속성,값>매핑을 저장한

Map객체

param

요청 파라미터의 <파라미터이름,값>매핑을 저장한 MAp객체.

파라미터 값의 타입은 String으로서, request.getParameter(이름)의 결과와 동일하다.

paramValues

요청 파라미터의 <파라미터이름.값배열>매핑을 저장한 Map객체.

값의 타입은 String[]으로서, rerquest.getParameterValues(이름)의 결과와 동일하다.

header

요청 정보의 헤더이름, 값> 매핑을 저장한 Map객체.

request.getHeader(이름)의 결과와 동일하다.

headerValues

요청정보의 <헤어이름, 값>배열 매핑을 저장한 Map객체.

request.getHeaders(이름)의 결과와 동일하다.

cookie

<쿠키 이름,Cookie>매핑을 저장한 Map 객체. request.getCookies()로 구한 Cookie배열로부터 매핑을 생성한다.

initParam

초기화 파라미터의 <이름, 값> 매핑을 저장한 Map 객체. application.getInitParameter(이름)의 결과와 동일하다.






test.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>
<style type="text/css">
p { color: blue;  font-size: 14pt;}
</style>
</head>
<body>
       <!-- 이런 식으로 실행  http://dddd/test.jsp?name=kim-->
        1.  수신된 데이터: ${param.name} <br/>
        2.  수신된 데이터: <%= request.getParameter("name")%> <br/>
        3.  JSESSIONID 쿠기값 : ${cookie.JSESSIONID.value}
      
</body>
</html>

'Java' 카테고리의 다른 글

파일과 입출력 API  (0) 2011.01.11
java.util 패키지(유틸리티 API)  (0) 2011.01.11
static정리  (0) 2011.01.06
추상클래스 / 인터페이스  (0) 2011.01.06
instanceof연산자  (0) 2011.01.05
Posted by Triany
2011. 1. 25. 15:51














Posted by Triany
2011. 1. 25. 14:48


login 처리의 예!!!

 login.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 = "login.do" method  = "post">
사용자명 : <input type = "text" id = "id" name = "id"/><br/>
패스워드 : <input type = "password" id = "passwd" name = "passwd"/><br/>
<input type = "submit" value = "로그인"/>
<input type = "reset" value = "취소"/>
</form>

</body>
</html>

LoginServlet.java

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
public class LoginServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
   
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  request.setCharacterEncoding("utf-8");
  String id = request.getParameter("id");
  String passwd = request.getParameter("passwd");
  if( id != null && id.equals("kim") &&
    passwd != null && passwd.equals("123")){
   String message = id +"님 환영합니다.";
   request.setAttribute("message", message);
   RequestDispatcher patcher =
    request.getRequestDispatcher("success.jsp");
   patcher.forward(request, response);
   return;
  }else{
   String message = "로그인 실패";
   request.setAttribute("message", message);
   RequestDispatcher patcher =
    request.getRequestDispatcher("failed.jsp");
   patcher.forward(request, response);
   return;
  }
  
  
 }


 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */

}

sucess.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 bgcolor = "green">
   <b1><font color = "white" size = "6" >
   <%= request.getAttribute("message") %></b1>

</body>
</html>

failed.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 bgcolor = "red">
  <b1><font color = "white" size = "6" >
   <%= request.getAttribute("message") %></b1>
</body>
</html>





index.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>
<link rel = "stylesheet" href = "login.css" type = "text/css"/>
</head>
<body>
   <div id="container">
 <div id="header">
  <h1>
   HomeShopping♡
  </h1>
 </div>
 <div id="navigation">
  <ul>
   <li><a href="#">홈으로</a></li>
   <li><a href="#">거래내역</a></li>
   <li><a href="#">장바구니</a></li>
   <li><a href="#">개인정보</a></li>
  </ul>
 </div>
 <div id="content-container">
  <div id="content">
   <h2>
     Hello!!!
   </h2>
   <p>
    Lorem ipsum dolor sit amet consect etuer adipi scing elit sed diam nonummy nibh euismod tinunt ut laoreet dolore magna aliquam erat volut. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
   </p>
   <p>
    Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
   </p>
   <p>
    Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
   </p>
  </div>
  <div id="aside">
   <jsp:include page = "login.jsp"/> 
  </div>
  <div id="footer">
   Copyright © Site name, 20XX
  </div>
 </div>
</div>
</body>
</html>

 login.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>
<% if (session.getAttribute("username") == null ) {%>
<form action = "login.do" method  = "post">
사용자명 : <input type = "text" id = "id" name = "id"/><br/>
패스워드 : <input type = "password" id = "passwd" name = "passwd"/><br/>
<input type = "submit" value = "로그인"/>
<input type = "reset" value = "취소"/>
</form>
<%} else { %>
<p><%= session.getAttribute("username") %> 님 환영합니다. </p>
<p><a href = "logout.jsp"> 로그아웃</a> &nbsp;
   <a href = "mod_user_info.jsp">정보수정</a></p>
<% } %>
</body>
</html>
 




 

logout.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% session.invalidate(); %>
<script language = "javascript">
 alert("성공적으로 로그아웃하였습니다.");
 location.href = "index.jsp";
</script language>

login.css
 @CHARSET "UTF-8";
#sidebar{ float:right; width:245px;}
/* 로그인 */
#login {width:208px; height:128px; background:url(standard/images/bg_login.jpg) no-repeat; margin-bottom:10px; padding:47px 17px 0 20px;} /*패딩때문에 높이와 너비가 줄었음 */
#login dd{width:141px; float:left; vertical-align:top;}
#login dd.pw{ margin-top:3px;}
#login .input_text{border:1px solid #c9c9c9; width:137px; height:18px; color:#444;}
#login #id{background:#fff url(images/bg_login_id.gif) no-repeat 0px 0px;}
#login #pw{background:#fff url(images/bg_login_pw.gif) no-repeat 0px 0px;}
#login .keeping{float:right; margin:-22px 0 0 0; background:#003366}
#login .log_in_etc{float:left; padding:5px 0 0 0; .padding:3px 0 0 0; color:#9e9e9e; font:normal 11px dotum; width:170px;}
#login .log_in_etc input{ vertical-align:-2px; margin:0 3px 0 0;}
#login .log_in_find {float:left; clear:both; margin-top:14px;.margin-top:9px; font-size:12px; width:200px; letter-spacing:-1px;}
#log_notice {float:left; clear:both;width:200px; margin-top:16px;.margin-top:13px;font:normal 11px dotum; } /*.margin은 IE6의 공백을 맞추기위해 핵사용*/
#log_notice img{ vertical-align:-1px;}

 

 

#container
{
 margin: 0 auto;
 width: 900px;
 background: #ffc0cb;
}

#header
{
 background: #ffb6C1;
 padding: 20px;
}

#header h1 { margin: 0; }

#navigation
{
 float: left;
 width: 900px;
 background: #bc8f8f;
}

#navigation ul
{
 margin: 0;
 padding: 0;
}

#navigation ul li
{
 list-style-type: none;
 display: inline;
}

#navigation li a
{
 display: block;
 float: left;
 padding: 5px 10px;
 color: #fff;
 text-decoration: none;
 border-right: 1px solid #fff;
}

#navigation li a:hover { background: #383; }

#content-container
{
 float: left;
 width: 900px;
 background: #ffe4f1 url(/wp-content/uploads/layout-two-fixed-background.gif) repeat-y 100% 0;
}

#content
{
 clear: left;
 float: left;
 width: 560px;
 padding: 20px 0;
 margin: 0 0 0 30px;
 display: inline;
}

#content h2 { margin: 0; }

#aside
{
 float: right;
 width: 240px;
 padding: 20px 0;
 margin: 0 20px 0 0;
 display: inline;
}

#aside h3 { margin: 0; }

#footer
{
 clear: left;
 background: #ffdab9;
 text-align: right;
 padding: 20px;
 height: 1%;
}

 LoginServlet.java
package simple.web.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LoginServlet
 */
public class LoginServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
   
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  request.setCharacterEncoding("utf-8");
  String id = request.getParameter("id");
  String passwd = request.getParameter("passwd");
  HttpSession session = request.getSession();
  if( id != null && id.equals("kim") &&
    passwd != null && passwd.equals("123")){
   session.setAttribute("username", id);
  }
  RequestDispatcher patcher =
  request.getRequestDispatcher("index.jsp");
  patcher.forward(request, response);
  return;
 }


 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */

}

 











'Java > JSP' 카테고리의 다른 글

JSTL 환경 설정  (0) 2011.01.27
색상테이블 / 색상표 / 색상코드  (0) 2011.01.25
JSP == Servlet (궁극적으로...)  (0) 2011.01.25
JSP 페이지 구성 요소 / 웹 요청 처리 SCOPE  (0) 2011.01.25
서블릿 (ⅱ)  (0) 2011.01.25
Posted by Triany
2011. 1. 25. 14:41
JSP가 Servlet인지 확인해 보자-

작성한 jsp를 Export 시킨다 - WAR file으로..






경로는 c:\apache-tomcat-6.0.30\webapps로.



Export 시키고, webapps 폴더에 가보면 webproject.war파일이 생긴 것을 볼 수 있다.





eclips 서버를 잠시 stop 시키고, cmd에서 startup시킨다.



webapps에 webproject 폴더가 생긴 것을 볼 수 있다.








웹에서 webproject/add.jsp를 실행해 보자.






웹에서 실행 시킨 후,  아래 경로에 java 파일이 생긴것을 볼 수 있다.


아래 add_jsp.java 파일을 보면
servlet형식으로 쓰여 진 것을 볼 수 있다.
궁극적으로 jsp는 servlet으로 바뀌게 된다.









'Java > JSP' 카테고리의 다른 글

색상테이블 / 색상표 / 색상코드  (0) 2011.01.25
login 처리. / home 간단 sample 처리.  (0) 2011.01.25
JSP 페이지 구성 요소 / 웹 요청 처리 SCOPE  (0) 2011.01.25
서블릿 (ⅱ)  (0) 2011.01.25
서블릿 (ⅰ)  (0) 2011.01.24
Posted by Triany
2011. 1. 25. 13:36
JSP의 주된 목적은 웹 브라우저에 보여줄 html 문서를 생성하는것이다.
<%@ %> : 지시어(Directive) -> 페이지에 대한 설정 정보를 지정
                <%@ page   ..... %>
                <%@ taglib  ..... %>   
                <%@ include  .....%>    : 다른 페이지를 포함시키는 용도
<%! %> : 선언문(Declaration)
              클래스의 멤버변수, 멤버메서드를 선언하기 위한 문법
              init(), destroy() 메서드는 선언문 안에서 선언해야 한다. 
<%= %> : 표현식
               변수값, 메서드 호출결과를 화면에 출력하는 부분
<%-- --%> : 커멘트
                   JSP에서 사용되는 주석문
                  ☆  HTML에서 사용하는 주석문<!-- --> 과의 차이점
                  - 서블릿 코드에 <%-- --%>로 작성된 주석은 들어가지 않는다.
<% %> : 스크립트릿(Scriptlet)
             자바코드를 실행한다.

◇JSP 페이지의 구성 요소

- 디렉티브(Directive)

- 스크립트 : 스크립트릿(Scriptlet), 표현식(Expression), 선언부(Declaration)

- 표현 언어(Expression Language)

- 기본 객체 (Implicit Object)

- 정적인 데이터

- 표준 액션태크(Action Tag)

- 커스텀 태그(Custom tag)와 표준 태그 라이브러리(JSTL)

◇page 디렉티브

: JSP 페이지에 대한 정보를 입력하기 위해 사용

>페이지 디렉티브 주요 속성

속성

설명

기본값

language

JSP 스크립트 코드에서 사용되는 프로그래밍 언어를 지정한다.

java

contentType

JSP가 생성할 문서의 타입을 지정한다.

text/html

import

JSP 페이지에서 사용할 자바 클래스를 지정한다.

session

JSP 페이지가 세션을 사용할지의 여부를 지정한다.

“true"일 경우 세션을 사용하고,

”false"일 경우 세션을 사용하지 않는다.

true

buffer

JSP 페이지의 출력 버퍼의 크기를 지정한다. “none"일 경우 출력 버퍼를 사용하지 않으며, ”8kb"라고 입력한 경우 8킬로바이트 크기의 출력 버퍼를 사용한다.

최소

8kb

autoFlush

출력 버퍼가 다 찼을 경우 자동으로 버퍼에 있는 데이터를 출력 스트림에 보내고 비울지의 여부를 나타낸다.

"true"일 경우 버퍼의 내용을 웹 브라우저에 보낸 후 버퍼를 비우며, “false"일 경우 에러를 발생시킨다.

true

info

JSP 페이지에 대한 설명을 입력한다.

errorPage

JSP 페이지를 실행하는 도중에 에러가 발생할 때 보여줄 페이지를 지정한다.

isErrorPage

현재 페이지가 에러를 발생될 때 보여지는 페이지인지의 여부를 지정한다. “true”일 경우 에러 페이지이며, “false"일 경우 에러 페이지가 아니다.

false

pageEncoding

JSP 페이지 자체의 캐릭터 인코딩을 지정한다.

isELignored

"true"일 경우 표현 언어를 지원하며, “false"일 경우 표현 언어를 지원하지 않는다.

기본값은 web.xml 파일이 사용하는 JSP 버전 및 설정에 따라 다르다.

deferredSyntaxAllowedAsLiteral

#{ 문자가 문자열 값으로 사용되는 것을 허용할지의 여부를 지정한다.

false

trimDirectiveWhitespaces

출력 결과에서 템플릿 텍스트의 공백 문자를 제거할지의 여부를 지정한다.

false

스크립트 요소

스크립트 요소는 JSP 프로그래밍에서 로직을 수행하는 데 필요한 부분으로, 스크립트 코드를 사용하여 프로그램이 수행해야 하는 기능을 구현할 수 있다.

JSP의 스크림트 요소에는 다음과 같이 세가지가 있다.

★ 스크립트릿(Scriptlet) : JSP 페이지에서 자바 코드를 실행할 때 사용되는 코드의 블록이다.

<%

자바코드 1;

자바코드 2;

자바코드3;

%>

★ 표현식(Expression) : 어떤 값을 출력 결과에 포함시키고자 할 때 사용된다.

<%= 값 %>

★ 선언부(Declaration) : JSP 페이지의 스크립트릿 표현식에서 사용할 수 있는 함수를 작성할 때 사용된다.

<%!

public 리턴 타입 메서드이름(파라미터 목록) {

자바 코드1;

자바 코드2;

.....

자바 코드n;

return 값;

}

%>






[웹요청 처리 SCOPE]

PAGE : 한 페이지

REQUEST : 요청 -> 응답까지

SESSION : 로그인 -> 로그아웃

APPLICATION : 서버시작 -> 서버종료




[JSP기본 객체]

pageContext : PAGE SCOPE에서 사용되는 데이터를 처리할 수 있는 객체

request : REQUEST SCOPE에서 사용되는 데이터를 처리할 수 있는 객체

request.setAttribute(name,value)

request.getAttribute(name)

session : SESSION SCOPE에서 사용되는 데이터를 처리할 수 있는 객체

HttpSession session = request.getSession();

session.setAttribute(name, value)

session.getAttribute(name)

application : APPLICATION SCOPE에서 사용되는 데이터를 처리할 수 있는 객체

out

exception

page

config

기본 객체의 속성(Attribute 사용하기

>속성 처리 메서드

메서드

리턴 타입

설명

setAttribute(String name,

object value)

void

이름이 name인 속성의 값을 value로 지정한다.

getAttribute(String name)

Object

이름이 name인 속성의 값을 구한다. 지정한 이름의 속성이 존재하지 않을 경우 null을 리턴한다.

removeAttribute(String name)

void

이름이 name인 속성을 삭제한다.

getAttributeNames()

java.util.

Enumeration

속성의 이름 목록을 구한다.(pageContext 기본 객체는 이 메서드를 제공하지 않는다.)



[액션태그]

<jsp:include>

<jsp:include page = "login.jsp"/>

<jsp:forward>

<jsp:param>

==>key==100 값을 가지고 test.jsp페이지 이동

<jsp:forward page = "test.jsp">

<jsp:param name = "key value = "100" />

<jsp:forward>

'Java > JSP' 카테고리의 다른 글

색상테이블 / 색상표 / 색상코드  (0) 2011.01.25
login 처리. / home 간단 sample 처리.  (0) 2011.01.25
JSP == Servlet (궁극적으로...)  (0) 2011.01.25
서블릿 (ⅱ)  (0) 2011.01.25
서블릿 (ⅰ)  (0) 2011.01.24
Posted by Triany
2011. 1. 25. 10:42

Servlet은 Controller(제어)의 역할을 담당하게 한다.
RequestDispatcher가 경우에 따라 jsp(present 구현)해주는 페이지로 넘겨준다.
(프레임 웤이 하는 일을 서블릿이 하도록 작성해 보자)
 : 아직 프레임 웤을 사용하지 않기 때문

소스)
index.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>
    현재시간 : <%= new java.util.Date() %> <br></br>
  <p>데이터를 입력하고 전송 버튼을 눌러 주세요</p>
  <form action = "first.do" method = "get">
       이름 : <input type = "text" name = "name"/><br/>
       좋아하는 동물은 ?
       <input type = "checkbox" name = "pet" value = "강아지">강아지</input>
       <input type = "checkbox" name = "pet" value = "고양이">고양이</input>
       <input type = "checkbox" name = "pet" value = "송아지">송아지</input>
       <br/>
       <input type = "submit" value = "전송"/>
    </form>
</body>
</html>


FirstSetvlet.java
package simple.web.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 private int count;
 
 public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
 /*
  * init()
  * 서블릿을 시작할 때 호출한다.
  * 시작할 때 무엇인가를 처리하고 싶다면..
  * init()에 처리
  */
 @Override
 public void init() throws ServletException {
  // TODO Auto-generated method stub
  super.init();
  count = 100;
  System.out.println("init() called... count = " + count);
  //콘솔에 창 띄움.
 }
 
 /*
  * destroy()
  * 서버를 종료시키면 호출된다.
  * 서블릿을 종료시킬 때 처리하고 싶은 것이 있다면...
  * destory()에 처리
  */
   @Override
 public void destroy() {
  // TODO Auto-generated method stub
  System.out.println("destroy() called... count = " + count);
 }
 
 
 
    //새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
    //같은 방식으로 처리하겠다.
   protected void process(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
     response.setContentType("text/html;charset=utf-8");
     request.setCharacterEncoding("utf-8");
     //POST 방식으로 보냈을 때 한글로 처리하기 위함
     PrintWriter out = response.getWriter();
     String name = request.getParameter("name");
     if( name.equals("김영숙")){
      RequestDispatcher dispatcher =
       request.getRequestDispatcher("success.jsp");
      dispatcher.forward(request, response);
      return;
     } else{
      RequestDispatcher dispatcher =
       request.getRequestDispatcher("failed.jsp");
      dispatcher.forward(request, response);
      return;
     }
   }
   
   /*
    * 서비스는 종류에 따라 불러짐.
    * get - doget
    * post - dopost
    */
    protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
 }

 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
  
 }
}
sucess.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 bgcolor = "green">
   <b1><font color = "white" size = "6" > 환영합니다.</b1>
</body>
</html>


failed.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 bgcolor = "red">
<font color = "white" size = "6" > 실패하셨습니다.</font>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



















 

Posted by Triany
2011. 1. 24. 15:55

group study.

서블릿

Servet = > 1. 서버에서 실행되는 자바 컴포넌트
               2. HTTP 요청을 받아서 처리
               3. HTTP 응답을 동적으로 만들어서 처리
               4. Web Container에서 실행
                     (Web Container : Servlet과 Thread pool을 관리하는 특별한 형태의 JVM)


head   url, HTTP1.1, Cookie
body   data

  [클라이언트가 보내는 요청 방식]
※GET방식
head  http://○.○.○/○.jsp?name=kim  
※POST방식
head http://○.○.○/○.jsp
body name = kim

1) GET :  요청정보를 head에다 담아가는 방식. (ex) http://***.***.***/login.jsp?user=kim&pass)
특별히 어느 방식으로 요청하지 않으면 GET이 Default 방식이 된다.
Bookmarking같은 것이 필요한 경우에는 반드시 GET방식으로 써야 한다.
(눈에 보여도 상관없는 경우도 OK.)
2) POST : 요청정보를 body에다 담아가는 방식 사용  (ex) user = kim & pass = 1, 2, 3
서버에게 보내야 하는 데이터가 경우, 전송데이터에 보안이 요구되는 경우
3)PUT ( 파일을 올릴때 ) [자주 사용하진 않음] 
4)DELETE ( 삭제 할 때 ) [자주 사용하진 않음]

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
     public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    //새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
    //같은 방식으로 처리하겠다.
    protected void process(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
     response.setContentType("text/html;charset=utf-8");
     PrintWriter out = response.getWriter();
     out.println("<b>환영합니다</b>"); //respontse가 알아서 씀.\
  out.close();
  //이 페이지를 요청하면 환영합니다. 하고 끝~
 }
   
 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
 }
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
  
 }
}


[서블릿 클래스의 기능을 이해하고 생성할 수 있다.]
 HttpServlet
 init();
 service(request,response);
    ->doPost(request, response)
    ->doGet(request, response)
 destroy();

 Servlet Life Cycle
1. load servlet class
2. create sevlet instance
3. Call the init method
4. Call the service method
    서비스는 종류에 따라 달리 불러질 것
    GET - doget
    POST - dopost
5. Call the destroy dethod

The web container manages the life cycle of a servlet instance
These methods should not be called by your code. 




import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 private int count;
 
 public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

 
 /*
  * init()
  * 서블릿을 시작할 때 호출한다.
  * 시작할 때 무엇인가를 처리하고 싶다면..
  * init()에 처리
  */
 @Override
 public void init() throws ServletException {
  // TODO Auto-generated method stub
  super.init();
  count = 100;
  System.out.println("init() called... count = " + count);
  //콘솔에 창 띄움.
 }
 
 /*
  * destroy()
  * 서버를 종료시키면 호출된다.
  * 서블릿을 종료시킬 때 처리하고 싶은 것이 있다면...
  * destory()에 처리
  */
   @Override
 public void destroy() {
  // TODO Auto-generated method stub
  System.out.println("destroy() called... count = " + count);
 }
 
 
 
    //새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
    //같은 방식으로 처리하겠다.
   protected void process(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
     response.setContentType("text/html;charset=utf-8");
     PrintWriter out = response.getWriter();
     out.println( "<b>환영합니다" + (count++) +"번째 방문객입니다.</b>"); //respontse가 알아서 씀.\
  out.close();
  //이 페이지를 요청하면 환영합니다. 하고 끝~
 }
   
   /*
    * 서비스는 종류에 따라 불러짐.
    * get - doget
    * post - dopost
    */
    protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
 }

 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
  
 }
}








 

JSP용도 : 프레젠테이션.(보여주기만 하는것)
Client의 요청을 서블릿에게 보내줌...!!!!!!
클라이언트에게 요청이 들어오면 그 요청을 서블릿이 받아서 처리할 것
서블릿은 내가 호출하는 것이 아니라, 
클라이언트가 요청을 보내면 Web Container()가 받아서,,, Web Container가 Request에 해당하는 객체를 자동적으로 만들어줌.
그 과정에서 만들어진 HttpServerRequest와 HttpServerResponse에 의해 init, doget, dopost, destroy 부름..

 

request와 response객체를 이해한다.
   HttpServlet Request
       getHeanerName()
       getHeader(name)
   HttpServletResponse
       getParameter(name)
       getParameterValues(name)
       getParameterNames()
       getRequestDispatcher("다음으로 갈 페이지명")
           ->반환하는 객체가 RequestDispatcher이다.
             이 객체가 제공하는 forward(request, response)
             메서드를 호출하여 다음 페이지로 이동한다.



요청 헤더 정보의 처리 

JSP의 request 기본 객체는 헤더 정보를 읽어올 수 있는 기능을 제공하고 있으며, 이 기능을 제공하는 메서드는 아래와 같다.
; 헤더정보 ex)웹 브라우저는 웹 부라우저의 종류에 대한 정보를 헤더에 담아서 전송

 [request 기본 객체가 제공하는 헤더 읽기 메서드]
 메서드 리턴 타입  설명 
 getHeaderNames() java.util.Enumeration  모든 헤더의 이름을 구한다. 
 getHeader(String name) String  지정한 이름의 헤더 값을 구한다. 
 getHeaders(String name) java.util.Enumeration  지정한 이름의 헤더 목록을 구한다. 
 getIntHeader(String name) int  지정한 헤더의 값을 정수 값으로 읽어온다. 
 getDateHeader(String name) long  지정한 헤더의 값을 시간 값으로 읽어온다.(이때 시간은 1970년 1월 1일 이후로 흘러간 1/1000초 단위의 값을 가진다. 


import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 private int count;
 
 public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
 /*
  * init()
  * 서블릿을 시작할 때 호출한다.
  * 시작할 때 무엇인가를 처리하고 싶다면..
  * init()에 처리
  */
 @Override
 public void init() throws ServletException {
  // TODO Auto-generated method stub
  super.init();
  count = 100;
  System.out.println("init() called... count = " + count);
  //콘솔에 창 띄움.
 }
 
 /*
  * destroy()
  * 서버를 종료시키면 호출된다.
  * 서블릿을 종료시킬 때 처리하고 싶은 것이 있다면...
  * destory()에 처리
  */
   @Override
 public void destroy() {
  // TODO Auto-generated method stub
  System.out.println("destroy() called... count = " + count);
 }
 
 
 
    //새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
    //같은 방식으로 처리하겠다.
   protected void process(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
     response.setContentType("text/html;charset=utf-8");
     PrintWriter out = response.getWriter();
     out.println( "<b>환영합니다" + (count++) +"번째 방문객입니다.</b>"); //respontse가 알아서 씀.\
     
  
   //getHeaderNames() 헤더에 담겨져 오는 데이터의 이름값을 가져온다.
     Enumeration headers = request.getHeaderNames();
     //헤드 정보 이름 : 값. 으로 구성되 있음...
     while ( headers.hasMoreElements()) //요소가 있는 동안에 돌리겠다.
     {
      String name = (String)headers.nextElement();
      //getHeader(name)는 해당 이름에 해당하는 값을 읽어 온다.
      String value = request.getHeader(name);
      out.println("<li>"+ name + "  : " + value);
     }
     
     
     out.close();
  //이 페이지를 요청하면 환영합니다. 하고 끝~
 }
   
   /*
    * 서비스는 종류에 따라 불러짐.
    * get - doget
    * post - dopost
    */
    protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
 }


 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
  
 }
}





 




요청 파라미터의 처리
>request 기본 객체의 파라미터 읽기 메서드

 메서드 리턴 타입  설명 
 getParameterNames() java.util.Enumeration  웹 브라우저가 전송한 파라미터의 이름을 구한다. 
 getParameter(String name) String  이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 null을 리턴한다. 
 getParameterValues(String name) String[]  이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴한다. 
 getParameterMap() java.util.Map  웹 브라우저가 전송한 파라미터의 맵을 구한다. 맵은 <파라미터 이름, 값> 쌍으로 구성된다. 



실제로 파라메터 값을 읽어올 수 있는지 확인하기 위한 jsp화면.
>POST형식으로 데이터 request 하기

 index.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>
    현재시간 : <%= new java.util.Date() %> <br></br>
  <p>데이터를 입력하고 전송 버튼을 눌러 주세요</p>
  <form action = "first.do" method = "post">
       이름 : <input type = "text" name = "name"/><br/>
       좋아하는 동물은 ?
       <input type = "checkbox" name = "pet" value = "강아지">강아지</input>
       <input type = "checkbox" name = "pet" value = "고양이">고양이</input>
       <input type = "checkbox" name = "pet" value = "송아지">송아지</input>
       <br/>
       <input type = "submit" value = "전송"/>
    </form>
</body>
</html>
 FirstSetvlet.java

 package simple.web.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 private int count;
 
 public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

 
 /*
  * init()
  * 서블릿을 시작할 때 호출한다.
  * 시작할 때 무엇인가를 처리하고 싶다면..
  * init()에 처리
  */
 @Override
 public void init() throws ServletException {
  // TODO Auto-generated method stub
  super.init();
  count = 100;
  System.out.println("init() called... count = " + count);
  //콘솔에 창 띄움.
 }
 
 /*
  * destroy()
  * 서버를 종료시키면 호출된다.
  * 서블릿을 종료시킬 때 처리하고 싶은 것이 있다면...
  * destory()에 처리
  */
   @Override
 public void destroy() {
  // TODO Auto-generated method stub
  System.out.println("destroy() called... count = " + count);
 }
 
  
    //새로 생성. doGet방식으로 들어오든, doPost방식으로 들어오든(요청)
    //같은 방식으로 처리하겠다.
   protected void process(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
     response.setContentType("text/html;charset=utf-8");
     request.setCharacterEncoding("utf-8");
     //POST 방식으로 보냈을 때 한글로 처리하기 위함
     PrintWriter out = response.getWriter();
     
     String name = request.getParameter("name");
     String[] pet = request.getParameterValues("pet");
     out.println("<b>"+ name + "님 환영합니다."
       + (count++) +"번째 방문객입니다.</b>"); //respontse가 알아서 씀.\
     out.println("좋아하는 동물을 다음과 같이 선택하셨습니다.");
     for(String p : pet){
      out.println("<li>"+p);
     }
     
  
     out.close();
  //이 페이지를 요청하면 환영합니다. 하고 끝~
 }
   
   /*
    * 서비스는 종류에 따라 불러짐.
    * get - doget
    * post - dopost
    */
    protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
 }

 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  process(request, response);
  
 }
}







>GET형식으로 데이터를 한글로!! request 하기
1) 일단 설정을 변경하여야 한다.(톰캣 자체를)

redirectPort 밑에 라인 추가
URIEncoding = "utf-8"




2)이제 한글로 출력해 보자.  앞에 jsp 파일에서 method = "get" 부분만 수정해 주면 된다.
(default일 경우 get처리 되므로 생략하여도 get 처리된다.) 

GET방식으로 하면, head에 한글이 첨부되어 간다(블록 처리해 놓은 것 참조)

Posted by Triany
2011. 1. 20. 16:17
JDBC개념과 역할
  * JDBC 구조
     - JDBC(Java Database Connectivity)
     - 데이터베이스 벤더와 상관없이 동일한 개발이 가능함

  * JDBC 드라이버
     - JDBC 드라이버는 사용하고자 하는 데이터베이스 벤더 별로 제공 된다.


(ojdbc14.jar)를 jar 파일로 추가



 * JDBC 프로그래밍 단계

1. JDBC 드라이버 로드
    : System.sepProperty()
2. 데이터베이스 연결
3. Statement생성
4. SQL 문 전송
    : java.sql.Statement -> [DB조회] excuteQuery(),   <-  Query를 넣어서...
                                      [DB변경]  excuteUpdate()
5. 결과 받기 [excuteQuery()의 경우]
   java.sql.ResultSet(state마다 하나씩밖에 없다.
6. 연결 해제
   java.sql.Connection -> close()   


> 코드보기(select문에 대한 sql문 처리)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBTest {
 public static void main(String[] args) {
  
  //DB는 전부다 1521 포드로 연결
  //jdbc:oracle:thin:@117.17.93.103:1521:orcl
  String url = "jdbc:oracle:thin:@117.17.93.103:1521:orcl";
  String username="scott";
  String passwd = "tiger";
  
  //쿼리문 하나 만듦.
  String sql = "select * from customers";
  Connection con = null;
  Statement st = null;
  ResultSet rs = null;   //finally에서 사용하기 위해 Connection ~ ResultSet까지의 객체를 try~catch문 밖에 선언
  try {
   //[1.JDDB드라이버 로드]
   Class.forName("oracle.jdbc.driver.OracleDriver"); //예외처리
   
   //[2. 데이터 베이스 연결.. 드라이버 연결(connection 얻어오는 작업)]
   con = DriverManager.getConnection(url, username, passwd); //예외처리
   
   //3. Statement 생성 
   st = con.createStatement();
   //statement객체 쿼리를 담을 수 있는 객체, 쿼리를 제공하는 메소드가 담겨져 있는 클래스
   
   
   //4.SQL문 전송
   rs = st.executeQuery(sql);
   //쿼리한 결과가 ResultSet으로 반환됨.
   
   //5. 결과 받기
   //resultset은 처음에는 컬럼명에 있음..
   //rs의 위치는  rs-> name       phone           address
   //      rs.next()이순신    010-2222-1111     서울시 노원구 중계동
   //다음줄로 넘길려면 rs.next()
   System.out.println("customers 테이블 정보");
   System.out.printf("%-10s %-16s %-30s\n", "  이름", "|     전화번호", "|       주소");
   System.out.println("-----------------------------------------------------");
   while(rs.next()){
    System.out.printf("%-10s %-16s %-30s\n",
      rs.getString("name"), rs.getString("phone"), rs.getString("address"));
    //컬럼 이름으로 준것, index로 줘서 rs.getString(1) 도 동일
    //rs.getString(2)
    //rs.getString(3)
   }
   System.out.println("-----------------------------------------------------");
      
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally{
   //6. 연결끊기(해제) (가장 마지막에 만들어진 객체 부터.. 닫아줌)
   if( rs != null) try { rs.close();} catch (SQLException e) { e.printStackTrace();}
   if( st != null) try { st.close();} catch (SQLException e) { e.printStackTrace();}
   if( con != null) try { con.close();} catch (SQLException e) { e.printStackTrace();}
   
  }
 }
}
[console]
customers 테이블 정보
  이름       |     전화번호       |       주소                   
-----------------------------------------------------
김영숙        010-1112-2222    서울시 노원구 중계동                  
홍길동        010-2222-2222    서울시 노원구 중계동                  
이순신        010-3333-2222    서울시 노원구 중계동                  
장동건        010-4444-2222    서울시 노원구 중계동                  
-----------------------------------------------------



* 데이터 베이스 연결
- Connection conn = DriverManger.getConnection(JDBC_url, "아이디", "비밀번호");
- JDBC_URL 구성 = JDBC:orcle:thin:@IP주소:포트:SID
- 엑세스 DB인 경우 = JDBC:odbc:song

*statement 생성 및 쿼리 실행
- Statement 객체 생성후 SQL 문장을 변수 처리부와 함께 문자열로 구형
- 쿼리가 복잡해 질수록 성능저하 및 관리에 어려움이 있음
 //Statement객체 : 쿼리를 담는 객체 (가장 간편히 사용) static한 string을 받아서..(변동이 없는 쿼리물을 담음)
 //PreparedStatement (satement객체 상속받음) 쿼리문이 계속 바뀌는 경우
//CallofStatement(preparedStatement 객체 상속받음) 아주~~ 성능이 좋아야 하는 경우, 쿼리문을 DB가 갖고 있음.
                                                                          (쿼리문을 db에 proceduer로 등록시킴..)
-Statement stmt = conn.createStatement();
 쿼리 - 데이터변경 : executeUpdate()
       - 데이터읽기: executeQury()

*PreparedStament생성 및 쿼리 실행(insert나 add같은 경우)
 - PreparedStatement 객체 생성시 SQL 문장을 미리 생성하고 변수 부는 별도의 메서드로 대입하는 방식으로 성능과 관리 면에서 모두 권장되는 방식임
PreparedStatement pstmt = conn.prepareStatement("insert into test values(?,?)");
pstmt.setString(1,request.getParameter("username");
pstmt.setString(2,request.getParameter("email");
pstmt.executeUpdate();


* 결과받기
 ResultSet rs = pstmt.executeQuery();
- ResultSet은 커서 개념의 연결 포인터
- 기본적으로 next()메서드를 통해 로우 이동


* 연결해제
  - Connection 을 close()해 주지 않으면 사용하지 않은 연결이 유지됨
  - DB 자원을 낭비하게 됨. conn.close();
   


>customers에 insert하고, select * from customer 한것.. (sql문을 두개 사용)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class DBTest {
 public static void main(String[] args) {
  
  //DB는 전부다 1521 포드로 연결
  //jdbc:oracle:thin:@117.17.93.103:1521:orcl
  String url = "jdbc:oracle:thin:@117.17.93.103:1521:orcl";
  String username="scott";
  String passwd = "tiger";
  
  String sql2 = "insert into customers values(?,?,?)";
  String sql = "select * from customers";
  Connection con = null;
  PreparedStatement st = null;
  PreparedStatement st2 = null;
  ResultSet rs = null;   //finally에서 사용하기 위해 Connection ~ ResultSet까지의 객체를 try~catch문 밖에 선언
  try {

   //[1.JDDB드라이버 로드]
   Class.forName("oracle.jdbc.driver.OracleDriver"); //예외처리
   
   //[2. 데이터 베이스 연결.. 드라이버 연결(connection 얻어오는 작업)]
   con = DriverManager.getConnection(url, username, passwd); //예외처리
   
   //3. PreparedStatement 생성
   st2 = con.prepareStatement(sql2); //sql문 넘겨받음
   st2.setString(1, "흐흐흐3"); //자바문법이기 때문에 표시를 " " 로 해 주어야
   st2.setString(2, "010-1234-5678");
   st2.setString(3, "서울시 몽땅 우리집");
   st2.executeUpdate();
   //새로운 레코드를 추가

   st = con.prepareStatement(sql); //sql문 넘겨받음
   rs = st.executeQuery(); //이미 쿼리문을 st가 갖고 있기에 (sql)할 필요 없다.
   //쿼리한 결과가 ResultSet으로 반환됨.
   
   //5. 결과 받기
   //resultset은 처음에는 컬럼명에 있음..
   //rs의 위치는  rs-> name       phone           address
   //      rs.next()이순신    010-2222-1111     서울시 노원구 중계동
   //다음줄로 넘길려면 rs.next()
   System.out.println("customers 테이블 정보");
   System.out.printf("%-10s %-16s %-30s\n", "  이름", "|     전화번호", "|       주소");
   System.out.println("-----------------------------------------------------");
   while(rs.next()){
    System.out.printf("%-10s %-16s %-30s\n",
      rs.getString("name"), rs.getString("phone"), rs.getString("address"));
    //컬럼 이름으로 준것, index로 줘서 rs.getString(1) 도 동일
    //rs.getString(2)
    //rs.getString(3)
   }
   System.out.println("-----------------------------------------------------");
      
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally{
   //6. 연결끊기 (가장 마지막에 만들어진 객체 부터.. 닫아줌)
   if( rs != null) try { rs.close();} catch (SQLException e) { e.printStackTrace();}
   if( st != null) try { st.close();} catch (SQLException e) { e.printStackTrace();}
   if( con != null) try { con.close();} catch (SQLException e) { e.printStackTrace();}
   
  }
 }
}


customers 테이블 정보
  이름       |     전화번호       |       주소                   
-----------------------------------------------------
김영숙        010-1112-2222    서울시 노원구 중계동                  
홍길동        010-2222-2222    서울시 노원구 중계동                  
이순신        010-3333-2222    서울시 노원구 중계동                  
장동건        010-4444-2222    서울시 노원구 중계동                  
kim        111-1111-1111    서울시 강북                       
하하하        010-1234-5678    서울시 몽땅 우리집                   
호호호        010-1234-5678    서울시 몽땅 우리집                   
흐흐흐        010-1234-5678    서울시 몽땅 우리집                   
흐흐흐2       010-1234-5678    서울시 몽땅 우리집                   
흐흐흐3       010-1234-5678    서울시 몽땅 우리집                   
-----------------------------------------------------
Statement 객체  //사용할 때 쿼리문을 준다.
Statement st = con.createStatement();
st.executeQuery("select * from customer");   //쿼리문은 쿼리 할 때 들어감
//st.executeUpdate("insert....   delete... update...);

PreparedStatement 객체  : 객체를 만들때 쿼리문을 줌
PreparedStatement ps = con.prepareStatment("select ~~~~ ");
ps.executeQuery();  //argument없이
ps.executeUpdate(); //처음에 con.prepareStatement(" ") 할때 insert, delete, update가 들어간 경우..

만약
PreparedStatement ps = con.prepareStatment("insert into table values(?, ?, ?)");
ps.setInt(1,100);
ps.setString(2, "kdkdkd");
ps.executeQuery();





>Prepared Statement 이용하여 데이터 추가하기 (코드)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBTest {
 public static void main(String[] args) {
  
  //DB는 전부다 1521 포드로 연결
  //jdbc:oracle:thin:@117.17.93.103:1521:orcl
  String url = "jdbc:oracle:thin:@117.17.93.103:1521:orcl";
  String username="scott";
  String passwd = "tiger";
  
  String sql = "insert into customers values(?,?,?)";
  Connection con = null;
  PreparedStatement st = null;
 

  try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   con = DriverManager.getConnection(url, username, passwd); 

   st = con.prepareStatement(sql); // prepareStatement 객체는 만들때 argument를 받는다.
   st.setString(1, "이름1");
   st.setString(2, "전화번호111");
   st.setString(3, "주소2222");
   st.executeUpdate();   //st.execute()해도 됨... 차이는
   //excupteUpdate 하면 integer값이 반환되고,
   //excute()하면 boolean이 반환됨
   
   
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally{
   //6. 연결끊기 (가장 마지막에 만들어진 객체 부터.. 닫아줌)
   if( st != null) try { st.close();} catch (SQLException e) { e.printStackTrace();}
   if( con != null) try { con.close();} catch (SQLException e) { e.printStackTrace();}
   
  }
 }
}

Quantun DB 에 가보면 제대로 insert 된 것을 확인할 수 있다.




>이름이 홍길동인 row 검색..
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBTest {
 
 public static void main(String[] args) {
  
  //DB는 전부다 1521 포드로 연결
  //jdbc:oracle:thin:@117.17.93.103:1521:orcl
  String url = "jdbc:oracle:thin:@117.17.93.103:1521:orcl";
  String username="scott";
  String passwd = "tiger";
  
  String sql = "select * from customers where name like ?"; //쿼리문 수행
  Connection con = null;
  PreparedStatement st = null;
  ResultSet rs = null; //쿼리문 이기에 결과를 받아야 한다.
  
  try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   con = DriverManager.getConnection(url, username, passwd); 
   st = con.prepareStatement(sql); // prepareStatement 객체는 만들때 argument를 받는다.
   st.setString(1, "홍길동%");
   st.executeUpdate();  
   rs = st.executeQuery();
   System.out.println("실행결과");
   while(rs.next()){
    System.out.println(rs.getString(1) + " : " + rs.getString(2) +
      " : " + rs.getString(3));
   }
       
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally{
   //6. 연결끊기 (가장 마지막에 만들어진 객체 부터.. 닫아줌)
   if( rs != null) try { rs.close();} catch (SQLException e) { e.printStackTrace();}
   if( st != null) try { st.close();} catch (SQLException e) { e.printStackTrace();}
   if( con != null) try { con.close();} catch (SQLException e) { e.printStackTrace();}
   
  }
 }
}


실행결과
홍길동     : 010-2222-2222    : 서울시 노원구 중계동
name은 char(10)으로 정의되어 있으므로...
like와 "홍길동%"를 써줘야 .... 검색이 가능









DB만 전담하는 object를 만들자.
DAO(Database Access Object)
1) DB를 쓰고 싶으면 DAO를 통해서 하도록 하겠다.
(뒤에오는 DB의 규모가 얼마인지에 따라서 DAO의 규모를 한개로 할건지, 다중으로 할건지...)











Posted by Triany