[MVC 3-7] EL 내장객체 - Scope Attribute(필터클래스)

임승현·2023년 1월 25일
0

MVC

목록 보기
10/27
post-thumbnail

🐧예제-1

📃implicit_scope.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//JSP 내장객체에 따라 속성값을 저장하여 사용할 수 있는 범위가 다르게 구분
	//속성값 사용범위(Scope) : Page Scope, Request Scope, Session Scope, Application Scope
	pageContext.setAttribute("pageName", "홍길동");//Page Scope
	request.setAttribute("requestName", "임꺽정");//Request Scope
	session.setAttribute("sessionName", "전우치");//Session Scope
	application.setAttribute("applicationName", "일지매");//Application Scope
	//
	//JSP 내장객체가 다른 경우 속성명을 동일하게 설정하여 속성값 저장 가능
	// → JSP 내장객체가 같은 경우 속성명을 동일하게 설정하면 기존 속성값 대신 새로운 속성값 저장 - 변경 처리
	pageContext.setAttribute("name", "홍길동");//Page Scope
	request.setAttribute("name", "임꺽정");//Request Scope
	session.setAttribute("name", "전우치");//Session Scope
	application.setAttribute("name", "일지매");//Application Scope
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>EL 내장객체 - Scope Attribute</h1>
	<hr>
	<h3>스코프 속성명이 서로 다른 경우</h3>
	<ul>
		<li>pageName 속성값(Page Scope) = ${pageName }</li>
		<li>requestName 속성값(Request Scope) = ${requestName }</li>
		<li>sessionName 속성값(Session Scope) = ${sessionName }</li>
		<li>applicationName 속성값(Application Scope) = ${applicationName }</li>
	</ul>
	<hr>
	<h3>스코프 속성명이 서로 같은 경우</h3>
	<%-- EL 표현식의 속성명으로 속성값을 검색하여 제공하는 순서 존재 --%>
	<%-- → Page Scope >> Request Scope >> Session Scope >> Application Scope --%>
	<%-- → JSP 내장객체에 동일한 이름의 속성명이 존재할 경우 먼저 검색된 속성값을 제공받아 출력 --%>
	<%-- → JSP 내장객체의 속성명을 다른게 설정하는 것을 권장 --%>
	<%-- 
	<ul>
		<li>pageName 속성값(Page Scope) = ${name }</li>
		<li>requestName 속성값(Request Scope) = ${name }</li>
		<li>sessionName 속성값(Session Scope) = ${name }</li>
		<li>applicationName 속성값(Application Scope) = ${name }</li>
	</ul>
	--%>
	<%-- --%>
	<%-- JSP 내장객체의 속성명이 동일한 경우 EL 표현식에서 EL 내장객체를 사용하여 스코프 속성값을 구분하여 출력 가능  --%>
	<%-- → EL 내장객체 : pageScope, requestScope, sessionScope, applicationScope --%>
	<ul>
		<li>pageName 속성값(Page Scope) = ${pageScope.name }</li>
		<li>requestName 속성값(Request Scope) = ${requestScope.name }</li>
		<li>sessionName 속성값(Session Scope) = ${sessionScope.name }</li>
		<li>applicationName 속성값(Application Scope) = ${applicationScope.name }</li>
	</ul>
</body>
</html>

🐧예제-2(필터클래스)

📃implicit_param_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>EL 내장객체 - Request Parameter</h1>
	<hr>
	<form action="implicit_param_action.jsp" method="post">
		<div><b>개인정보</b></div>
		<div>이름 : <input type="text" name="name"></div>
		<div>주소 : <input type="text" name="address"></div>
		<br>
		<div><b>좋아하는 음식</b></div>
		<div>음식-1 : <input type="text" name="food"></div>
		<div>음식-2 : <input type="text" name="food"></div>
		<br>
		<button type="submit">전송</button>
	</form>
</body>
</html>

📃implicit_param_action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 사용자 입력값을 전달받아 클라이언트에게 전달하는 JSP 문서 --%>
<%-- POST 방식으로 요청하여 리퀘스트 메세지 몸체부에 저장되어 전달하는 값에 대한 캐릭터셋 변경 --%>
<%-- → 인코딩 필터를 이용할 경우 필터에 의해 웹프로그램 실행 전 캐릭터셋 변경 가능 --%>
<%-- request.setCharacterEncoding("utf-8"); --%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>EL 내장객체 - Request Parameter</h1>
	<hr>
	<h3>EL 미사용</h3>
	<ul>
		<li>이름 = <%=request.getParameter("name") %></li>
		<li>주소 = <%=request.getParameter("address") %></li>
		<%-- 같은 이름으로 전달되는 값이 여러개 있는 경우 첫번째 전달값만 반환받아 사용 --%>
		<%-- 
		<li>음식-1 = <%=request.getParameter("food") %></li>
		<li>음식-2 = <%=request.getParameter("food") %></li>
		--%>
		<%-- 같은 이름으로 전달되는 값이 여러개 있는 경우 getParameterValues() 메소드로 모든 전달값을 문자열 배열로 반환받아 사용 가능 --%>
		<li>음식-1 = <%=request.getParameterValues("food")[0] %></li>
		<li>음식-2 = <%=request.getParameterValues("food")[1] %></li>
	</ul>
	<hr>
	<h3>EL 사용</h3>
	<ul>
		<%-- EL 표현식에서 전달값의 이름을 param 내장객체 또는 paramValues 내장객체의 맵키로 사용하여 전달값을 구분하여 출력 --%>
		<li>이름 = ${param.name }</li>
		<li>주소 = ${param.address }</li>
		<li>음식-1 = ${paramValues.food[0] }</li>
		<li>음식-2 = ${paramValues.food[1] }</li>
	</ul>
</body>
</html>

※xyz.itwill.filter 패키지 생성 → EncodingFilter.java 클래스 생성

📃EncodingFilter.java

package xyz.itwill.filter;
//
import java.io.IOException;
//
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
//
//필터 클래스 : 특정 웹프로그램 요청에 대한 웹프로그램 실행 전 또는 후에 동작될 명령을 작성하기 위한 클래스
//→ 웹프로그램 실행 전 동작될 명령으로 리퀘스트 메세지(요청 관련 정보 - HttpServletRequest 
//객체)의 정보를 변경하는 명령 작성  
//→ 웹프로그램 실행 후 동작될 명령으로 리스폰즈 메세지(응답 관련 정보 - HttpServletResponse 
//객체)의 정보를 변경하는 명령 작성 
//
//필터 클래스는 반드시 Filter 인터페이스를 상속받아 작성하며 @WebFilter 어노테이션 또는 
//[web.xml]파일에서 필터 클래스를 필터로 등록하고 필터가 동작되기 위한 URL 패턴정보를 매핑 처리
//
//클라이언트가 요청하는 모든 웹프로그램에 대해 실행 전 리퀘스트 메세지의 몸체부에 저장되어 전달되는 문자값에 대한 문자형태(캐릭터셋)을 변경하는 필터 클래스 - 인코딩 필터
public class EncodingFilter implements Filter {
	//변경할 캐릭터셋를 저장하기 위한 필드
	private String encoding;
	//
	//필터 클래스로 객체가 생성된 후 가장 먼저 1번만 호출되는 메소드 - 필터 객체의 초기화 작업
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		//encoding="utf-8";
		//
		//FilterConfig.getInitParameter(String name) : [web.xml] 파일의 init-param 엘리먼트로 제공되는 값을 얻어와 반환하는 메소드
		encoding=filterConfig.getInitParameter("encoding");
	}
	//
	//요청 웹프로그램 실행 전 또는 후에 동작될 명령을 작성하는 메소드
	//→ 등록된 URL 패턴의 웹프로그램 실행 전에 자동 호출되는 메소드
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		//웹프로그램 실행 전에 동작될 명령 작성 - 리퀘스트 메세지의 정보 변경
		if(request.getCharacterEncoding()==null || 
				!request.getCharacterEncoding().equalsIgnoreCase(encoding)) {
			request.setCharacterEncoding(encoding);
		}
		//
		//FilterChain.doFilter(ServletRequest request, ServletResponse response)
		//→ 요청 웹프로그램을 연결하여 실행되도록 설정하는 메소드
		chain.doFilter(request, response);//요청 웹프로그램 실행
		//
		//웹프로그램 실행 후에 동작될 명령 작성 - 리스폰트 메세지의 정보 변경
		//response.setContentType("text/html; charset=utf-8");
	}
}

📃web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
	<display-name>mvc</display-name>
	<!--  -->
	<!-- filter : 필터 클래스를 필터로 등록하기 위한 엘리먼트 -->
	<!-- → servlet 엘리먼트 선언 전에 작성하는 것을 권장 -->
	<filter>
		<filter-name>encoding filter</filter-name>
		<filter-class>xyz.itwill.filter.EncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>
	<!--  -->
	<!-- filter-mapping-mapping : 필터가 실행되기 위한 요청 웹프로그램의 URL 패턴을 등록하기 위한 엘리먼트 -->
	<filter-mapping>
		<filter-name>encoding filter</filter-name>
		<!-- 클라이언트의 모든 웹프로그램 요청에 대한 필터가 실행되도록 URL 패턴 등록 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!--  -->
	<!-- servlet : 서블릿 클래스를 웹프로그램(서블릿)으로 등록하기 위한 엘리먼트 -->
	<servlet>
		<servlet-name>controller</servlet-name>
		<servlet-class>xyz.itwill.mvc.ControllerServlet</servlet-class>
		<!-- init-param : 서블릿 클래스에 필요한 값을 제공하기 위한 엘리먼트 -->
		<init-param>
			<param-name>configFile</param-name>
			<param-value>/WEB-INF/model.properties</param-value>
		</init-param>
		<!-- load-on-startup : WAS 실행시 서블릿 클래스를 서블릿 객체로 생성하기 위한 엘리먼트 -->
		<!-- => 클라이언트의 요청 없이 WAS 실행시 서블릿 객체를 미리 생성 - init() 메소드가 자동 호출되어 초기화 작업 -->
		<!-- => 엘리먼트값은 0 이상의 정수값으로 설정하며 정수값이 작을수록 먼저 서블릿 객체로 생성 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!--  -->
	<!-- servlet-mapping : 웹프로그램(서블릿)에 URL 패턴을 등록하기 위한 엘리먼트 -->
	<servlet-mapping>
		<servlet-name>controller</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	<!--  -->
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.jsp</welcome-file>
		<welcome-file>default.htm</welcome-file>
	</welcome-file-list>
</web-app>

0개의 댓글