Servlet 디렉토리 구조 생성 방법



1. Tomcat/webapps 디렉토리 밑에 새로운 애플리케이션(폴더)을 생성한다.

2. 새로운 애플리케이션 안에 WEB-INF, WEB-INF/classes, WEB-INF/lib 를 생성한다.

3. classes 안에는 컴파일한 class 파일을 넣는다.

4. lib 에는 각종 라이브러리 파일을 넣는다.

5. src 에는 작성한 코드파일을 넣는다.



 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

 Web Server

 Apache Tomcat 7.0.51


문제점

서블릿에서 DB 연결시 NullPointerException 발생하고 연결 실패.(이 문제 하나로 몇일을 삽질하였다...)

해결방안

서블릿은 JDBC를 Properties에서 가져오지 않는다. 서블릿의 디렉토리 구조안에 라이브러리 파일을 넣어야 하는데, 위치는 'WEB-INF/lib'에 넣어주면 된다.

이클립스에서 생성한 프로젝트에서는 WebContent/WEB-INF/lib 에 넣어준다.





참고 링크

 실행환경

 Notebook

 SAMSUNG NT550p5c-s61r

 CPU

 Intel Core i5-3210M 2.50GHz

 Memory

 8 GB

 OS

 Window 7 ultimate 64bit

 Java

 1.7.0_51

 WebServer

 Apache Tomcat 7.0


문제점

톰캣의 루트 경로를 바꾸는 방법에 대해서 알아보자.


해결방안

1. 먼저 변경할 루트폴더를 만든 후 기본 루트폴더에 있던 파일들(설정)을 모두 복사해 넣는다.

  • 기본 루트 폴더 : C:\Tomcat 7.0\webapps
  • 변경할 루트 폴더 : D:\website


2. 톰캣의 server.xml 파일에서 바꾼 폴더명을 넣어준다.

  • 파일 위치 : C:\Tomcat 7.0\conf
after

before

3. 톰캣을 구동하고 http://localhost:8090을 통해 확인하도록 한다.

(기본 포트는 8080이지만 오라클과 중복되므로 8090으로 변경한 상태이다)


추가 자료





인증 필요

서버 http://localhost:8080에 사용자 이름과 비밀번호를 입력해야 합니다. 서버 메시지:XDB


오라클 서버랑 포트가 겹치므로 톰캣의 포트를 수정한다. 이때 관리자 모드로 편집기을 실행한 뒤 수정하도록 한다.

파일은 톰캣이 설치된 경로의 conf폴더 안에 server.xml이다.

예) C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf\server.xml





▣ NumberFormat 클래스의 getNumberInstance() 사용


메서드를 만들고 오버로딩을 통해 편하게 사용할 수 있도록 한다.


<%@ page import='java.text.NumberFormat' %>

<%!

// 입력값에 컴마 찍어주기 long, int, String, double, float

// double은 소수점 3자리까지만.

// overloading

public String comma(long str1) {

NumberFormat nf = NumberFormat.getNumberInstance();

return nf.format(str1);

}

public String comma(String str1) {

if(str1 ==null || str1.equals(""))

str1="0"; 

int val = Integer.parseInt(str1);

NumberFormat nf = NumberFormat.getNumberInstance();

return nf.format(val);

}

public String comma(double str1) {

NumberFormat nf = NumberFormat.getNumberInstance();

return nf.format(str1);

}

%>


NumberFormat 클래스의 또 다른 메서드

NumberFormat.getPercentInstance() : 값을 %단위로 표시해준다.

ex) NumberFormat nf = NumberFormat.getPercentInstance();

nf.format(값);


 

 parameter로 한글을 입력 받을 때, utf-8로 변환시켜 깨지지 않게하는 함수

      // 한글을 변환하는 방법

String UStoKR(String str) throws Exception{
    String result = "";
    if (str == null || str.trim().equals("")) 

        result = null;
    else

        result = new String(str.getBytes("ISO-8859-1"), "utf-8");
    return result;

 

입출력 관련 기본 객체

객체

클래스 또는 인터페이스 

설 명 

request 

javax.servlet.ServletRequest 

파라미터를 포함한 요청 데이터 

 주로 파라미터와 쿠키를 처리할 때 많이 사용한다.

response 

javax.servlet.ServletResponse 

응답데이터 

헤더, 쿠키, 응답과 관련된 정보를 설정할 수 있는 방법을 제공한다.

out 

javax.servlet.jsp.JspWriter 

출력 스크림에 출력하는 객체 

결과를 클라이언트에 전송해주는 출력 스트림을 나타낸다. 

 

서블릿 관련 기본 객체

객체 

클래스 또는 인터페이스 

설명 

page 

java.lang.Object

현재 요청을 처리하는 객체 

 JSP 페이지 그 자체를 나타낸다.

config 

javx.servlet.ServletConfig

JSP 페이지의 ServletConfig 객체

 페이지의 초기화 부분에서 주로 사용된다.

 

콘텍스트 관련 기본 객체 

객체

클래스 또는 인터페이스 

설명 

session 

javax.servlet.http.HttpSession 

세션 객체 

 각 클라이언트의 현재 세션을 나타내며, 세션과 관련된 정보를 저장한다.

application 

javax.servlet.ServetContext 

서블릿의 config 객체로부터 구할 수 있는 서블릿 콘텍스트 

일반적으로 JSP 콘테이너는 URL에 있는 첫 번째 디렉토리 이름을 어플리케이션으로 사용한다. 

pageContext 

javax.servlet.jsp.PageContext 

이 JSP 페이지의 페이지 콘텍스트 

 모든 다른 기본 객체에 접근할 수 있다.

 

예외 처리 관련 기본 객체

 객체

클래스 또는 인터페이스 

설명 

 exception

java.lang.Throwable 

에러 페이지에서 사용되는 예외 객체 

page 디렉티브의 isErrorPage 속성의 값을 true로 지정한 경우에만 접근 가능하다.

 

 

JSP 태그

1. 디렉티브(Directive)

2. 스크립트 요소(Scripting elements)

3. 주석

4. 액션(Action)

 

1. 디렉티브(Directive)

 문서를 어떻게 처리할 것인지 나타내는 태그.

 페이지와 관련된 정보를 JSP 콘테이너에 보내는 일종의 메세지.

 

<%@ 디렉티브 속성1= "값1" 속성2="값2" ... %>

 

 디렉티브에는 page 디렉티브, include 디렉티브, taglib 디렉티브가 있다.

 page 디렉티브 : 페이지와 관련된 다양한 속성, 기능을 지정.

속성

값 

기본값 

language

스크립트 언어 이름

"java"

contentType

MIME 타입, 문자셋 

"text/html;

charset=ISO-8859-1" 

info 

문자열 

 

import 

클래스 또는 패키지 이름 

 

session

boolean 값 

"true" 

buffer 

버퍼의 크기 or false 

"8kb" 

autoFlush 

boolean 값 

"true" 

isThreadSafe 

boolean 값 

"true" 

errorPage 

로컬 URL 

 

isErrorPage 

boolean 값 

"false" 

extends 

클래스 이름 

 

 하나의 JSP 페이지에 여러 개의 page 디렉티브를 사용할 수 있지만, import 속성을 제외한 나머지 속성들을 같은 페이지에서 여러번 지정할 수 없다. => 중복 X

 

* contentType 속성

JSP 페이지가 생성하는 문서의 MIME(Multipurpose Internet Mail Extensions) 타입을 나타내는 데 사용.

JSP 페이지에서 사용하는 문자셋을 지정하는 데 사용.

 

* info 속성

페이지를 설명해주는 문자열, 일반적으로 제작자, 버전, 저작권 정보등을 포함시키는 것이 좋다.

 

* import 속성

자바를 스크립트 언어로 사용할 경우 자동적으로 java.lang, javax.servlet, javax.setvlet.http, java,setvlet.jsp 패키지를 import 한다.

 

* autoFlush 속성

버퍼가 다 찰 경우 어떻게 처리할 지를 지정한다. true이면, 출력 버퍼는 자동적으로 비워지고, 버퍼에 있던 내용을 요청한 웹 브라우저에 전송하기 위해서 HTTP 서버에 보내진다.

-> 만약 buffer 속성의 값이 "none"일 경우에는 "false"로 지정할 수 없다.

 

* errorPage 속성

catch하지 않은 에외가 발생할 경우, 보여줄 페이지 설정.

속성 값이 '/'로 시작하면 절대  URL, '/'로 시작하지 않으면 상대 URL을 나타낸다.

 

2. 스크립트 요소(Scripting elements)

선언부(declarations), 스크립트릿(scriptlet), 표현식(expressions)로 구성되어 있다.

 선언부(declarations)

 JSP 페이지에서 사용할 메소드와 변수를 정의. 같은 페이지 다른 스크립트 요소에서 참조 가능.

 

<%! 선언부 부분 %>

 

1) 변수의 선언

선언부에서 정의한 변수는 서블릿으로 변환할 때, 서블릿 클래스의 인스턴스 변수로 변환된다.

 <%!

    private int x = 0;

    private int x = 0;

    private String str = "opid";

    private static int sum = 0;  //인스턴스들이 공유하는 클래스 변수로 선언 가능.

%>

 

2) 메소드의 선언

변수와 메소드를 함께 선언할 수도 있다.

 <%!

    int cul(int x, int y){

        int sum = 0;

        sum = x + y;

        return sum;

    }

%>

 

3) JSP 페이지의 라이프사이클(Life-cycle)

초기화 이벤트나 소멸 이벤트가 발생할 경우 사용되는 메서드.

 <%!

    public void jspInit() {

        // 초기화 이벤트와 관련된 처리.

    }

 

    public void jspDestory() {

        // 소멸 이벤트와 관련된 처리.

    }

%>

 

 표현식 

선언부와는 달리 표현식의 결과를 문자열로 변경되어 출력 스트림에 추가한다. 

<%= expression %>

 스크립트릿

일반적인 목적으로 스크립트 언어를 사용할 수 있도록 해 주는 부분이다.

<% 스크립트릿 부분 %>

 

3. 주석

1) 내용주석    <!-- 주석 내용 -->

브라우저 화면에선 보이지 않지만 소스 보기를 통해서 확인할 수 있다.

내용 주석 안에 JSP 표현식을 포함할 수 있으며, 표현식의 값마다 다르게 생성되기 때문에 동적인 주석 내용을 만들수 있다.

 

2) JSP 주석    <%-- 주석 --%>

페이지가 생산하는 내용과는 상관없으며, 오직 JSP파일에서만 보여진다.

 

3) 스크립트 언어 주석    <% ... /* 주석 */ ... %>

자바의 '/*' 와 '*/', '//'를 사용하여 주석 처리를 할 수 있으며,

 스크립트릿이나 선언부 뿐만 아니라 JSP표현식에서도 주석처리 한다. JSP 콘테이너에 의해 완전히 무시되지 않으며, 변환된 서블릿 코드에 나타난다.

 

'Web > JSP(Java Server Page)' 카테고리의 다른 글

[JSP] 정수,실수,문자열에 콤마찍기 NumberFormat  (0) 2013.07.10
[JSP] 한글변환 메서드  (0) 2013.07.05
[JSP] 기본 객체  (0) 2013.06.28
[JSP] 기초, 개념  (0) 2013.06.27

JSP란

"Java Server Pages"로 자바 프로그래밍 언어를 기반으로 하는 웹 기본의 서버측 동적 문서 생성을 위한 템플릿 시스템이다.

 

태그 규약

스크립트 태그

XML 기반 태그 

선언부

표현식

디렉티브

스크립트릿

액션 태그

자바 빈 태그

커스텀 태그

스크립트 태그

JSP 스크립트 요소들을 표현하기 위해 사용.

'<%'로 시작하며 '%>'로 종료.

스크립트 태그 안에 기술되는 JSP 스크립트 요소들은 !, =, @ 등의 시작 기호에 따사 구분.

XML 기반 태그

XML의 구문과 규약을 따르는 태그를 사용한다는 의미.

 

* XML의 구문과 HTML 구문의 차이점.

1. XML은 대소문자를 구분.

2. 속성값은 반드시 따옴표로 묶어줌.

3. 몸체가 없는 태그는 '<'시작과 '/>'종료로 표현.

4. 각 요소를 표현하는 식별자를 사용(namespace) 

 

* JSP와 자바 스크립트의 차이점

1. 동적인 요소들이 실행되는 장소가 다름.

    JSP는 서버컴퓨터에서 실행되므로 예를들어 현재시간출력을 할때 서버컴퓨터의 시간이 출력된다.

2. 브라우저로 보내지는 웹페이지의 내용이 다르다.

    동적인 소스로 작성하더라도 웹에서 '소스보기'로 본다면 정적인 html과 같은 소스로 보여진다.

 

서블릿?

웹 서버에서 동적인 문서 생성을 위해 서블릿 콘테이너에 의해 실행될 수 있는 자바 프로그램.

 

세션?
클라이언트와 서버간에 연결의 지속성을 인정하고 유지하는 상태.

-> JSP는 일정 시간동안 하나의 웹 서버에 대한 한 명의 사용자로부터의 모든 요청을 일련의 연속 과정으로 간주하며 이것을 세션이라 함.

+ Recent posts