210623_1(EL, XML매핑, JSTL)
MODEL2의 특징
(MVC pattern)
기존에는 컨트롤기능(요청을 받아서 처리하는)을 jsp가 했었다.
model2가 되면 그 컨트롤 기능을 servlet으로 만들게 되며, servelet은 직접호출이 불가능 하므로,
web.xml에 매핑하여 사용한다.
Servelet : Front controller 기능 -- 모든 요청을 한 곳으로 집합하여 처리하는 패턴
일반적의미 - java로 구현한 웹문서. 정적기능이 강함.
동적기능을 보완하기 위해서 jsp가 만들어졌다.
<요청분석 --> 액션클래스 명령전달 --> 메시지 리턴 --> 해당뷰로 이동>
web.xml : 일명 배치기술자라 부르고 웹어플 내부의 자원을 어떻게 호출하여 사용할지 기술하는 파일이다.
웹어플 내부에서 사용하는 환경 변수를 지정할 수 있다.
ex) 브라우저 --- xxx.do 호출경로 ---> xxx.java서블릿
최근에는 @어노테이션을 이용하는 형태로 변하고 있다.
Action 클래스 : FC의 명을 받아서 DAO의 business메서드를 호출 역할을 하고 결과를 받아서
(command) request or session에 저장한다.
FC에서 액션클래스를 호출하기 위하여 매핑하는 파일이 xxx.proerties를 이용한다.
(최근에는 jsp나 java를 이용하기도한다)
뷰(jsp) : request 나 session에 저장된 내용을 읽어서 화면에 출력하기 위하여 주로 EL이나 JSTL을 활용하게 된다.
DAO, DTO, DBCP 등등은 불변이다.
DAO, DTO에 대한 frame work이 별도로 존재하며, 우리는 spring공부할때,
ibatis 또는 mybatis라는 프레임워크를 사용할것이다.
EL express language
EL은 출력부를 대신하는 언어이다.
jstl의 태그 속성에 value값을 지정할때 주로 사용한다.
기존 : <%=변수나 문자열%>
EL : ${변수나 문자열, 객체, 함수,,,,,}
특징 1 : null값에 관대하다
<%= null %> -- nullpoint exception발생
${null} -- 오류 없음
특징 2 : 형변환을 자동으로 해준다
특징 3: 변수와 연산자를 포함한다.
특징 4 : jsp영역(page영역(pagecontext에저장),requuest,session,application)의 빈이나
속성도 el변수로 사용될 수 있다.
pageContect.setAttribute("myname2",myname); 이렇게 저장한다.
특징 5 : 내장객체를 지원한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>간단한 표현언어(EL)예제</title>
</head>
<body>
<h3>간단한 표현언어(EL)예제</h3>
<p>
연산자를 사용한 예와 내장 객체의 사용한예:
<table border="1">
<thead>
<td><b>표현식</b></td>
<td><b>값</b></td>
</thead>
<tr>
<td>\${2+5}</td>
<td>${2+5}</td>
</tr>
<tr>
<td>\${4/5}</td>
<td>${4/5}</td>
</tr>
<tr>
<td>\${5 div 6}</td>
<td>${5 div 6}</td>
</tr>
<tr>
<td>\${5 mod 7}</td>
<td>${5 mod 7}</td>
</tr>
<tr>
<td>\${2 < 3}</td>
<td>${2 < 3}</td>
</tr>
<tr>
<td>\${2 gt 3}</td>
<td>${2 gt 3}</td>
</tr>
<tr>
<td>\$(2 gt 3}</td>
<td>${2 gt 3}</td>
</tr>
<tr>
<td>\${3.1 le 3.2}</td>
<td>${3.1 le 3.2}</td>
</tr>
<tr>
<td>\${(5>3) ? 5 : 3}</td>
<td>${(5>3) ? 5 : 3}</td>
</tr>
<tr>
<td>\${header["host"]}</td>
<td>${header["host"]}</td>
</tr>
<tr>
<td>${header["user-agent"]}</td>
<td>${header["user-agent"]}</td>
</tr>
</table>
</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>표현언어의 사용예제2</title>
</head>
<body>
<h3>표현언어의 사용예제2 -request의 파라미터값 처리 </h3>
<p>
<form action="eLEx2.jsp" method="POST">
이름 : <input type="text" name="name" value="${param['name']}">
<input type="submit" value="확인">
</form>
<p>
이름은 : $(param.name) 입니다.
</body>
</html>
xml 문서 작성요령
1) xml문서를 선언한다.
<?xml version="1.0" encoding="UTF-8"?>
2) root태그를 지정한다.
<taglib>
</taglib>
3) root태그에 네임스페이스를 지정한다.
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd "
version = "2.0"
네임스페이스에서 제공하는 태그를 사용할 수 있다.
xeb.xml 매핑하기
정리할것
package ch15.el;
public class Compute {
public static int add(String x, String y) {
int a = 0;
int b = 0;
try {
a = Integer.parseInt(x);
b = Integer.parseInt(y);
}catch(Exception e) {}
return a + b;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd "
version = "2.0">
<description>el호출 함수실행</description>
<tlib-version>1.0</tlib-version>
<short-name>ELfunctions</short-name>
<uri>/ELfunctions</uri>
<function>
<description>x와 y의 합</description>
<name>add</name>
<function-class>ch15.el.Compute</function-class>
<function-signature>
int add(java.lang.String,java.lang.String)
</function-signature>
</function>
</taglib>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>el_jstl</display-name>
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/tlds/el-functions.tld</taglib-uri>
<taglib-location>\WebContent\WEB-INF\tlds\el-functions.tld</taglib-location>
</taglib>
</jsp-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="test" uri="/WEB-INF/tlds/el-functions.tld"%>
<%request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>표현언어에서 함수사용하기</title>
</head>
<body>
<h3>표현언어에서 함수사용하기 - 두 숫자의 덧셈</h3>
<p>
<form action="eLEx3.jsp" method="post">
X : <input type="text" name="x" value="${param['x'] }">
<br>
Y : <input type="text" name="y" value="${param['y'] }">
<input type="submit" value="덧셈">
</form>
<p>
합은 : ${test:add(param["x"],param["y"]) } 입니다.
</body>
</html>
JSTL 사용하기
jstl = jsp standard tag library, 일종의 액션태그 모음집과 같다.
jstl은 서버 스크립트이다 <-- 톰캣이 해석한다.
https://tomcat.apache.org/download-taglibs.cgi
tomcat - taglibs
4개의 jar파일을 받아서 WEB/INF/lib 아래 붙여 넣는다.
사용
jsp문서에서 taglib 접두어 설정하고
ctrl+space jstl태그 목록 선택하여 사용
결국 --- jsp문서에서 jsp스크립트(<%스크립트%>)를 사용하는 대신에
jstl 태그<c:if test=""></c:if>를 사용하여 뷰를 구성하게 된다.
뷰 문서 가독성을 높여준다.
set태그
주의1)
<접두어:태그명 속성="${값}" />
<c:set var="변수명" value="값" scope="영역">값</c:set>
scope="page" 인경우 pageContext에 저장하는 것과 같다.
주의2)
one=100 two=200
${one+two} ===>300
${one} + ${two} ===> 100200
데이터형이 동적으로 결정된다.
입력되는 값에 따라서 데이터형이 결정된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var ="num1" value="${20}" />
<c:set var="num2">
10.5
</c:set>
<c:set var="num3" value="${num1+num2}"/>
<c:set var="today" value="<%=new java.util.Date()%>"/>
<hr>
<h1>set Tag & remove Tag</h1>
<li>변수 num1 = ${num1}
<li>변수 num2 = ${num2}
<li>변수 num3 = ${num3}
<li> \${num1 }+${num2 } =${num1 }+${num2 }
<li> \${num1+num2 } =${num1+num2 }
<li>오늘은${today }입니다.
<hr>
<c:remove var="num1"/>
<li> 삭제한 후의 num1 = ${num1 }
<li> 삭제한 후의 num1 + num2 = ${num1+num2 }
<hr>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="map" value="<%=new java.util.HashMap() %>"/>
<hr>
<h1>jstlAPtoject - setTag2.jsp</h1>
<c:set target="${map }" property="name1" value="홍길동"/>
<li>변수 map에 저장된 name1의 값 : ${map.name1 }
<c:set target="${map }" property="name2" value="이순신"/>
<li>변수 map에 저장된 name2의 값 : ${map.name2 }
<hr>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<hr>
<h1>jstlAProject - ifTag.jsp</h1>
<c:if test="true">
<li>무조건 실행된다..
</c:if>
<c:if test="${param.name=='bk'}">
<li> name 파라미터 값이 ${param.name }입니다.
</c:if>
<c:if test="${18 < param.age }">
<li> 당신의 나이는 8세 이상입니다..
</c:if>
<hr>
choose태그 교안하고 내용다름
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<hr>
<h1>japlAProject - chooseTag.jsp</h1>
<c:choose>
<c:when test="${param.jumsu >= 90}">
<li>수 입니다
</c:when>
<c:when test="${param.jumsu >= 80}">
<li>우 입니다
</c:when>
<c:when test="${param.jumsu >= 70}">
<li>미 입니다
</c:when>
<c:when test="${param.jumsu >= 60}">
<li>양 입니다
</c:when>
<c:otherwise>
<li>가 입니다
</c:otherwise>
</c:choose>
<hr>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
java.util.HashMap mapData = new java.util.HashMap();
mapData.put("name","홍길동");
mapData.put("today",new java.util.Date());
%>
<c:set var="intArray" value="<%=new int[]{1,2,3,4,5} %>"/>
<c:set var="map" value="<%=mapData %>"/>
<hr>
<h1>jstlAProject - forEachTag.jsp</h1>
<c:set var="sum" value="0"/>
<c:forEach var="index" begin="1" end="100" step="2">
<c:set var="sum" value="${sum+index }"/>
</c:forEach>
<li>1부터 100까지 홀수의 합 : ${sum}
<hr>
<c:forEach var="index" begin="1" end="9">
<li>4 * ${index} = ${4*index}
</c:forEach>
<hr>
<c:forEach var="index" items="${intArray}" begin="2" end="4">
[${index}]
</c:forEach>
<hr>
<c:forEach var="index" items="${map}">
<li>${index.key} = ${index.value}
</c:forEach>
<hr>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<hr>
<h1>jstlAProject - forTokensTag.jsp</h1>
<li>콤마(,)와 점(.)을 구분자로 사용해보자.
<c:forTokens items="빨강색, 주황색.노란색.초록색, 파랑색, 남색.보라색" delims="," var="token">
<li> ${token}
</c:forTokens>
<hr>
URL처리 태그
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:import url="/url.jsp" var="urlex"/>
<c:import url="http://localhost:8888/el_jstl/header.jsp" var="head">
<c:param name="id" value="madvirus"/>
</c:import>
<c:import url="/footer.jsp" var="foot"/>
<hr>
<h1>jstlAProject - importTag.jsp</h1>
${head}
${urlex}
${foot}
<hr>
원래 출력할때는 c:out 으로 한다
escapeXml --> html출력여부
<c:out value="${head}" escapeXml="false"/><hr>
<c:out value="${urlex}" escapeXml="false"/><hr>
<c:out value="${foot}" escapeXml="false"/><hr>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:url var="url1" value="../shopping.do"/>
<c:url var="url2" value="/shopping.do">
<c:param name="Add" value="isdn-001"/>
</c:url>
<c:url var="url3" value="http://localhost:8888/el_jstl/setTag.jsp"/>
<ul>
<li>URL1 = ${url1}
<li>URL2 = ${url2}
<li>URL3 = ${url3}
</ul>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<hr size="1">
<c:if test="${param.id !=null }">
[HEADER]${param.id}님의 방문을 환영합니다.
</c:if>
<hr size="1">
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<hr size="1">
<center>footer area</center>