response.setContentType("text/html;charset=euc-kr");

PrintWriter out = response.getWriter();

....

 

respnse 변수에 대해 설명을 드리자면, Servlet의 doGet 혹은 doPost 함수의 파라미터로 response변수를 만들어 놓았을 것입니다.

response 변수에 실제 객체를 할당해주는 것은 servlet container가 알아서 해주기 때문에 개발자는 신경을 쓸 필요가 없습니다.

 

 보통 어떠한 Servlet으로 요청이 들어오게 되면, 그 요청을 파악을 해서 어떠한 응답을 클라이언트로 보내야하는지에 대한 분석이 이루어집니다.

 

흔히 클라이언트로부터 Servlet으로 요청이 들어오게 되면, 요청 파라미터라는 것이 같이 오게 되는데,

이것에 대한 분석은 request.getParameter("")이런한 식으로 파악을 하게 됩니다.

 

요청을 파악했으면, 클라이언트로 내보낼 응답을 작성해야 합니다.

대부분의 웹 프로그래밍은 응답을 텍스트로 작성하며, 이 텍스트는 대부분 HTML 페이지의 모양을 하고 있게 됩니다.

 

여기서 응답으로 텍스트를 기록해야하는데, 이때 스트림이라는 개념이 나옵니다.

그대로 데이터의 흐름이라고 보시면 됩니다.

 

Servlet에서는 클라이언트 쪽으로 보내는 데이터의 흐름을 건드려야 할 필요가 있습니다.

 

 위에서 언급했던 response 변수를 활용하면 응답과 관련된 많은 작업들을 수행 할수 있습니다.

응답 스트림에 텍스트를 기록하는 것도 가능하며, 이 작업을 하기 위해서 response.getWriter()를 호출해야 합니다.

 

보통 스트림에는 바이너리 기반의 스트림과 텍스트 기반의 스트림이 있습니다.

보통 바이너리 기반의 스트림은 InputStream(입력), OutputStrream(출력)이라는 것으로 끝나고,

텍스트 기반의 스트림은 reader(입력), Writer(출력)로 끝납니다.

 

언급했듯이 Servlet으로 들어온 요청은 대체로 텍스트(HTML)로 응답을 보내기 때문에,

 

PrintWriter out= response.getWriter(); 형식으로 응답으로 내보낼 출력 스트림을 얻어낸 후,

out.println("<script>"); 이런 식으로 스트림에 텍스트를 기록하게 됩니다.

 

출처 :

http://blog.naver.com/PostView.nhn?blogId=min_sub&logNo=80069919296&parentCategoryNo=20&viewDate=&currentPage=1&listtype=0

 

 

 

 

getParameter와 getAttribute의 차이점

Web/JSP 2012. 6. 12. 13:38 Posted by Request

getParameter와 getAttribute의 차이점이 궁금했다.

정확히 설명해주는 곳도 없어 네이버에게 물어보니

 

 

 

getParameter는 Servlet 또는 Jsp에서 파라미터로 넘어온 데이터를 가져다가 사용할때 사용한다.

 

그리고 getAttribute는 사용자가 임의적으로 추가해둔 데이터를 가져올 때 많이 사용된다.

 

set getAttribute는 Object 형식으로 넣을 수 있기 때문에 단순히 String형식이 아닌 기타 객체의 타입을 넣어서 역활을 합니다.

 

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

딱히 어떨때 써야 할지 감이 오지 않는다.

 

 

 

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>

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

 

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

이클립스 글씨체 (추천)

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(오정원지음) 내용입니다. ]