05.JSP2008. 12. 8. 17:49
반응형

JSP 2.0 프로그래밍


java 환경변수 설정

시작 > 설정 > 제어판 > 시스템 > 고급 을 클릭하고 '환경변수'버튼을 클릭.

시스템 변수 부분에서 Path라는 변수 이름을 찾아 선택한 후 '편집' 버튼을 클릭.

변수 값 뒤쪽에 JDK bin 경로를 추가. (오라클을 사용한다면 가장 앞쪽에 추가)


'새로만들기' 버튼을 누르고 JAVA_HOME을 만들고 JDK 경로를 입력.

CLASSPATH를 만들고 %classpath%;. 를 입력.

Request로 checkbox 파라미터 받아오기#

checkbox 사용시 같은 이름의 파라미터의 값이 여러 개 전달 될 수 있기 때문에, getParameter() 메소드로는 모두 다 읽어 오지 못한다. getParameterValues() 메소드를 사용해야 한다.


  1. Enumeration enum = request.getParameterNames();
  2. while(enum.hasMoreElements()){
  3. String name = (String)enum.nextElement();
  4. }

getParameterValues() 메소드의 리턴값은 java.util.Enumeration 이다.


checkbox와 radiobutton의 경우 선택하지 않게 되면 파라미터 자체가 전송되지 않지만 텍스트 입력과 같은 일반적인 입력요소들은 값을 입력하지 않더라도 빈 문자열("")이 파라미터 값으로 전달된다.


한글 파라미터값 인코딩 하기#

알파벳과 숫자 그리고 몇몇 기호를 제외한 나머지 글자들을 URL에 포함시키기 위해서는 인코딩 작업을 해주어야 한다.

  1. String value = "자바"
  2. String encodedValue = URLEncoder.encode(value);
  3. response.sendRedirect("/index.jsp?name="+encodedValue);

최근의 웹 브라우저와 웹 서버들은 한글 파라미터 값을 인코딩하지 않더라도 알맞게 처리해 주지만, 표준에 따라서 인코딩을 해주는 것이 올바른 습관이여, 나중에 서버가 변경되더라도 소스 코드를 변경하는 일이 줄어든다.


pageContext 기본객체#

하나의 페이지와 1대1로 매핑되는 객체로서 다른 기본 객체를 구할때 주로 사용한다.

request 기본 객체를 구하고 싶다면.

  1. HttpServletRequest httpRequest = (HttpServletRequest)pageContext.getRequest();

getRequest() 메소드의 리턴타입은 ServletRequest 이기 때문에 HTTP 요청을 처리하는 경우 형변환을 해준다.


Application 기본객체#

웹 어플리케이션 초기화 파라미터 읽어 오기#

web.xml 파일에 다음 태그를 추가한다.

  1. <context-param>
  2. <description>파라미터 설명(선택)</description>

    <param-name>파라미터 이름</param-name>

  3. <param-value>파라미터 값</param-value>
  4. </context-param>

웹페이지에서 읽어올 수 있다.

  1. application.getInitParameter(initParamName)
로그메세지 기록하기#
  1. application.log("로그메세지 기록")
  2. 또는
  3. log("로그메세지 기록")  //JSP 자체지원 메소드

기본 데이터 타입(int, double)을 기본객체에 속성값으로 지정하기#

기본객체의 속성값은 Object 타입으로 모든 클래스 타입을 지정할 수 있지만 기본 데이터 타입은 래퍼 클래스를 이용해 Object 타입으로 바꿔줘야한다.

  1. Integer intValue = new Integer(100);
  2. request.setAttrubute("ratio",intValue);

읽어올땐

  1. Integer intValue = (Integer)request.getAttribute("ratio");
  2. int value = intValue.intValue();

JSP 페이지 에러 처리#

에러 페이지 지정하기#

jsp 페이지에 에러페이지를 지정한다.

  1. <%@ page errorPage = "/error/viewErrorMessage.jsp" %>

지정한 경로로 보이고 싶은 에러페이지를 작성한다. 에러페이지에는 다음 페이지 디렉티브를 추가한다.

  1. <%@ page isErrorPage = "true" %>
  2. <%=exception.getClass().getName()%> //exception 기본객체 클래스 이름(선택)
  3. <%=exception.getMessage()%> //예외 메세지(선택)

isErrorPage 속성 값을 true 로 지정하면 jsp 페이지가 에러페이지가 되며 exception 기본객체는 에러페이지에서만 사용할 수 있다.

에러 코드별 에러 페이지 지정하기#

web.xml 에서 에러 상태 코드별로 보여줄 페이지를 지정할 수 있다.

  1. <error-page>
  2. <error-code>500</error-code>
  3. <location>/error/error500.jsp</location>
  4. </error-page>

다음 에러 페이지를 작성하는데 다음 구문을 꼭 추가한다.

  1. <% response.setStatus(HttpServletResponse.SC_OK);%>

응답 코드를 200(정상상태)으로 지정한다. 응답 코드를 200 으로 지정하지 않으면 웹 브라우저에는 500 응답 코드가 전달되며, 이 경우 웹 브라우저는 자체적으로 500 에러일 때 보여주는 화면을 출력한다. 따라서 꼭 응답 코드를 지정해 주어야 한다.(웹 콘테이너에 따라서 이렇게 안 해주어도 된다.)


예외 종류별 에러 페이지 지정하기#

에러 코드별 에러 페이지 지정 방법과 거의 같은 방법으로 지정한다.

web.xml에 에러페이지를 지정한다.

  1. <error-page>
  2. <error-type>java.lang.NullPointerException</error-type>
  3. <location>/error/errorNullPointer.jsp</location>
  4. </error-page>

다음 에러 페이지를 작성하는데 다음 구문을 꼭 추가한다.

  1. <% response.setStatus(HttpServletResponse.SC_OK);%>
에러 페이지 우선순위#

우선순위는 다음과 같다.

  1. page 디렉티브의 errorPage 속성에서 지정한 에러 페이지
  2. web.xml 파일의 <exception-type>에서 지정한 예외타입(예외 종류별 에러)
  3. web.xml 파일의 <exception-code>에서 지정한 예외타입

절대 경로와 상대 경로#

절대 경로#

웹 어플리케이션의 폴더를 루트로 사용하는 경로이다.

  1. /to/to.jsp

'/to/to.jsp' 는 '/'로 시작하는데, 맨 앞의 '/'가 절대 경로의 기준점인 웹 어플리케이션 폴더를 의미한다.

상대경로#

현재 JSP 페이지 기준으로 경로를 결정한다. 예를 들어 to.jsp 기준으로 봤을때 from.jsp의 상대경로는 다음과 같다.

  1. ../from/from.jsp

'..'는 상위 디렉터리를 나타낸다.


요청 흐름 제어하기#


<jsp:forward>액션 태그를 이용한 JSP 페이지 이동#

요청 흐름이 이동할때(A1.jsp에서 A2.jsp 로 흐름이 이동할때) A1.jsp 에서 사용한 request 기본객체와 response 기본객체가 A2.jsp로 전달된다.

또 A1.jsp가 아닌 A2.jsp 에서 생성한 응답 결과가 웹 브라우저에 전달된다.(요청 흐름이 이동하면 A1.jsp에서 생성했던 출력 결과는 모두 제거된다.)



A1.jsp의 출력 결과가 웹브라우저에 전송이 되지 않는 이유는 출력 버퍼 때문이다. <jsp:forward>태그를 만나면 출력 버퍼를 비우고 A2.jsp 의 출력 결과를 저장하기 때문에 A1.jsp의 출력 결과는 모두 제거된다.

따라서 페이지에 출력버퍼가 없거나(page 디렉티브에서 쓰지 않도록 설정) 출력 버퍼가 꽉 차서 <jsp:forward>태그를 만나기 전에 비워진다면 페이지는 에러를 발생한다.


또 JSP 코드에서 <jsp:forward>태그를 만나면 이후에 코드는 실행하지 않고 바로 요청 흐름을 이동시키기 때문에 주위 해야 한다.


<jsp:forward>는 웹 콘테이너 내에서 요청의 흐름을 이동시키기 때문에, 웹 브라우저는 전혀 요청의 흐름이 이동됐다는 사실을 알지 못한다. 따라서 웹 브라우저의 주소는 변경되지 않으며 출력결과도 A1.jsp의 결과라고 여기게 된다.


파라미터 전달법

  1. <jsp:forward page="moveTo.jsp">
  2. <jsp:param name="first" value="BK"/> //표현식 사용불가
  3. <jsp:param name="last" value="choi"> //표현식 사용가능
  4. </jsp:forward>

리다이렉트와 자바 스크립트를 이용한 페이지 이동#

<jsp:forward> 태그가 웹 콘테이너 내부에서 이루어지는 페이지 흐름이라면 리다이렉트 방식이나 자바 스크립트 방식은 웹 브라우저 차원에서 페이지가 이동하길 원할 때 쓴다.

  1. <%
  2. response.sendRedirect("/to/move.jsp");
  3. %>

리다이렉트 방식은 웹 브라우저에 어떤 페이지로 이동하라http://subclipse.tigris.org/update_1.0x는 명령를 전달하는 반면, 자바 스크립트 방식은 웹 브라우저가 자바 스크립트를 실행하는 시점에서 페이지를 이동하게 된다.

  1. <script language="JavaScript">
  2. location.href = "/list.jsp";
  3. </script>

파라미터를 전달하는 방법은 get방식으로 주소 뒤에 파라미터를 붙이는 방법이 있다.


보통 글 쓰기 완료 후, 글 목록으로 이동할때 보통 리다이렉트나 자바 스크립트 방식을 사용한다.


Subclipse 설치방법#

이클립스의 메뉴에서

Help -> Software Updates -> Find and Install 을 선택한다.

새로 생긴 창에서 Next를 한번 누르면 New Remote Site 버튼을 볼 수 있다. 클릭한 후

http://subclipse.tigris.org/update_1.0.x 를 주소창에 입력한다.

그러면 프로그램을 다운로드 하여 나머지 설치과정을 진행할 수 있다.


JSP 페이지 모듈화#

<jsp:include> 액션 태그를 이용한 페이지 모듈화#
  1. <jsp:include page="포함할페이지" flush="true"/

flush : 지정한 jsp페이지를 실행하기 전에 출력 버퍼의 플러스 여부를 지정한다. true이면 <jsp:include> 액션 태그를 만나기 전까지 출력버퍼에 쌓여있던 내용이 출력되고 페이지 흐름이 이동된다.


  • 요청 파라미터를 통해서 값 전달하기
  1. <jsp:include page="/module/top.jsp" flush="false">
  2. <jsp:param name="param1" value="value1"/>
  3. <jsp:param name="param2" value="value2"/>
  4. </jsp:include>

request 기본객체를 이용해서도 값을 전달할 수 있다.


레이아웃 템플릿 구현 방법#

useTemplate.jsp                                      -> template.jsp                     ->  left.jsp

(메인페이지를 지정하여 파라미터로 넘겨줌)      (페이지의 레이아웃만 구현)       top.jsp

                                                                                                              내용페이지


include 디렉티브를 이용한 중복된 코드 삽입#
  1. <%@ include file="포함할 파일.jspf" %>

JSP 파일을 자바 파일로 변환하기 전에 지정된 파일의 내용을 해당 위치에 삽입시키고, 그 결과 생긴 자바 파일을 컴파일한다. 따라서 삽입되는 파일에서 선언한 변수를 삽입하는 JSP 에서 사용할 수 있다.

주로 확장자로 jspf를 사용한다.


  • 모든 JSP 페이지에서 사용되는 공용 변수 지정
  • 저작권 표시와 같은 간단하면서도 모든 페이지에서 중복되는 문장

등에 사용된다.


쿠키#

웹 서버가 웹 브라우저에 정보를 전달하는 방법.

'쿠키'는 웹 브라우저가 보관하고 있는 데이터로 웹 서버에 요청을 보낼 때 함께 전송된다. 웹 서버와 웹 브라우저 양쪽에서 생성할 수 있다.

  1. 쿠키 생성 - jsp 에서 쿠키는 주로 웹 서버 측에서 생성, 응답데이터와 함께 웹 브라우저에 전송
  2. 쿠키 저장 - 쿠키 저장소에 보관
  3. 쿠키 전송 - 웹 브라우저는 한번 저장된 쿠키를 매번 요청이 있을 때마다 웹 서버에 전송

일단 웹 브라우저에 쿠키가 저장되면 쿠키가 삭제되기 전까지는 매번 웹서버에 전송되기 때문에, 웹 어플리케이션을 사용하는 동안 지속적으로 유지해야 하는 정보는 쿠키를 사용해서 저장하면 된다.


쿠키의 구성#
  • 이름
  • 유효 시간
  • 도메인 - 쿠키를 전송할 도메인
  • 경로 - 쿠키를 전송할 요청 경로
쿠키의 사용#

쿠키의 생성

  1. <%@ page import = "java.net.URLEncoder" %>
  2. <%
  3. Cookie cookie = new Cookie("cookieName",URLEncoder.encode("하하"));
  4. response.addCookie(cookie);
  5. %>

알파벳과 숫자 등의 값이 아닌 경우 BASE64 인코딩으로 처리해 주어야 한다.


쿠키값 읽어 오기

  1. Cookie[] cookies = request.getCookies();

쿠키는 응답헤더 형태로 웹 브라우저에 전달되기 때문에, 쿠키 역시 출력버퍼가 플러시된 이후에는 새롭게 추가할 수 없다. 쿠키의 추가 및 변경 작업은 반드시 출력 버퍼가 플러시 되기 전에 처리해 주어야 한다.


쿠키의 삭제

  1. cookie.setMaxAge(0);

유효시간을 0으로 지정해주면 웹브라우저가 관련 추키를 삭제.


쿠키의 도메인



Posted by 1010