JNDI 연결 시 문제

Web/JSP 2012. 5. 25. 15:14 Posted by Request

환경설정 :

톰캣 : 6.0

jdk : 1.6

oracle : 10g

-ojdbc5.jar

 

META-INF/context.xml Cannot create JDBC driver of class '' for connect URL 'null'

 

Connection Exception 발생..

책에 있는 내용 그대로~ 해봤지만 왜 안되나 구글링과 인맥을 통해서 얻은 결론은...

 

 

 

1)WEB-INF 에 Context.xml  생성

<Context>

<Resource name="jdbc/OracleDB"
    auth="Container"
    type="javax.sql.DataSource"
    username="scott"
    password="tiger"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory"
    url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
    removeAbandoned="true"
    removeAbandonedTimeout="60"
    logAbandoned="true"
    maxActive="500"
    maxIdle="100"/>

</Context>

2)WEB-INF 의 web.xml

<resource-ref>
<description>Connection</description>
<res-ref-name>jdbc/OracleDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

 

3)Servers의 톰캣 프로젝트에서 server.xml 설정

<GlobalNamingResources>

...

<Resouce  name="jdbc/OracleDB"
    auth="Container"
    type="javax.sql.DataSource"
    username="scott"
    password="tiger"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory"
    url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
    removeAbandoned="true"
    removeAbandonedTimeout="60"
    logAbandoned="true"
    maxActive="500"
    maxIdle="100"/>

</GlobalNamingResources>

 

 




4) $CATALINA_HOME\conf\context.xml

<Context>

...

<ResourceLink global="jdbc/OracleDB" name="jdbc/OracleDB" type="javax.sql.DataSource"/>

</Context>

5) $CATALINA_HOME\conf\web.xml

<web-app>

...

<resource-ref>

<description>DB Connection</description>

<res-ref-name>jdbc/OracleDB</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

</web-app>

=================================================

 

됐다가 다시 안된다... 간만에 하루치 삽질 중.....

(Oracle)오라클 SID 중복 regedit 제거법

DB/Oracle 2012. 5. 24. 16:58 Posted by Request
1.Windows 계열일 경우
이경우 레지스트리에 등록된 SID를 지우셔야 할겁니다.
제가 찾아본것으로는 아래 레지스트리를 지우시고
다시 DB를 생성하시면 될듯합니다.
\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID\SID
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleServiceSID
이두가지를 지우시면 될듯합니다.
여기서 SID는 예전에 설치하셨을때 사용하신 SID겠죠..
이게 남아있으면 같은 SID로 다시 DB를 만들수 없습니다.


2.Unix계열(리눅스도 포함)
보통 SID는 oratab이란 파일에 저장되는데
이파일은 시스템마다 조금씩 틀리지만
/etc, /var/opt/oracle 밑에 존재합니다.
그냥 이파일을 지우시던지...아니면
편집하셔서 기존에 설치하셨던 SID 리스트를
지우시면 됩니다.
10g에서는 $ORACLE_HOME/install 밑에 있습니다.

 

 

 

 

출처 :http://cmsyko.egloos.com/5305796

이클립스 글씨체 (추천)

Web/Basic 2012. 5. 23. 13:52 Posted by Request

courier New

 

windows/fonts/

에서

 

숨겨져 있는 것을 표시로 바꾼후 설정하면 된다.

 

나눔고딕보다 훨씬 잘 보인다.

(기초) 썸네일 이미지

Web/Basic 2012. 5. 23. 11:22 Posted by Request

1)JAI(Java Advanced Imaging) API 개요

- http://www.oracle.com/technetwork/java/current-142188.html

(java advanced imaging 1.1.3 다운로드)

 

2)cos.jar 라이브러리 추가

-http://www.servlets.com

> com.oreilly.servlet (링크 클릭)

> cos-26Dec2008.zip (다운로드)

 

 

 

 

 

 

(소스)

thumbnailForm.jsp
<center>
<h3>썸네일 이미지 폼 예제</h3>
<form action ="thumbnail.jsp" method="post" enctype="multipart/form-data">
이미지 : <input type="file" name="filename"/><p>
<input type="submit" value="전송"/>
</form>
</center>

 

 

 

 

thumbnail.jsp

String imagePath = request.getRealPath(\\image);  //프로젝트 내 가상경로 패스

 

int size = 1*1024*1024;

String filename = "";

 

MultipartRequest multi = new MultipartRequest(request, imagePath, size, "euc-kr", new DefaultFileRenamePolicy());   // 중복된 파일이 있을 경우 새이름으로

 

Enumeration files = multi.getFileNames();   //Enumeration 파일 객체 생성

 

String file = (String)files.nextElement(); //해당되는  파일

filename = multi.getFilessystemName(file);  //해당 파일명

 

ParameterBlock pb = new ParameterBlock();    //작업공간 객체 생성

pb.add(imagePath+"/sm_"+filename);             //작업공간에 새이름으로 썸네일 생성

RenderdOp rOp=JAI.create("fileload",pb);      //PlanarImage클래스 상속, 이미지에 방금수행된 연산의 정보를 포함.

JAI.create("fileload",pb)로부터 RendereOp객체가 리턴이 되면 RenderedOp 클래스의 planarImage클래스의 getBufferedImage() 메소드로부터 BufferedImage 객체를 얻어 올수 있다. BufferedImage객체를 사용해서 메모리에 이미지를 생성한 후 그 이미지를 화면에 표출할수 있고, 파일로 저정 가능하다.

 

BufferedImage bi  = rOp.getAsBufferdImage();

BufferedImage thumb=new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);

 

Graphics2d g = thumb.createGraphics();

g.drawImage(bi,0,0,100,100,null);

 

File file = new FIle(imagePath+"\sm_"+filename);

ImageIO.write(thumb,"JPG",file);

 

 

-원본 이미지 <br>

<img src="../image/<%=filename%>">

<p/>

-썸네일 이미지<br>

<img src="../image/sm_<%=filename%>">

 

 

 

(기초) 서블릿으로 세션의 살펴보기

Web/Basic 2012. 5. 22. 11:04 Posted by Request

1.세션의 개념

HTTP프로토콜의 특징 중의 하나는 상태를 유지하지 않는다는 것이다.

즉, 클라이언트가 한번 요청을 하고 서버에서 응답을 하면 HTTP프로토콜은 상태를 유지하지 않는 속성이 있기 때문에 첫 번째 요청을 한 클라이언트임을 인식하지 못한다.

이를 보완하기 위한 방법이 바로 세션이다.

 

쿠키세션 아이디를 저장하여 클라이언트가 다시 요청을 하면 세션 아이디요청에 같이 전송된다.

 

 

 

(기초)servlet 설정하기

Web/JSP 2012. 5. 21. 18:09 Posted by Request

1.servlet-api.jar 파일 복사하기

 -톰캣 설치된 폴더에 servlet-api.jar 파일을 복사하여 개발되는 해당 프로젝트 lib폴더에 복사하든가, 프로젝트에 사용되는 java 빌드(Bulid)의 폴더 lib경로에 복사하여 추가한다.

 

ex)D:\apache-tomcat-6.0.35\apache-tomcat-6.0.35\lib

 

 

2.톰캣에서 Servlet 서블릿과 JSP 파일 동작 확인하기

이클립스 실행 > 다이나믹 웹 프로젝트 생성 > servlet 생성(new > servlet 선택) >

 

 

<servletTest.java>

response.setContentType("text/html");

response.setCharacterEncoding("euc-kr");

 

//Calendar 클래스 객체 선언

Calendar c= Calendar.getInstance();

 

 

int hour   = c.get(Calendar.HOUR_OF_DAY);

int minute = c.get(Calendar.MINUTE);

int second = c.get(Calendar.SECOND);

 

PrintWriter out= response.getWriter();

 

out.write("<HTML><HEAD><TITLE>ServletTest</TITLE>");

out.write("<BODY><H1>");

out.write("현재시각은");

out.write(Integer.toString(hour));

out.write("시");

out.write(Integer.toString(minute));

out.write("분");

out.write(Integer.toString(second));

out.write("초입니다.");

out.write("</H1></BODY></HTML>");

out.close();

 

 

<web.xml>

<servlet>

<servlet-name>ServletTest</servlet-name>

<servlet-class>kr.com.test.ServletTest</servlet-class> <!-- 해당 서블릿 생성한 경로를 적어준다.-->

</servlet>

 

<servlet-mapping>

<servlet-name>ServletTest</servlet-name>

<url-pattern>/ServletTest</url-pattern>

</servlet-mapping>

 

출처 : [ jsp 2.2&servlet3.0(오정원지음) 내용입니다. ]

 

 

 

 

(기초) 서블릿의 동작 원리

Web/Basic 2012. 5. 21. 17:25 Posted by Request

서블릿의 동작 원리

 

1. 사용자의 URL 요청

-어떤 사용자의 URL 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹 서버 측에 URL과 서블릿 클래스를 미리 매핑시켜 놓은 배포 서술자가 필요하다.

 

배포서술자(Deployment Descriptor) : 웹서버가 알아 챌 수 있도록 적어 놓은 파일(web.xml)

 

 

2. request, response 객체 생성

-웹 컨테이너는 일단 지금 받은 요청을 처리하기 위해 HTTP 요청(Request)을 처리하기 위한 request 객체와 HTTP 응답(Response)를 위한 response 객체를 생성한다.

 


3.서블릿 인스턴스와 스레드 생성

-request, response 객체가 생성된 뒤 사용자의 URL 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자를 통해 알아낸다.

만일 그 클래스가 웹 컨테이너에서 한 번도 실행된 적이 없거나 현재 메모리에 생성된 인스턴스(프로세스)가 없다면 새로 인스턴스를 생성하고(메모리에 로드하고) init()메소드를 실행하여 초기화 한 뒤 스레드를 하나 생성한다.

 

이미 인스턴스가 존재할 경우에는 새로 인스턴스를 생성하지 않고 기존의 인스턴스에 스레드만 하나 새로 생성한다.

각 서블릿 인스턴스는 웹 컨테이너당 하나만 존재하기 때문에 init() 메소드는 각 서블릿 당 한 번씩만 호출된다.

 

4.service() 메소드 호출과 서블릿 클래스 실행

-스레드가 생성되면 각 스레드에서 service() 메소드가 호출된다.

service()메소드가 호출되면 HTTP요청 방식이 GET방식일 경우에는 서블릿 클래스의 doGet()메소드가,

POST방식일 경우에는 doPost()메소드가 request, response 객체를 인자로 자동으로 호출된다.

 


 

5.응답과 스레드의 소멸

doGet() 또는 doPost() 메소드가 호출되어 사용자의 요청에 따른 동적인 웹 페이지를 생성하면 그 결과물이 담긴 reponse 객체를 웹 컨테이너가 HTTP 응답(Response) 형태로 바꾸어 웹 서버로 전송하게 된다.

그리고 사용이 끝난 Request와 Response 객체를 소멸시키고 스레드를 종료하게 된다.

 

 

 

클라이언트  -->   1.http://www.servlet.com/servlet요청      -->   

 웹 서버   -->   2.요청된 서블릿 확인 후 컨테이너로 요청   -->

컨테이너  -->

  3.컨테이너에서 request와 response 생성 후 web.xml(배포서술자)을 참조하여 해당 서블릿의 스레드 생성 후 service 메소드 호출

 

  4.service() 메소드에서는 요청 방식에 따라 doGet이나 doPost() 메소드 호출

  5.doGet() 이나 doPost() 메소드에서 응답 생성                         

 

 

 

출처 : [ jsp 2.2&servlet3.0(오정원지음) 내용입니다. ]

(기초) 웹 컨테이너란?

Web/Basic 2012. 5. 21. 16:14 Posted by Request

『JSP와 서블릿을 사용한 웹 서버』는 크게  URL 주소의 해석을 맡아 주는 HTTP 서버서블릿 클래스 또는 JSP 파일의 실행 요청을 처리해주는 웹 컨테이너(Web Container)로 구성된다.

 

 

웹 컨테이너란?

웹서버의 내부에서 서블릿 클래스 또는 JSP 파일을 실행하기 위한 실행 환경을 제공하는 역할을 하며

특히

서블릿 클래스에 대한 웹 컨테이너를 서블릿 컨테이너,

JSP 파일에 대한 웹 컨테이너를 JSP 컨테이너라고 한다.

위와 같이 두 타입의 서블릿 컨테이너, JSP 컨테이너를 통칭하여 웹 컨테이너라 한다.

 

 

 

출처 : [ jsp 2.2&servlet3.0(오정원지음) 내용입니다. ]

(기초)HTTP 프로토콜의 이해

Web/Basic 2012. 5. 21. 16:02 Posted by Request

HTTP 프로토콜의 이해

 인터넷 통신에는 TCP/IP, FTP, SMTP,HTTP등 많은 종류의 프로토콜이 있다.

우리는 JSP와 서블릿을 사용한 웹프로그램밍을 작성할 때 사용하는 프로토콜이 HTTP프로토콜이므로 HTTP가 어떤 구조를 가지고 어떤 연관성을 지녔는지 알아보도록 하자.

 

프로토콜이란?

-데이터를 주고 받는 방법을 약속할 필요가 있는데 이것이 바로 프로토콜이다.

한마디로 컴퓨터 상호간의 대화에 필요한 통신 규약을 의미한다.

 

 

HTTP 프로토콜의 구조

-요청과 응답의 형태로 이루어졌다고 볼수 있다.

 

시작(요청)라인

시작(응답) 라인

헤더(Header)

(일반 헤더/요청 헤더)

 

헤더(Header)

(일반 헤더/응답 헤더)

본문(Body)

(요청 메세지)

 

본문(Body)

(응답 메세지)

HTTP 요청 메세지

 

HTTP 응답 메세지

 

 


HTTP 요청(Request) 메세지 구성

기본적으로 HTTP 메소드(Method)와 접근할 주소(URL) 정보 그리고 서버에 전달할 데이터인 폼 파라미터로 구성된다.

 

Get메소드, Post 메소드 사용 요청 및  HTTP 응답 정의  생략.

 

 

 

출처 : [ jsp 2.2&servlet3.0(오정원지음) 내용입니다. ]

(기초) Servlet의 개요

Web/Basic 2012. 5. 21. 15:36 Posted by Request

Servlet이란?

- 웹서버 상에서 실행되는 자바의 클래스 파일이라 할수 있다.

- 서블릿(Server Side Applet) 즉, 서버 사이드의 자바 응용 프로그램이란 뜻이다.

 

특징)

javax.servlet.Servlet을  인터페이스 구현해서 작성해야만 입력과 출력을 HTTP 프로토콜의 요청(Request)와 응답(Response)의 형태로 다룬다.

 

 

애플릿(Applet)이란: Panel을 상속하는 클래스로 웹브라우저에 담겨서 실행되는 작은 자바 응용프로그램을 말한다.

 

 

 

 

출처 : [ jsp 2.2&servlet3.0(오정원지음) 내용입니다. ]