05 JSP 액션 태그

● 액션태그의 개요

○ 형태

<jsp:태그 이름 속성=”속성값속성=“속성값”... />

jsp와 같은 접두어 : 액션 태그 외에도 JSP 페이지에서 사용 가능한 외부태그를 지정

□ 커스텀 태그 : 액션 태그를 제외한 JSP 페이지에서 사용 가능한 외부 태그

cf) JSTL : <c:태그 이름 속성=‘속성값" 속성=“속성값”... />

 

○ 분류

 

● 액션 태그의 사용

JSP 페이지에 태그 형태로 구현하는 액션 태그 역시 실제 실행 단계에서는 서블릿 형태의 클래스 내 자바 코드로 변경됨

 

1)    페이지 흐름 제어

forward 액션 태그

<jspforward pag = “포워딩 대상페이지" />

pageContext 내장객체의 forward( )메서드와 동일한 역할

□ 바디 영역이 존재하면 시작 태그와 종료 태그로 나누어서 사용할 수도 있음

<jspforward page = ”포워딩 대상 페이지"

바디 영역

</jsp forward)

□ 요청, 응답 제어권을 넘긴 후 돌려받지 못하므로 forward 액션 태그 사용 전후의 문자열은 모두 출력되지 못함

 

include 액션 태그

include 방식은 포워딩 방식처럼 대상 페이지로 요청과 응답의 제어권을 넘겨주지만, 대상 페이지 실행이 종료되면 다시 제어권을 돌려받음

□ 바디 영역이 존재하면 시작 태그와 종료 태그로 나누어서 사용할 수도 있음

<jsp : include page="인클루드 대상 페이지" />

<jspinclude page="인클루드 대상 페이지" />

바디 영역

</jsp include

 

param 액션 태그

□전달해야 할 파라미터를 직접 request 요청 객체에 지정하여 전송

request 내장객체에 지정된 데이터 이외의 값을 사용하거나 이미 지정되어 있는 값을 변경할 때 요긴하게 사용

<jspparam name="파라미터 이름" value=”파라미터의 값” />

name 속성 : 전달될 파라미터의 구분 이름

value 속성 : 해당 파라미터의 값을 지정

    forward include 액션 태그와 함께 사용할 때 바디 부분에 구현됨

forward include 액션 태그 하위 태그로 사용

여러 파라미터 지정 가능

request 내장객체의 getParameter( ) 메서드를 통해 첨부된 파라미터 불러 옴

 

2)    자바 빈 사용

■ 웹 서비스에서 여러 종류의 데이터가 하나의 정보를 구성할 때 각 데이터를 관리하기 위해 제작하는 클래스

JSP 페이지 내 자바 코드 사용 없이 간단히 자바 빈 클래스의 객체를 생성

(1)   자바 빈 클래스

□ 웹 애플리케이션의」특정 기능을 수행하기 위한 다양한 데이터를 한 번에 관리 및 활용하기 위 제작하는 클래스

□ 클래스의 목적 : 애플리케이션 내 데이터 관리

□ 빈 규약!

• 자바 빈 클래스는 입력 파라미터가 없는 기본 생성자를 포함해야 한다.

• 자바 빈 클래스의 프로퍼티는 get/set/is 메서드로 접근하며, 메서드명은 표준 명명 규칙을 따라 만든다. set 메서드의 경우, 입력 파라미터를 하나 이상 가질 수 있다.

• 자바 빈 클래스는 객체의 직렬화를 위해 java.io.Serializable 인터페이스를 구현한다.

□ 프로퍼티가 될 변수를 private로 선언하고, 해당 변수의 값을 불러오거나 저장하기 위해 사용하는 set/get/is 메서드들은 public으로 구현

-> 접근 제어자를 통해 변수의 접근을 메서드만을 통해 허용하기 위함

 

(2)   useBean 액션 태그

□ 자바 빈 클래스의 객체를 생성하기 위해 사용하는 액션 태그

자바 빈 클래스의 객체 생성을 태그 형식으로 간단히 사용

    자바 빈 클래스를 먼저 제작

java 파일로 빈 클래스 제작(멤버 변수들과 setter, getter 선언하고 정의)

    useBean 액션 태그를 통해 객체로 생성 (id, class 속성 지정하여 생성)

<jspuseBean id="myMember” class="Member”/>

=> Member myMember = New Member( );와 같음

□ 자바 빈에 정의 된 메서드들은 액션 태그로 지정한 id로 접근해서 스크립틀릿에서 자바 코드로 사용하거나 아래의 setProperty 액션태그나 getProperty 액션태그로 사용

 

(3)   setProperty 액션 태그

□ 자바 빈 객체의 속성값을 지정

□ 자바 빈 클래스 setter 메서드로 자바 빈 객체 내 변수의 값을 할당하는 기능과 동일

□ 자바 빈 객체의 프로퍼티에 값을 설정할 경우 value 속성이 자주 사용

request 내장객체 내 파라미터의 값을 지정하려 할 때는 param 속성을 사용

<jspsetProperty name="자바 빈 객체명" property="속성(변수명)" value="속성값" />

<jspsetProperty name="myMember" property="id" value="OKjava" />

=> myMember.setId(“OKjava”); 와 같음

 

(4)   getProperty 액션 태그

□ 자바 빈 클래스의 getter 메서드와 동일한 기능

□ 자바 빈 객체에 지정된 속성의 값을 불러온 후 바로 출력에 사용

<jspgetProperty name="자바 빈 객체명" property=”속성(변수명) “/>

<jspgetProperty name=”myMember"property=”id"/>

=> <%=myMember.getId(); %>  와 같음. 바로 출력!

 

3)    스크립팅 요소

■ 스크립틀릿, 표현식, 선언문 역시 액션 태그를 이용하여 사용

(1)   scriptlet 액션 태그 = <% %>

<jspscriptlet>

바디 영역

</jspscriptlet >

(2)   expression 액션 태그 = <%= %>

<jspexpression>

바디 영역

<jsp expression>

(3)   declaration 액션 태그 =<%! %>

<jspdeclaration>

바디 영역

</jspdeclaration>

 

'JSP > 이론' 카테고리의 다른 글

[JSP][이론]07 EL  (0) 2020.09.07
[JSP][이론]06 데이터베이스 프로그래밍  (0) 2020.09.07
[JSP][이론]04 JSP 세션 관리_HTTPSession  (0) 2020.09.05
[JSP][이론]04 JSP 세션 관리_쿠키  (0) 2020.09.05
[JSP][이론] 02 JSP 기초  (0) 2020.09.05

04 JSP 세션 관리_HTTPSession

● 세션 관리를 위한 정보를 웹 서버가 생성하고 보관하여 관리

1.     HttpSession의 동작

HttpSession은 기본적으로 요청을 보내는 하나의 웹 브라우저에 하나의 세션 아이디를 부여하고 웹 컨테이너에서 해당 세션 아이디를 보관

○ 하나의 컴퓨터 내에서 두 개의 웹 브라우저를 통해 동일한 웹 페이지에 접근하더라도 각각의 웹 브라우저는 다른 세션 아이디를 부여 받아 각각의 세션이 유지

○ 웹 컨테이너가 직접 생성하고 유지

1)    웹 컨테이너는 세션 아이디를 생성하여 부여

2)    생성된 세션 아이디는 웹 클라이언트와 웹 서버 양측 모두 임시 저장

3)    웹 클라이언트는 다시 서비스 요청(접속) 시 보유하고 있던 세션 아이디를 함께 전송

4)    웹 서버는 세션 아이디가 저장된 메모리를 검색하여 유효한 세션 아이디인지 구분

5)    웹 컨테이너에 보관된 세션 아이디는 유효기간 만료 시 소멸

 

2.     session 내장객체 사용

page 지시자의 session 속성을 true로 지정해야 되지만 생략도 가능

<%@ page session=”true" %>

1)    세션 내 속성 지정

■ 세션 아이디 : 웹 클라이언트가 웹 브라우저를 통해 웹 서버에 접근할 때 생성되는 고유의 값 -> 웹 컨테이너가 접속한 웹 브라우저를 구별하기 위해 직접 보관

매번 새로운 값으로 생성되어 할당됨 -> 세션 아이디 외에 사용자 구분을 위한 고정적인 데이터가 필요 -> 일반적으로 웹 서비스에서 사용되는 로그인 아이디가 이러한 데이터의 대표적인 예

setAttribute( ) 메서드 : 속성 지정하고 세션의 속성값을 이용하여 필요한 데이터를 저장

session.setAttribute("ID", "TestID”)

ID 속성의 속성 값 TestID를 지정 -> 이 것으로 이 사용자인지 확인하는 거지

getAttribute( ) 메서드 : 해당 속성 값 출력 -> 저장한 데이터를 열람

<%=session.getAttribute(“TestID") %>

removeAttribute() 메서드 : 속성 삭제

세션에 설정된 속성만을 제거 (세션 아이디에는 영향 X ->웹 서버 클라이언트 간 연결 유지에는 영향 없음)

session.removeAttribute(“TestID")

 

2)    세션의 유효시간

setMaxInactiveInterval( ) 메서드 : 현재 세션 아이디의 최대 유효시간 설정

■ 설정한 세션의 최대 유효시간이 지나면 최초 접속 시 할당된 세션이 무효화되고, 다시 세션 연결이 확립되어야 함 -> 세션이 만료되면 재 로그인 필요

■ 세션이 만료될 경우 세션에 지정된 속성들도 함께 소멸됨

-> if문과 같은 조건문을 사용하여 로그인 한 아이디의 존재 여부에 따라 다시 로그인을 요청하는 등의 기능 구현이 가능

 

3)    세션의 종료

■ 세션의 최대 유효시간 설정은 일정 시간 이후 세션의 자동 종료 기능 구현에 적합

-> 즉시 세션을 해제해야 하는 로그아웃과 같은 기능 구현에는 적합하지 않음

■ 웹 브라우저의 종료 여부와 관계없이 세션을 즉시 종료시키기 위해서는 session 내장객체에서 제공하는 invalidate 메서드를 사용

invalidate 메서드 : 웹 클라이언트가 부여 받은 현재 세션의 즉시 종료를 수행

기존 세션에 담겨있던 속성 및 데이터들은 함께 소멸

-- SessionlnvalidateResult.jsp -- SessionInvalidatePerform.jsp에 세션 종료 코드 있겠지

<form action=”SessionInvalidatePerform.jsp" method=”post">

<input type=usubmit" value="세션 종료”>

</form>

-- SessionInvalidatePerform.jsp –

<%

if (session != null)

session.invalidate( );

response.sendRedirect ("http: //localhost 8080/Chap08/SessionlnvalidateResult.jsp")

%>

세션 종료 시킨 다음 원 페이지로 리다이렉트!

 

 

'JSP > 이론' 카테고리의 다른 글

[JSP][이론]06 데이터베이스 프로그래밍  (0) 2020.09.07
[JSP][이론]05 JSP 액션 태그  (0) 2020.09.07
[JSP][이론]04 JSP 세션 관리_쿠키  (0) 2020.09.05
[JSP][이론] 02 JSP 기초  (0) 2020.09.05
[JSP][이론] 01.서블릿  (0) 2020.09.04

04 JSP 세션 관리_쿠키

● 클라이언트 측 자원만을 사용하여 웹 서비스 요청 시 데이터를 첨부하여 전송

1.     쿠키의 동작 방식

○ 사용자가 특정 웹 사이트를 방문했을 때 서비스 사용에 필요한 데이터를 웹 서버의 요청에 의해 사용자의 컴퓨터 내 저장한 후 웹 클라이언트가 서비스를 다시 요청할 때 첨부하여 웹 서버에 전송하는 방식으로 진행

○ 웹 서버에 요청에 의해 생성

○ 한 번 설정되면 웹 브라우저는 설정된 쿠키의 사용기간이 만료되어 삭제되기 전까지 웹 서버에 요청을 보낼 때마다 쿠키로 설정한 데이터를 함께 전송

(1)   클라이언트가 웹 서버 측에서 요청에 대한 응답에 쿠키 정보를 첨부하여 전송

(2)   웹 브라우저는 웹 서버에게 전달받은 응답 내 쿠키를 종류에 따라 메모리나 파일에 저장

(3)   이후 웹 클라이언트가 쿠키가 저장된 웹 서버에게 다시 요청을 보낼 경우 키의 정보를 첨부하여 웹 서버에 전달

 

2.     쿠키 구성

 

 

 

 

■ 쿠키 이름과 값 설정 규칙

□ 쿠키의 이름은 아스키 코드의 알파벳과 숫자만을 포함할 수 있다.

□ 콤마(), 콜론。세미콜론。등호(), 공백('') 등의 문자는 포함될 수 없다.

□ ,로 시작될 수 없다.

□ 쿠키의 값이 바이너리(Binary) 값일 경우 BASE64 인코딩으로 처리해야 한다.

□ 쿠키의 값은 콤마( , ), 콜론(), 세미콜론( ; ), 등호( = ), 공백( ' ' ), 괄호( ( ) ) 등의 문자를 포함해야 할 경우 인코딩 처리가 필요할 수 있다.

3.     서블릿 API Cookie 클래스를 사용하여 쿠키 설정

1)    쿠키의 속성

 

2)    Cookie 클래스를 이용한 쿠키 생성과 사용

<%

Cookie cookie = new Cookie (name, value);

Response.addCookie (cookie)

%>

Cookie 객체를 클라이언트로 전송하기 위해 response 내장객체의 addCookie( )메서드를 사용하여 Cookie 객체를 첨부

■ 전송된 쿠키는 웹 클라이언트에 저장

■ 동일한 이름의 쿠키가 웹 클라이언트에 먼저 저장되어 있는 경우 추가된 쿠키로 덮어 쓰임

(1)   쿠키의 생성과 확인

-- CookieSet.jsp --

<%

Cookie cookie = new Cookie ("CookieTest", "Hello, Cookie!")

response.addCookie (cookie)

%>

<form action=”CookieChk.jsp" method="post">

<input type="submit" value="쿠키 확인 페이지"

</form>

-- CookieChk.jsp –

<%

Cookie [ ] cookies = request.getCookies 0 //쿠키 배열 받아서

if (cookies != null && cookies.length > 0) {

for (int i=0 i < cookies.length i++) {

if (cookies [i] .getName ().equals(“CookieTest")) {

// 저 이름의 쿠키 있는지 확인

%>

<h3>

쿠키의 이름 : <%=cookies [i] .getName() %> <br/>

쿠키의 값 : <%=cookies [i] .getValue() %> <br/>

쿠키의 유효시간 : <%=cookies [i] .getMaxAge() %> <br/>

</h3>

<%        }          }          } %>

</body>

 

(2)   쿠키 값 재설정

setValue( ) 메서드 : 생성한 쿠키의 기존 구성요소 값을 변경

<%

Cookie [] cookies = request.getCookies 0

if (cookies != null && cookies.length > 0) {

for (int i=0 i < cookies.length i++) {

if (cookies [i] .getName().equals("MyCookie")) {

cookies [i] .setValue(uMyCookie's value was changed!")

response.addCookie (cookies [i])

}           }          }          %>

 

(3)   쿠키의 삭제

Cookie 클래스에서는 쿠키의 삭제 기능을 수행하는 메서드를 제공하고 있지 않아 일반적인 방법으로는 클라이언트에 설정된 쿠키를 삭제할 수 없음

□ 쿠키의 삭제를 구현하기 위해서는 쿠키의 유효시간 설정에 사용되는 setMaxAge( ) 메서드에 쿠키의 유효시간을 0으로 지정하는 다소 편법적인 방식을 사용

cookies [i] .setMaxAge (0)

response.addCookie (cookies [i])

 

(4)   쿠키의 도메인 설정

setDomain( ) 메서드 : 생성된 쿠키가 전송될 수 있는 도메인을 직접 지정

 

(5)   쿠키의 경로 설정

□ 도메인 내 특정 경로에만 쿠키가 전송되어야 할 때

setPath( )메서드 : 쿠키가 사용될 URL의 도메인 이후 주소의 특정 경로를 지정하고, 결과적으로 쿠키가 사용될 경로를 제한

cookie.setPath("/Chap08/CookiePathTest/")

 

'JSP > 이론' 카테고리의 다른 글

[JSP][이론]05 JSP 액션 태그  (0) 2020.09.07
[JSP][이론]04 JSP 세션 관리_HTTPSession  (0) 2020.09.05
[JSP][이론] 02 JSP 기초  (0) 2020.09.05
[JSP][이론] 01.서블릿  (0) 2020.09.04
[JSP][이론] 들어가며  (0) 2020.09.04

02 JSP 기초

JSP 개요와 동작

○ 개요

■ 문서에 다른 프로그래밍적 가공 없이 HTML 문서처럼 태그를 바로 사용, java 코드가 필요할 때 HTML 태그들 사이에 특정 기호를 사용하여 삽입

○ 동작

JSP 페이지는 실행되어야 하는 시점에 컴파일이 가능한 완전한 자바 코드를 갖춘 자바 클래스로 변환하는 과정을 거치게 되며 이 자바 클래스는 서블릿과 유사한 구조를 갖추게 됨

 

JSP의 기본 문법

1)    JSP 파일 구성요소

 

■ 주석

 

2)    지시자

■ 컨테이너가 JSP 페이지를 서블릿 역할을 할 클래스로 변환할 때 해당 페이지를 어떻게 처百할 것인지에 대한 여러 정보들을 지정

 

(1)   page 지시자

JSP 페이지 전체에 적용되는 정보들을 웹 컨테이너에 전달하여 페이지의 속성이 수행되도록 기능을 지정

<%@ page contentType=”text/htmlcharset=utf-8" pageEncoding="UTF-8" %>

< %@ page import="패키지명.클래스명" %>

 

(2)   include 지시자

현재 JSP 페이지에 JSP 파일 혹은 HTML 파일을 포함시켜주는 지시자

주로 페이지 마다 자주 사용되는 공통 부분을 파일로 만들어 삽입시켜 줄 때 사용

특정 파일이 삽입되길 원하는 곳에 자유롭게 배치

include된 파일의 내용은 현재 JSP 페이지에 모두 포함되므로 include를 통해 현재 JSP 페이지에 몇 개의 파일이 포함되어 있더라도 최종적으로 변환되어 생성되는 서블릿 파일은 하나뿐

<%@ include file=”includedHTML.html" %>

 

(3)   taglib 지시자

사용자 정의 태그(Custom Tag) JSTL(JSP Standard Tag Library)과 같은 외부 태그 라이브러리를 사용할 때 필요한 태그 라이브러리 식별자와 접두어를 지정

uri 속성 : TLD(Tag Library Descriptor) 파일 경로 지정

prefix 속성 : 해당 태그 사용을 구분할 접두어 지정

<%@ taglib uri=”http\\taglib.com\taglibURI" prefix=”taglibPrefix" %>

 

3)    스크립팅 요소(Scripting Elements)

(1)   스크립틀릿

JSP 내에 자바 코드를 직접 삽입해야 할 때 사용되는 일종의 코드블록

<% 자바 문장1; %>

<%

자바 문장2;

자바 문장3;

자바 문장4;

%>

 

(2)   표현식(Expression)

현재 JSP 페이지 내에서 불러올 수 있는 변수의 값, 수식의 결과, 메서드의 리턴 값 등의 데이터 출력을 간단히 표현하기 위해 사용하는 문법

스크립틀릿을 이용하여 out.print 혹은 out.write 사용보다 간편히 데이터를 출력

문장 끝에 '을 붙이지 않음

<%= 변수 %>

<%= 수식 %>

<%= 리턴값을 가지는 메서드 %>

 

(3)   선언문(Declaration)

JSP 페이지 내에서 사용할 클래스 변수, 인스턴스 변수와 같은 멤버 변수와 멤버 메서드를 선언할 때 사용

선언문에 작성한 자바 코드는 클래스 영역의 변수들과 메서드 작성에 사용됨 -> 클래스 멤버

<%!

변수 선언 ;

메서드 선언 (파라미터 목록) {

자바 코드

)

%>

 

'JSP > 이론' 카테고리의 다른 글

[JSP][이론]05 JSP 액션 태그  (0) 2020.09.07
[JSP][이론]04 JSP 세션 관리_HTTPSession  (0) 2020.09.05
[JSP][이론]04 JSP 세션 관리_쿠키  (0) 2020.09.05
[JSP][이론] 01.서블릿  (0) 2020.09.04
[JSP][이론] 들어가며  (0) 2020.09.04

01 서블릿

● 동적 웹 서비스를 Java로 구현하기 위한 기술

● 클라이언트의 요청을 처리하여 응답하답 위해 웹 서버에서 실행되는 java클래스

● 서블릿과 서블릿 컨테이너

○ 서블릿 컨테이너를 통한 서블릿의 동작 진행

1)    웹 클라이언트에서 전송된 HTTP 요청을 웹 서버가 전달 받음

2)    웹 서버는 HTTP 요청 정보를 묶어 서블릿 컨테이너에 전달

3)    서블릿 컨테이너는 저장된 서블릿 객체들 중 해당 HTTP 요청을 처리할 수 있는 서블릿을 실행

4)    웹 서버에서는 서블릿 실행을 통해 만들어진 응답을 전달 받음

5)    웹 서버는 전달받은 응답을 웹 클라이언트에게 전송

 

○ 서블릿 컨테이너가 전달받은 요청 정보로부터 서블릿의 실행 및 결과를 웹 서버에 전달하기까지의 과정

1)    웹 서버의 요청(request) 정보를 통해 HttpServletRequest 클래스의 객체인 요청 객체와 HttpServletResponse 클래스의 객체인 응답 객체를 생성

2)    전달받은 요청을 처리할 수 있는 서블릿 클래스가 서블릿 컨테이너에 로딩되어 있는지 검사

• 로딩되어 있지 않을 경우 해당 서블릿 클래스를 로딩하여 객체를 생성

• 이미 로딩되어 있을 경우 해당 서블릿 클래스의 객체를 생성

3)    생성된 서블릿 객체를 호출하여 실행. 실행 시 doGet 혹은 doPost 메서드에 필요한 입력 파라미터는 ①, ② 과정에서 생성된 HttpServletRequest, HttpServletResponse 클래스의 객체를 이용

4)    서블릿 실행 결과를 웹 서버에서 전달

 

HttpServletRequest, HttpServletResponse 객체

HttpServletRequest 객체 : 요청 정보를 담기 위해 사용

HttpServletResponse 객체 : 요청에 대한 응답 정보를 지정하기 위해 사용

 

● 서블릿 클래스의 작성 방법

1.     HttpServlet 클래스 상속

public으로 선언되어야 하며 반드시 HttpServlet 클래스를 상속

HttpServlet 클래스

HTTP 프로토콜에 최적화된 서블릿 구현을 위한 클래스

GenericServlet 클래스를 상속 받는 추상 클래스

GenericServlet 클래스 : ServletConfigServlet, Serializable 인터페이스를 구현하는 클래스

 

2.     doGet/doPost메서드 구현

■ 웹 프로그래머가 직접 구현해야 하는 부분

service 메서드 내부에서 호출될 doGet 혹은 cioPost 메서드를 재정의(overriding)해야 하며 각 메서드는 다음과 같이 서블릿 컨테이너에 의해 가공된 HttpSerelRequest HttpServletResponse 타입의 입력 파라미터를 사용하여 요청 및 응답 정보를 활용

1)    get 방식 : 데이터의 정보를 웹 주소 URL에 포함하여 호출하는 방식

                      Address?param 1 =var1 &param2=var2 • • -paramN=varN

                      form 태그의 데이터 전송방식이 지정 없이 실행되었을 때 doGet 메서드가 호출

2)    post 방식 : 추가로 전송할 데이터를 HTTP 요청 메시지에 첨부하는 형태로 전송하는 방식

                      get 방식과는 달리 웹 주소 URL로는 어떠한 정보가 전달되는지 열람할 수 없음

 

● 서블릿 제작

1.     서블릿 생성

Dynamic Web Project# 생성한 후 'Java Resources' 폴더에 있는 'src' 폴더 안에 Servlet 생성

이클립스에서 생성한 서블릿 클래스 에러 -> 아파치 톰캣 디렉터리 내 lib에 있는 servlet-api.jar 라이브러리를 추가하면 해결

<form> 태그 : 사용자와 웹 서버 간 대화형 웹 서비스 구현 위해 HTML에서 제공되는 태그

사용자의 입력을 웹 서버로 전달하는 역할

<form action=”요청 처리할 웹 애플리케이션 혹은 웹 페이지(없으면 자기자신 호출)” method=”데이터 전송방식

사용자의 입력을 받기 위한 다양한 태그(복수 가능)

사용자가 입력한 데이터를 전송하기 위한 submit 기능을 위한 구문

</form>

■ 〈form〉태그의 action 속성에는 현재 데이터를 전달받을 웹 애플리케이션이나 웹 페이지를 값으로 설정하고 method 속성에는 데이터를 전달할 방식을 “get” 혹은 “post”로 설정할 수 있음

 

2.     서블릿의 한글 처리

■ 한글이 정상적으로 처리되기 위해서는 웹 클라이언트 측 웹 브라우저의 문자 처리 방식과 웹 서버의 문자 처리 방식을 동일하게 해주거나 적절한 문자 처리 방식으로 변환해주는 작업이 필요

1)    get 방식

□ 파라미터는 해당 요청 페이지에 설정된 문자셋으로 인코딩돠어 웹 서버로 전송

□ 요청 페이지에 설정되어 있는 문자셋과 웹 서버의 응답처리 페이지의 문자셋을 동일하게 처리해주어야 함

get 방식의 경우 파라미터의 값이 URL에 직접 명시되는데 아래와 같이 사용자가 직접 주소창에 전송될 파라미터를 입력하여 실행했을 경우 二라우저가 사용하는 문자셋을 사용하여 인코딩한 후 처리 됨

 

2)    post 방식

HttpServletRequest 클래스가 제공하는qetCharacterEncoding()을 이용

post 방식은 URL에 파라미터의 값이 각각 추가되어 오지 않고 HTTP 요청메시지에 첨부되는 형식으로 전달되므로 HttpServletRequest 클래스의 setCharacterEncoding() 메서드를 한 번만 사용해도 간단히 한글 처리가 가능

request.setCharacterEncoding (“utf-8")

response.setContentType("text/htmlcharset=UTF-8")

 

3)    server.xml을 통한 문자셋 설정

□ 아파치톰캣의 server.xml을 수정하면 이러한 변환 작업을 먼저 처리

server.xml 내부에서 〈Connector〉태그를 찾아 다음과 같이 URIEncoding="UTF 8”속성을 추가한 후 저장

server.xml 파일은 변경 이후 웹 서버 재 시작

 

'JSP > 이론' 카테고리의 다른 글

[JSP][이론]05 JSP 액션 태그  (0) 2020.09.07
[JSP][이론]04 JSP 세션 관리_HTTPSession  (0) 2020.09.05
[JSP][이론]04 JSP 세션 관리_쿠키  (0) 2020.09.05
[JSP][이론] 02 JSP 기초  (0) 2020.09.05
[JSP][이론] 들어가며  (0) 2020.09.04

들어가기에 앞서

본 내용은 이지훈_JSP Web Programming(예문사) 책을 보면서 공부한 것입니다!

JSP책 중 난이도가 좀 있는 책이라고 하는데

그럼에도 불구하고 설명을 굉장히 잘 해주셨습니다.

 

웹 서비스(Web Service)

 

필수요소 : 웹 클라이언트(Web Client)와 웹 서버 (Web Server). 웹 브라우저(Web Browser)

웹 서비스 제공 : 웹 클라이언트의 요청(Request)과 응답(Response)의 반복

HTTP : 웹 서비스 진행을 위한 규약

웹 클라이언트가 웹 브라우저를 통해 정보를 요청(Request)하고 웹 서버가 그 요청에 응답(Response)하여 웹 브라우저에서 해당 응답을 처리한 후 결과를 출력해주기까지 웹 서비스 전반에 걸친 규칙들을 규명해 놓은 프로토콜

 

애플리케이션 서버(Application Server) 방식

프로그램 실행 과정을 애플리케이션 서버에게 위임함으로써 간접적으로 프로그램수행을 명령하는 방식

① 웹 클라이언트에서 웹 브라우저를 통해 웹 서버에 정보를 요청(Request)

② 웹 서버는 전송된 요청(Request) 처리를 위한 프로그램 실행을 애플리케이션 서버에 일임

③ 애플리케이션 서버는 요청에 맞는 프로그램을 스레드(Thread)를 생성하여 실행

④ 웹 서버는 프로그램에서 수행된 결과를 웹 브라우저로 전송

 

각각의 요청을 스레드(Thread)로 처리하기 때문에 기존 CGI 방식에 비해 메모리 사용 효율이 높음

 

웹 컨테이너(Web Container) : 웹 브라우저에서 요청된 URL 주소가 서블릿 혹은 JSP 페이지를 호출하는 경우 처리를 담당

웹 클라이언트에서 전송된 요청이 서블릿이나 JSP 페이지를 지칭할 경우, 웹 컨테이너는 이 요청을 넘겨 받아 서블릿/JSP 페이지를 실행하여 필요 기능을 수행한 후 그 결과를 웹 브라우저에 전송함으로써 응답하게 함

 

애플리케이션의 파일 구조

1)    웹 프로젝트의 속성 설정을 위한 web.xml 파일

2)    라이브러리 사용을 위한 lib 폴더

3)    서블릿을 포함한 각종 Java 파일로부터 컴파일된 클래스 파일들이 위치한 classes 폴더

4)    태그 라이브러리 사용하기 위한 tld파일 -> tld 폴더 -> WEB-INF 폴더

5)    서버 환경 설정하기 위한 context.xml 파일이 위치하는 META—INF 폴더

6)    웹 페이지 구현을 위한 JSP 페이지, HTML 페이지, CSS 파일과 자바스크립트 파일, 이미지와 사운드, 동영상 등을 위한 멀티미디어 파일들이 웹 프로젝트 폴더 바로 아래에 위치

 

서블릿 페이지의 제작

서블릿 페이지는 JSP와는 달리 동적 웹 서비스를 제공하기 위한 Java 클래스를 직접 구현하며 제작

수행 과정

① 서블릿 클래스 파일을 제작

② 제작한 서블릿 클래스 파일을 컴파일하여 웹 애플리케이션 내 'WEB-INF/classes, 폴더에 저장

web.xml 파일에 서블릿을 등록

④ 웹 컨테이너를 구동하여 서블릿 페이지를 사용

 

컴파일 된 서블릿 : class 파일은 WEB-INF\classes\ 폴더에 위치해야 함 - > classes 폴더 생성

 

web.xml 작성

문법 식별자와 함께〈web-app〉태그 내 등록한 서블릿의 이름과 클래스 경로명을〈servlet〉태그 아래의〈servlet-name〉및〈servlet—class〉태그에 명시

<servlet-mapping>태그의〈 servlet -name〉태그와〈url—pattern〉태그에 사용할 서블릿 이름과 서블릿 페이지 호출 시 사용될 상대주소를 입력

 

<web-app xmlns=”http// java.sun.com/xml /ns/ javaee”

xmlnsxsi=”http//www. w3.org/2001/XMLSchema-instance"

xsi schemaLocation=”http//java.sun.com/xml/ns/javaee

http//java.sun.com/xml/ns/javaee /web-app_3_0.xsd"

version=”3.0" metadata complete="true">

<servlet>

<servlet-name>서블릿 이름</servlet-name>

<servlet-class>클래스 경로명</servlet class)

</servlet>

<servlet-mapping>

<servlet-name>사용할 서블릿 이름</servlet-name>

<url-pattern>/호출 시의 상대 주소</url-pattern>

/servlet-mapping

</web-app>

 

웹 어플리케이션 배포

웹 애플리케이션 코드를 하나의 파일로 묶어서 배포 가능한、WAR 파일을 사용하여 웹 애플리케이션을 배포

Dynamic Web Project는 이클립스에서 동적 웹 애플리케이션 제작을 위해 최적화된 프로젝트 환경

이클립스에서는 웹 애플리케이션을 구성하는 HTML이나 JSP페이지 등은 모두 WebContent 폴더에 위치

 

'JSP > 이론' 카테고리의 다른 글

[JSP][이론]05 JSP 액션 태그  (0) 2020.09.07
[JSP][이론]04 JSP 세션 관리_HTTPSession  (0) 2020.09.05
[JSP][이론]04 JSP 세션 관리_쿠키  (0) 2020.09.05
[JSP][이론] 02 JSP 기초  (0) 2020.09.05
[JSP][이론] 01.서블릿  (0) 2020.09.04

+ Recent posts