반응형

JSP 예제

 

[예제를 실습하기에 앞서 첨부 파일(example.zip)을 다운로드 한 후 /bbs 디렉토리에 압축을 풉니다.]

 

include 지시자를 이용한 파일 인클루드 예제

 

/bbs/ex1/main.jsp : main.jsp에서 include 지시자를 사용하여 디자인 페이지인 main.html 포함.

main.jsp 내에서 다음과 같이 main.html 페이지를 인클루드 합니다.

 

<%@ include file=”main.html” %>


유지 보수의 편리함 때문에 디자인 페이지를 include 지시자를 이용하여 포함시키는 경우가 많이 발생합니다.

이때 주의해야 할 사항은 인클루드 되는 파일(main.html)내에서의 링크는(<img src=..) 인클루드하는 파일(main.jsp)이 기준으로 해야 합니다는 점입니다.

이 예제에서 만약에 main.jsp 가 /bbs/ex1/ 에 위치하고 main.html 파일이 /bbs/ex1/inc 에 그리고 이미지 파일의 디렉토리가 /bbs/img 라고 가정한다면,

main.html 내에서의 이미지에 대한 링크는 <src img=../img/image.gif > 이어야지 <src img=../../img/image.gif>이면 안됩니다.

물론 main.html 만를 요청하면 main.html 내에서 이미지는 깨집니다. 하지만 깨지는 것이 정상입니다.

우리가 서비스하는 파일은 main.html 파일 단독이 아니기 때문입니다. main.jsp 가 웹 사이트가 방문자가 방문할 페이지이지 main.html 역시 단독으로 방문할 수 있는 페이지라면 디렉토리 구조부터 바꾸어야 합니다.

 

Form 태그의 텍스트필드를 이용해서 파라미터 값 전송 예제

 

main.jsp -> welcome.jsp

 

/bbs/ex2/main.jsp : main.jsp 에서 파라미터 값으로 uid, passwd를 welcome.jsp 에 전달

main.jsp 에서 <input type=”text” name=”uid”> 로 welcome.jsp 로 전송했다면 welcome.jsp에서는 사용자가 웹 브라우저를 통해 보내는 문자열 정보를 받는 코드 조각으로 받을 수 있습니다.


<% request.getParameter(“uid”) %>

 

파라미터 값을 자바빈에 설정하고 값 가져오기(set/get) 예제

 

/bbs/ex3/main.jsp 파일에서 디자인 파일 main.html 과 welcome.jsp 파일을 인클루드 하는데

welcome.jsp는 uid, passwd 값이 넘어 올때만 인클루드 됩니다. (main.jsp 소스를 확인해 보세요)

 

또한 이 예제에는 자바빈을 이용합니다.

이 때 자바빈을 어떻게 셋팅하고 자바빈에 저장된 값을 어떻게 가지고 오는지 확인합니다.


main.jsp 에서 아래와 같이 표준액션을 이용해서 자바빈을 생성합니다.

 

<%@ page import="kr.go.mnd.baby.*" info="Simple JSP" contentType="text/html; charset=euc-kr" %>

<jsp:useBean id="login" scope="page" class="kr.go.mnd.baby.User" />

<jsp:setProperty name="login" property="*"/>


여기서 <jsp:useBean>은 main.jsp 가 요청되면 id가 login이고 scope가 page인 객체를 찾아서 레퍼런스를 리턴하려 합니다.

그런데 찾는 객체가 없으면 객체를 생성합니다.

객체를 생성할 때는 페이지 지시자의 임포트된 팩키지에서 클래스를 찾아서 생성하게 됩니다.

두번째 표준액션인 <jsp:setProperty>는 넘어온 파라미터값으로 자바빈의 set 메소드를 호출하여 값을 저장하는 액션인데 처음 main.jsp를 호출하게 되면 아무런 작용도 하지 않는다.

main.jsp 에서 uid, passwd를 값을 자기 자신인 main.jsp에 넘기게 되면

 

<jsp:setProperty name="login" property="*"/>

 

의해 이미 생성한 User 자바빈의 setUid() 메소드와 setPasswd() 메소드를 호출하게 되어 자바빈을 설정하게 됩니다.

 

main.jsp

main.jsp

User.java

<input type=”text” name=”uid”>

<jsp:setProperty name=”login” property=”uid”>

setUid(String userid)


여기서 자바빈의 setUid 메소드에서 Uid가 대문자인 것에 의구심을 가질 수도 있는데

이는 자바 언어의 메소드 이름 규칙에 의한 것입니다.

자바 언어는 메소드나 변수의 이름을 작성할 때 첫 글자는 소문자로 시작하고 여러 단어가 붙을 때는 단어의 첫글자는 대문자로 함을 권고합니다.

클래스의 작명 규칙은 첫 글자는 대문자인 것만 빼고 메소드 작명 규칙과 같습니다.

실습 : 아래 자바빈은 /bbs/ex3/main.jsp 를 실행하기 위해서 필요한 자바빈입니다. 작성한 후 /bbs/WEB-INF/claases 에 넣고

컴파일하면 /bbs/ex3/main.jsp 가 실행이 됩니다.

 

package kr.go.mnd.baby;

public class User {

         String uid;

         String passwd;

         public User(){

                  uid = null;

                  passwd = null;

         }

         public String getUid(){

                  return uid;

         }

         public String getPasswd(){

                  return passwd;

         }

         public void setUid(String uid){

                  this.uid = uid;

         }

         public void setPasswd(String passwd){

                  this.passwd = passwd;

         }

}

 

 

사용자 유틸리티 클래스 사용 예제

 

파일 : /bbs/ex4/main.jsp, welcome.jsp

 

위 예제에서 uid 값에 한글을 넣고 테스트하면 한글이 깨집니다.

이를 보완하기 위해서 사용자 유틸리티 클래스를 만들어 사용해 봅니다.


/bbs/ex4/main.jsp -> welcome.jsp 로 uid 값을 한글로 보낼 때 welcome.jsp 에서 한글이 제대로 보이도록 하는 것이 목적입니다.


JSP 엔진에 따라서 입력된 한글이 깨져 나올 수 있습니다.

한글 처리가 미흡한 경우에는 코드에서 처리해 주어야 합니다.

JSP 내에서 한글을 처리하기 위해서는 입력 받은 한글을 euc-kr 이나 KSC5601 문자 세트로 변환합니다.

(이는 JSP엔진이나 OS에 따라서 달라질 수 있습니다. 여기서는 KSC5601로 변환했습니다)

데이터베이스에 한글을 삽입할 때도 문제가 생기면 같은 방법을 사용합니다.

 

아래 사용자 유틸리티 클래스를 작성하여 예제 실현


*** Hanguel.java ***

 

package kr.go.mnd.util;

 

import java.io.UnsupportedEncodingException;

public class Hanguel {

    public Hanguel() {}   

         public static String toHanguel(String s) {

                  try {

                           if (s != null)

                                   return (new String(s.getBytes("8859_1"),"KSC5601"));

                           return s;

                  } catch (UnsupportedEncodingException e) {

                           return "Encoding Error";

                  }

    }

}

 

welcome.jsp 에서 기존의 코드 request.getParameter("uid"); 다음과 같이 바꿉니다.

 

Hanguel.toHanguel(request.getParameter("uid"));

 

Hanguel 클래스의 toHanguel메소드를 사용하기 위해서는 welcome.jsp 의 페이지 지시자에서 다음과 같은 해당 클래스를 임포트해주어야 합니다.

 

<%@ page import="kr.go.mnd.util.Hanguel" %>


여기서 주의해야 것은 welcome.jsp 내에서 Hanguel 클래스의 객체 생성하지도 않고 바로 toHanguel 메소드를 사용할 있었다는 것입니다.

이는 Hanguel 클래스의 toHanguel 메소드가 static으로 선언된 클래스 메소드이기 때문에 객체 생성 없이 해당 메소드의 호출이 가능하기 때문입니다. (자바에 대한 기초 내용입니다)


welcome.jsp 파일을 아래와 같이 고치고 테스트해 봅니다.


<%@ page import="kr.go.mnd.util.Hanguel" %>
<center>
<h1>Hello,
<%
out.println(Hanguel.toHanguel(request.getParameter("uid")));
%>
</h1>
</center>

한글을 위해서 위와 같이 사용자 유틸리티 클래스를 이용하는 것대신에 request 의 setCharacterEncoding 메소드를 이용해도 됩니다.

Welcome.jsp 내에서 아래와 같이 사용합니다.


<%

request.setCharacterEncoding("euc-kr");

%>


setCharacterEncodeing 메소드는 최근 자바 버전부터 생긴 메소드로 이전의 웹 애플리케이션을 보면 거의다 위와 유사한 한글 컨버터 사용자 유틸리티 클래스를 쓰고 있습니다.

또한 문서에 의하면 setCharacterEncodeing 메소드가 아직 버그가 있어서 함께 혼용하여 사용하는 것이 낫다고 합니다.


이번에 다운로드 한 그대로의 welcome.jsp 파일를 이용하여 한글을 나오도록 해 보겠습니다.


<center>
<h1>Hello,
<jsp:getProperty name="login" property="uid" />
</h1>
</center>


위 파일이 원래의 welcome.jsp 파일입니다.


자바 빈을 이용하는 것이므로 자바 빈의 코드 안에 위에서 만든 Hanguel 사용자 유틸리티 클래스를 이용하도록 코드를 고칩니다.

아래와 같이 User 빈이 Hanguel 사용자 유틸리티 클래스를 이용하도록 고치고 테스트 합니다.


User.java


package kr.go.mnd.baby;


import kr.go.mnd.util.Hanguel;


public class User {
    String uid;
    String passwd;

    public User() {
        uid = null;
        passwd = null;
    }

    public String getUid() {
        return uid;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setUid(String uid) {
        this.uid = Hanguel.toHanguel(uid);
    }

    public void setPasswd(String passwd) {
        this.passwd = Hanguel.toHanguel(passwd);
    }
}

<출처: http://cafe.naver.com/webprogramguide/>

+ Recent posts