모델2방식


1. 표현언어 


2. JSTL



EL(Expression Language: 표현언어) 

EL(Expression Language: 표현언어) = ${변수} => 출력이라는점은 <%= %> 와같지만 기능은 다르다.


${변수}는 
Page
request
session
application
자바빈
의 속성값을 가져올수있다.

(키, 값) Map객체에서 ${변수}는key 와 value를 읽어올수있음

<%= %> 한정적인 :  출력 객체를 생성선언하고 메소드를 사용 해서 가져옴 : 

${ } 표현식과 읽어오는 범위가 서로 다르다.

EL은 연산이 가능하다.


표현식
${2 + 5}7
${"10" + 5}15
${"십" + 5}에러발생(EL에서의 +는 연산만 연결+없음) 
EL 에서는 문자열을 자동으로 형변환시켜서 연산을 진행한다.
${null + 5}5  : EL 에서는 null 이 연산에 들어가면 0으로 치환
${4/5}0.8    : EL 에서 연산은가능하지만 원하는 값이 안나오고 다른값을 출력받을수도 있으니 
           나누기는 미리연산한뒤 출력하자
${5 div 6}0.8333333333333334     : EL 에서 연산은가능하지만 원하는 값이 안나오고 다른값을 
                                  출력받을수도 있으니 나누기는 미리연산한뒤 출력하자
${5 mod 7}5
${2 < 3}true
${2 gt 3}false
${3.1 le 3.2}true
${(5 > 3) ? 5 : 3}5
${someValue == '2011'}true (someValue는 2011로 셋팅) : 순수자바에서는 == 는 객체비교인데 
                                                EL에서는 문자비교도 == 로 가능
${empty someValue2}true (someValue2는 null)
${header["host"]}localhost:8080
${header["user-agent"]}Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2)


수치 연산자   {   + : 덧셈 , - : 뺄셈 , * : 곱셈 , /또는 div : 나눗셈 ,  % 또는 mod :  나머지 }

비교 연산자  { == 또는 eq : ,  != 또는 ne, < 또는 lt , > 또는 gt  , <= 또는 le,  >= 또는 ge }

논리 연산자 { &&또는 and : || 또는 or : ! 또는 not }

empty 연산자 : 객체가 있느냐 null이냐,데이터가 있느냐 없느냐 두가지를 동시에 체크해준다.
(순수자바에서 if(msg !=null && !msg.equals("")) 를 한방에 처리해줌)
{ null,""빈문자열,길이가0,빈MAP,빈Collection => true 리턴   :  이외는 false 를 리턴 }

비교선택 연산자 

<수식> ? <true 값1> : <false 값2>

연산자들의 우선순위 

[].
()
- (단일) not ! empty
* / div % mod
+ -
< > <= >= it gt le ge
== != eq ne
&& and
|| or
? :


특수문자 처리하기

표현식 기본 문법 : \${expr}, \#{expr} => 출력 "${expr}, #{expr} "



표현언어의 기본(내장)객체

pageContext  : JSP의 page 기본객체와 동일하다

pageScope                     
requestScope                  각 객체에 저장된 속성의 <속성,값> 매핑을 저장한 Map객체
sessionScope
applicationScope


param  : request.getParameter(이름)  기능을 구현
param  : request.getparameterValues(이름) 와 동일

cookie  : <쿠키이름, Cookie> 매핑을 저장한 Map 객체 request.getCookies()로 구한 Cookie배열로부터 맵핑
initparam : application.getInitParameter(이름) 과 동일기능




JSTL (표준 태그 라이브러리)

 lib


jstl-1.2.jar




커스텀 태그 : 사용자생성 태그

===복습===
액션태그 : 컨테이너에서 기본 제공태그
<jsp:include />
<jsp:forward />
<jsp:useBean />
<jsp:setProperty />
<jsp:getProperty />

=========

JSP                JSTL                     JSTL+EL (커스텀태그)
                                                   (기본적으로 EL을 알고있어야 한다.)                                   
Struts                                          JSP 4개의 영역에서 EL로 뽑아낸다.                                                                             
                                                   
Spring

==========================================================================================

변수 지원 태그 

EL  => JSP 4개영역에서만 데이터를 읽어옴
JSTL => JSP 4개영역에서만 데이터를 읽어옴


<% 
        //EL은 스크립트릿 영역 변수선언 데이터를 가져오지못한다. 
        String str="행복";
        //읽어드릴려면
        pageContext.setAttribute("aaa",str);
%>


${str} => 못불러옴
${aaa} => 불러옴


<c:set /> 태그  => setAttribute (속성명, 속성값) => jsp 4개영역에 저장
   ${속성명}     => getAttribute (속성명)  => jsp 4개영역에서 값을 가져옴
<c:remove />   => removeAttribute(속성명)




흐름 제어 태그

<c:if> 태그 : 단일조건 체크만 가능하다.

항상 true. 몸체 내용을 실행함
<c:if test="true"> ...  </c:if>

항상 false. 몸체 내용을 실행하지않음
<c:if test="false"> ...  </c:if>

EL의 결과값이 true인 경우  몸체 내용을 실행함
<c:if test="${expr}"> ...  </c:if>

표현식의 결과값이 true 인 경우 몸체 내용을 실행함
<c:if test="<%=expr %>"> ...  </c:if>


<c:choose>,<c:when>,<c:otherwise> 태그
다중 조건체크 choose에서  첫번째 true 값인 when 에서 출력하고 빠져나옴

<c:forEach> 태그

확장 for문 
<c:forEach var="변수" items="아이템">
...
<tr>
     <td align="right" bgcolor="#ffffff">
   ${변수사용}
</td>
...
</c:forEach>

기본for문
<c:forEach var="i" begin="1" end="10" step="2">
${i} 사용
</c:forEach>

기본for문 + 확장for문  (index 2~4 출력)
<c:forEach var="i" items="${intArray}" begin="2" end="4">
[${i}]
</c:forEach>

<c:forEach var="i" items="<%= someItemList %>" varstatus="status">
${status.index +1} 번재 항목 : ${iteml.name}
</c:forEach>

index : 루프실행에서 현대 인덱스
count : 루프 실행 횟수
begin : begin 속성값
end :  end 속성값
step : step 속성값 = 반복증가량
first : 현재 실행이 첫번째 실행인경우 true
last : 현재 실행이 루프의 마지막 실행인 경우 true
current :  컬렉션 중 현재 루프에서 사용할 객체

<c:forTokens> 태그
StringTokenizer 기능
<c:forTokens var="token" items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색" delims=",.">

<c:import> 태그
특정 URL의 결과를 읽어와 현재 위치에 삽입하거나 EL 변수에 저장할때 사용.

<c:import url="URL" [var="변수명"] [scope="영역"] [charEncoding="개릭터셋"]>

</c:import>

<c:import url="http://search.daum.net/search">

  <c:param name="nill_suggest" value="btn"/>

  <c:param name="q" value="보라매공원"/>

</c:import>


<c:url> 태그

링크가능한 주소를 만들어줌

<c:url value="URL" [var="varName"] [scope="영역"]>

   <c:param name="이름" value="값"/>

</c:url>

<c:url value="/view/list.jsp"/>


<c:redirect> 태그
<c:redirect url="URL" [context="콘텍스트경로"]>

  <c:param name="이름" value="값"/>

</c:redirect>

<c:redirect url="/use_c_set.jsp" />


//response.sendRedirect()를 많이씀

<c:out> 태그
//EL을 많이씀

 
<c:catch> 태그
<c:catch var="exName">

.. 예외가 발생할 수 있는 코드 ...

</c:catch>

...

${exName}사용


예외처리

<c:catch var="ex">
name 파라미터의 값 =<%=request.getParameter("name") %><br/>
<% if(request.getParameter("name").equals("test")){ %>
${param.name}은 test입니다.
<%} %>
</c:catch>
<p/>
<c:if test="${ex !=null}">
예외가 발생하였습니다.:<br/>
${ex}
</c:if>




국제화 태그

플러그인 설치
 jp.gr.java_conf.ussiy.app.propedit_4.8.1_for_eclipse3.0.zipD:\javaWork\eclipse

features,plugins 덮어쓰기



한글로 입력해도 유니코드로 저장된다.


message.properties

TITLE = MadVirus's Learning JSP 2.0
GREETING = HI! I'm BK
VISITOR = Your ID is {0}.

message_ko.properties

TITLE = 최범균의 JSP 2.0 배우기
GREETING = 안녕하세요. 최범균입니다.
VISITOR = 당신의 아이디는 {0}입니다.

파일로저장될때는  유니코드로 자동 변경

TITLE = \ucd5c\ubc94\uade0\uc758 JSP 2.0 \ubc30\uc6b0\uae30
GREETING = \uc548\ub155\ud558\uc138\uc694. \ucd5c\ubc94\uade0\uc785\ub2c8\ub2e4.
VISITOR = \ub2f9\uc2e0\uc758 \uc544\uc774\ub514\ub294 {0}\uc785\ub2c8\ub2e4.

<fmt:setBundle> 태그와 <fmt:message> 태그
use_message_tag.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!-- 강제로 지역값 설정(영문) -->
<%-- <fmt:setLocale values="en"/> --%>
<fmt:bundle basename="resource.message">
<!-- 가져와서 변수에 넣음  -->
<fmt:message key="TITLE" var="title"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>${title}</title>
</head>
<body>
<!-- 가져와서 변수가없으니 바로 출력 -->
<fmt:message key="GREETING" />
<br/>
<c:if test="${! empty param.id}">
<fmt:message key="VISITOR">
    <fmt:param value="${param.id}" />
</fmt:message>
</c:if>
</body>
</html>
</fmt:bundle>


지역 미국 영어로 바꾸기

자동으로 영문화




<fmt:formatNumber> 태그

+ Recent posts