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

(기초) JSP의 특징

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

JSP(JAVA Server page)의 특징

 

1)강력한 이식성 :

 

2)서버 자원의 효율적인 사용

  • 기존 CGI방식의 가장 큰 단점 중의 하나는 바로 프로세스 관리의 어려움으로 인한 서버 자원의 낭비였다고 볼수 있다. 사용자가 웹 서버에 요청을 보내면 서버는 각 요청 당 하난의 프로세스를 생성하고 해당 프로세스를 통해 결과를 생산하면 프로세스가 종료되는 구조를 가지고 있었기 때문이다.

-JSP는 이러한 문제점을 스레드(Thread)기반의 아키텍처(컴퓨터 시스템의 하드웨어 구조)를 사용하여 개선시켰다.

 즉, 최초의 요청이 웹 서버에 들어오면 서버는 그 요청에 맞는 JSP 페이지에 대한 서블릿 인스턴스(자바에서는 클래스로부터 만들어진 객체를 뜻함, 실제 사용 할수 있게 메모리에 생성된 객체를 인스턴스라고 하는 경향이 있다.)

 

3)간편한 MVC 패턴 적용

  • Model : 실제 비즈니스 로직이 들어가는 부분
  • View : 사용자에게 보여지는 화면
  • Controller : 서블릿, (디자인 패턴)

 

 

 

 

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

(기초) Web 애플리케이션의 구조

Web/Basic 2012. 5. 21. 11:41 Posted by Request

일반적인 웹 애플리케이션은 클라이언트/서버 방식으로 이루어진다.

 

클라이언트는 사용자의 요청을 뜻한다.

 

서버

웹서버 : 사용자의 요청을 받아들이고 결과 페이지를 전송담당

애플리케이션서버 : 사용자의 요청을 실질적으로 처리할수 있는 비즈니스 로직 구현담당.

이러한 웹 애플리케이션의 구조3-tier(티어)구조라 한다.

 

 

 

 

 

출처 : [ jsp 2.2&servlet3.0(오정원지음) 내용입니다. ] & 구글링 이미지 검색

executeQuery() 와 executeUpdate() 사용 정리

Web/JSP 2012. 5. 18. 16:11 Posted by Request

executeQuery() : 결과 값이 발생하여 값을 받아 와야 할때 사용한다.

-select

 

executeUpdate() : 결과 값을 받아 올 필요가 없을 때 사용한다.

-insert, update, delete

 

 

 

 

prepareStatement 와 createStatement 차이점.

Web/JSP 2012. 5. 18. 14:20 Posted by Request

prepareStatement

prepareStatement는 dynamic parsing으로 sql문을 parsing한 후 입력된 해당 값을 parsing된 sql문에 binding하여 실행한다.

dynamic parsing은 sql문을 먼저 parsing하여 입력되는 값이 여러개 일 경우 sql문을 여러번 parsing하지 않고 parsing된 sql문에 원하는 값을 binding하여 사용하므로 자원의 낭비가 적다.

prepareStatement사용 시 PreparedStatement를 사용하여 sql문에 필요한 데이터를 입력 받고 실행 시 발생한 데이터를 ResultSet에 저장한다.

장점 : 값의 binding없이 sql문 만을 parsing하므로 parsing된 sql문의 재사용이 용의하여 자원이 낭비으며 인젝션으로 인한 피해를 줄일 수 있다.

단점 : 무겁다.

 

createStatement

creatStatement는 static parsing으로 sql문을 parsing할 때 입력된해당 값을 sql문에 binding하여 같이 parsing하여 실행한다.

static parsing은 sql문과 입력된 값을 함께 파싱 하므로 한번 parsing된 sql문을 다른 데이터를 입력하여 사용할 수 없어 해당 서비스에 사용자 수가 많은 경우 메모리 full이 발생할 수 있다.

createStatement사용 시 Statement를 사용하여 sql문에 필요한 데이터를 입력 받고 실행 시 발생한 데이터를 ResultSet에 저장한다.

장점 : 가볍다

단점 : parsing된 sql문 사용 시 입력된 값이 다를 경우 재사용할 수 없으며 자원의 낭비가 발생할 수 있다.

인젝션으로 인한 피해가 발생할 수 있다.

 

 

 

 

정리 :

prepareStatement 

:dynamic sql parsing 으로 sql문의 재사용이 용의하나 무겁다는 단점이 있다.

 

createStatement

:static sql parsingd 으로 한번 파싱된 sql문의 데이터값이 다를 경우 재 사용 할수 없으며,

해당 서비스에 사용자 수가 많을 경우 메모리 full이 발생 할수 있다.

가겹다는 장점이 있다.

 

 

공통 : 입력 받고 실행으로 발생한 데이터를 ResultSet로 저장한다.

 

 

테일러링과 SPM의 정리

Web 2012. 4. 26. 14:48 Posted by Request
테일러링이란?프로젝트의 특성에 따라 각 산출물의 적용여부 및 변경 여부를 체크하고 변경시에는 사유와 변경 문서명을 기재하는 작업을 말한다.

프로세스 테일러링 (Process Tailoring) 서로 다른 개발 환경하에서 개발되는 다양한 종류의 프 로젝트에 일관된 하나의 개발 프로세스를 적용하기 어 렵기 때문에 프로젝트의 특성에 적합한 프로세스를 적 용해야 하는데, 이를 위해 프로세스를 수정하는 과정을 의미한다.

SPM : 표준 및 절차 메뉴얼 (Standard and Procedure Manual)

프로젝트 수행과정에 필요한 작업 표준, 절차를 기술한 것으로 업무 추진시에 중요한 가이드 역할을 하게 됩니 다.

JSP setContentType 메소드와 MIME 타입

Web/JSP 2012. 4. 23. 20:05 Posted by Request

[JSP setContentType 메소드와 MIME 타입]

setContentType(String) : MIME 타입을 지정합니다. 캐릭터의 인코딩을 지정할 수도 있습니다.

예) response.setContentType("text/xml"); // MIME 타입만 지정
response.setContentType("text/xml;charset=utf-8"); // MIME 타입 지정, 캐릭터의 인코딩 지정

 쉽게 말해서 웹서버는 브라우저로 전송될 페이지가 html 인경우 text/html을 표준 MIME 타입으로 지정합니다.

그러나 필요에 의해서 이 MIME 타입을 변경하고자 할 경우나 또는 캐릭터의 인코딩셋을 변경하고자 할때 setContentType 메소드를 사용할 수 있습니다. 브라우져는 이 MIME 타입을 확인하고 어떤 파일의 스트림(stream)인 줄 알 수 있습니다.

MIME 타입들...

text/html
audio/mpeg
image/bmp
image/jpeg
application/pdf
application/java
application/jar
application/x-zip
application/msword
application/msaccess
application/vnd.ms-excel
application/vnd.ms-powerpoint
application/octet-stream

위의 MIME 타입에서 맨 마지막에 굵게 표기되어 있는 octet-stream 이라는 놈은 이름 그대로 8비트 바이너리 배열을 의미하며 http나 이메일상에서 application 형식이 지정되지 않았거나 형식을 모를때 사용합니다. 결국 브라우저는 octet-stream 으로 MIME 타입이 지정된 경우 단지 바이너리 데이터로서 다운로드만 가능하게 처리하게 됩니다.

 

즉, setContentType 메소드가 제일 먼저 호출되고 getOutputStream과 같은 출력 스트림 메소드가 사용되어져야 합니다.

response.setContentType("application/octet-stream");

//... 중간생략
//... 중간생략

byte[] bytestream = new byte[(int)file.length()];
filestream = new FileInputStream(file);

int i = 0, j = 0;
while((i = filestream.read()) != -1) {
bytestream[j] = (byte)i;
j++;
}
outStream = response.getOutputStream();
outStream.write(bytestream);

출처 : http://www.webmadang.net/develop/develop.do?action=read&boardid=1004&page=1&seq=107

java.lang.ClassCastException:

org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

 

HttpServletReuest를 MultipartHttpServletRequest로 형변환하려고 할때 나타나는 에러메시지
MultipartHttpServletRequest multipartRequest =
(MultipartHttpServletRequest) request; 

     form에서 보낼때 multipart가 아닌것을 보내 놓고 변환하려고 하냐? 뭐이런 맨트 같다..
<form action="" method="post"> <--만약 form이 이렇게 되어 있으면. encType="multipart/form-data" 요것 추가
<form action="" method="post" encType="multipart/form-data">

 

 

출처 : http://www.a3040.com/bbs/board.php?bo_table=Jsp&wr_id=27

private String uploadPath;

 

//싱글톤 타입인가?  패스에 대한 경로 재 저장

public void setUploadPath(String uploadPath){

this.uploadPath = uploadPath;

}

//request 에서 attFile이라는 input name을 찾아 MultipartFile 클래스 변수에다가 담아둔다.

MultipartFile uploadFile = (MultipartHttpServletRequest) request).getFile("attFile");

 

//업로드 파일명 변수 선언

String originalFileName = uploadFile.getOriginalFilename();

 

//요놈은 머징?현재 시간 저장인가?

long currentTimeMillis = System.currentTimeMillis();

 

//소문자로 확장자명 저장

String lastName = originalFileName.substring(originalFileName.lastIndexOf(".")).toLowerCase();

 

String saveName = currentTimeMillis + "_" + lastName;

 

 

 

if(lastName.equals(".hwp") || lastName.equals(".doc") || lastName.equals(".pdf") || 
    lastName.equals(".xls") ||  lastName.equals(".gif") ||   lastName.equals(".jpg")){

 

/*

File.separator     = 

시스템마다 경로를 나타내는 구분자가 다르게 존재한다.

윈도우는 \으로 구분하지만 유닉스는 / 로구분하는 등 업로드나 다운로드시 이렇게 작성하면 File.separator부분에 \나 /가 들어간다는 간다.

*/

 

File fileToCreate = new File(uploadPath + FIlie.separator + "temp");
 

//폴더가 없을시 생성

if(fileToCreate.exists() == false){

fileToCreate.mkdirs();

}

 

//무복사 타입(DB -> Read 버퍼 -> socket 버퍼 -> NIC 버퍼 사용)

uploadFile.transferTo(new File(uploadPath + File.separator + saveName));

 

 

Map params= new HashMap();

params.put("file_nm", saveName);

params.put("file_path", uploadPath);

params.put("file_type", lastName);

 

boardDao.write(params);

.

.

.

 

 

 

jstl 태그 처리

Web/JSP 2012. 4. 10. 19:04 Posted by Request

replace 로 할려다가  <> 태그에 대한 추가를 해야 되서 검색을 하다보니

 

요놈을 쓰니 된다.

 

ㄱㄱ ㅑ~ 좋다! escapeXml="true"로 하면 된다.

 

 

 

 

<c:out value="${list.TITLE}" escapeXml="true" default="defaultValue" />