영보의 SystemOut.log

[JSP] 표현 언어(EL) / EL 내장객체 / EL 예제 본문

국비교육(아이티센 입사교육)/JSP

[JSP] 표현 언어(EL) / EL 내장객체 / EL 예제

영보로그 2021. 10. 20. 16:25
반응형
자바/스프링 기반 디지털 융합 웹 개발자 양성과정

 

 

표현 언어(EL)

 - 표현 언어(Expression Language)는 처음 JSTL(JSP Standard Tag Library)이 소 개되었을 때 나온 것으로, SPEL(Simplest Possible Expression Language)에 기 본을 두고 있다

 - 따라서 처음에는 JSTL의 부분처럼 사용되었으나 지금은 JSP 스펙에 포함됨으 로써 JSTL과 상관없이 JSP 페이지 내에서 표현식 등을 대체하는 용도로 사용될 수 있다

 - 표현 언어는 자바 빈즈 속성 값을 보다 쉽고 제약을 덜 받는 방법으로 사용하 기 위해 나온 것으로 JSP 파일이 useBean 액션 태그나 표현식 등으로 복잡해 지는 것을 막고 일종의 템플릿 코드처럼 사용할 수 있도록 해준다

 

 

 

표현 언어 기본 문법

- 표현 언어는 ‘$’로 시작한다

- 모든 내용은 ‘{표현식}’ 과 같이 구성된다

- 표현식에는 기본적으로 변수명, 혹은 ‘속성명.메소드명’ 구조로 이루어진다

- 표현식에는 부가적으로 숫자, 문자열, boolean, null과 같은 상수 값도 올 수 있다

- 표현식에는 기본적인 연산이 가능하다

 

 

 

내장 객체

- 표현 언어에서는 효율적으로 JSP와 상호작용하도록 다음과 같은 내장 객체를 지원한다

내장 객체 기능
pageScope page 범위에 포함된 속성 값에 접근할 수 있는 객체
requestScope request 범위에 포함된 속성 값에 접근할 수 있는 객체
 sessionScope  session 범위에 포함된 속성 값에 접근할 수 있는 객체
applicationScope application 범위에 포함된 속성 값에 접근할 수 있는 객체
 param request.getParameter(“xxx”)로 얻을 수 있는 값들 ${param.xxx} 처럼 사용
paramValues request.getParameterValues(“xxx”) 와 동일 기능 수행 ${paramValues.xxx} 처럼 사용

 

 

 

예제

 

ELJstl_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ELJstl_form 페이지</title>
</head>
<body>
	<h3>표현언어의 파라미터값 처리 예제</h3>
	<form name="myForm" method="POST" action="ELJstl_view.jsp">
		이름 : <input type="text" name="name" /> <br> <br>
		과목 선택 : <input type="checkbox" name="lang" value="HTML"/>HTML<br>
		과목 선택 : <input type="checkbox" name="lang" value="CSS"/>CSS<br>
		과목 선택 : <input type="checkbox" name="lang" value="JavaScript"/>JavaScript<br>
		과목 선택 : <input type="checkbox" name="lang" value="JSP"/>JSP<br>
		<br>
		<input type="submit" value="OK" />
		<input type="reset" value="Cancel" />
	</form>
</body>
</html>

 

ELJstl_view.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ELJstl_view 페이지</title>
</head>
<body>
	<%-- [문제] 먼저 스크립트릿(<% %>)과 표현식(<%= %>), request 객체, out 객체를 적용하여  코딩한다.
				폼에서 넘어온 이름과 선택한 과목들을 크롬 브라우저에 출력하세요.
		여러분이 코딩 ㄱㄱ --%>
		
	
	<%-- <% String name = request.getParameter("name"); %>
		이름은 <%= name %>입니다. <br><br>
		
		선택한 과목은 <br>
		<%
			String[] langs=request.getParameterValues("lang");
			for(int i=0; i<langs.length; i++){
				out.println(langs[i] + "<br>");
			}
		%>	
	--%>
		
	<%-- [문제] 표현언어와 JSTL을 적용하여 코딩
				폼에서 넘어온 이름과 선택한 과목들을 크롬브라우저에 출력하세요.
				여러분이 코딩 요망--%>
				
	이름은 ${param.name}입니다. <br><br>
	
	선택한 과목은 <br>
	<c:forEach var="item" items="${paramValues.lang}">
		${item}<br>
	</c:forEach>
</body>
</html>

ELJstl_form.jsp

ELJstl_view.jsp

 

 

 

예제2

- JSP 동적 파일 업로드

 http://www.servlets.com/cos/

 

Servlets.com | com.oreilly.servlet

 

www.servlets.com

cos-20.08zip 내려받고 cos.jar파일 lib폴더에 넣어주기.

 

 

fileSelect.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fileSelect 페이지</title>
<script>
	function fileCheckSize(input){
		if(input.files && input.files[0].size > (20*1024*1024)){
			alert("파일의 사이즈가 20MB를 초과했습니다.");
			input.value = null;
		}
	}
</script>
</head>
<body>
	<form name="fileUploadForm" method="POST" enctype="multipart/form-data" action="viewPage.jsp">
	작성자 <br>
	<input type="test" name="name" /><br>
	
	제목 <br>
	<input type="test" name="subject" /><br>
	
	<h4><font color="red">*업로드할 파일은 최대 20MB까지 해라 진짜로*</font></h4>
	
	업로드할 파일 <br>
	<input type="file" name="uploadFile" onchange="fileCheckSize(this)" />
	<input type="submit" value="파일 올리기" />
	</form>
</body>
</html>

 

viePage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 추가 -->
<%@ page import="com.oreilly.servlet.MultipartRequest,
				com.oreilly.servlet.multipart.DefaultFileRenamePolicy,
				java.util.*,
				java.io.*" 
%>    

<%
	String savePath = "C:/FileUpload/filestorage";
	String encType = "UTF-8";
	int maxSize = 20*1024*1024;	// 파일의 사이즈를 최대 20MB 까지 제한
	
	// 반드시 예외처리 해야함
	try {
		// 	MultipartRequest 클래스는 파일 업로드를 직접적으로 담당하는 클래스이다.
		MultipartRequest multi = null;
		multi = new MultipartRequest(request,savePath,maxSize,encType, new DefaultFileRenamePolicy());
		
		String name = multi.getParameter("name");
		String subject = multi.getParameter("subject");
		
		out.println("작성자 : "+name+"<br>");
		out.println("제목 : "+subject+"<br>");
		out.println("<br>");
		
		Enumeration files = multi.getFileNames();
		
		while(files.hasMoreElements()){
			String fname = (String)files.nextElement();
			String original = multi.getOriginalFileName(fname);
			String filename = multi.getFilesystemName(fname);
			String type = multi.getContentType(fname);
			File f = multi.getFile(fname);
			
			out.println("파일 업로드 객체 이름 : " + fname + "<br>");
			out.println("실제 파일 이름 : " + original + "<br>");
			out.println("저장된 파일 이름 : " + filename + "<br>");
			out.println("파일 타입 : " + type + "<br>");
			
			if(f != null){
				out.println("파일 크기 : "+ f.length());
				out.println("<br>");
			}
		}
		
		
	}catch(Exception e){
		System.out.println(e);
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>viewPage</title>
</head>
<body>

</body>
</html>

 

fileSelect.jsp
파일 20mb 초과 시 뜨는 alert 창

viePage.jsp

반응형