EL&JSTL, Filters, Context Load Listener.....

우 동현·2021년 10월 13일
0

더존비즈온양성과정

목록 보기
21/26

EL(Expression Language)

  • 스크립트릿<%= %>같은 자바코드 없애주는 것
  • 형태
    ${}
  • 특징
    null은 공백으로 출력

EL로 빈(객체) 접근하기

  • request.setAttribute("memeberInfo",memberVo);
    -> ${requestScope.memberInfo.name}
    ${requestScope.memberInfo.email}
  • Attribute에서 값 찾는 순서
    pageScope → requestScope → sessionScope → applicationScope

JSTL(JSP Standard Tag Library)

  • 설정
    메이븐 모듈의 pom.xml에 추가
<!--  jstl -->
	<dependency>
   		<groupId>javax.servlet</groupId>
    	<artifactId>jstl</artifactId>
   		<version>1.2</version>
	</dependency>

몇가지 예

  • <c:if test = '${.... == ....}'> //java if문과 비슷 But else없음
  • <c:choose> // 자바의 if~ elseif ~else 문과 같은기능
    <c:choose>
    <c:when test = '....==....></c:when><c:otherwisetest={.... == ....}'></c:when> <c:otherwise test = '{.... == ....}'></c:otherwise>
    </c:choose>
  • <c:set>// 변수에 값 저장
  • <c:forEach> //배열 또는 List,Map 등의 컬렉션 객체에 저장된 요소들 순차적 처리
ex) guestbook 리스트 화면 출력 부분
<c:set var='count' value='${fn:length(list) }' />
<c:forEach items='${list }' var='vo' varStatus='status'>
	<li>
		<table>
			<tr>
				<td>[${count-status.index }]</td>
				<td>${vo.name }</td>
				<td>${vo.regDate }</td>
				<td><a href="${pageContext.request.contextPath }/guestbook?a=deleteform&no=${vo.no }">삭제</a></td>
			</tr>
			<tr>
				<td colspan=4>
					${fn:replace(vo.message, newline, "<br/>") }	
				</td>
			</tr>
		</table>
		<br>
	</li>
</c:forEach>
  • <c:import> // <jsp:include>처럼 다른 페이지 동적으로 포함시킬 때 사용
    <c:import url="/WEB-INF/views/includes/header.jsp" />

Context Load Listener

  • 설정
    web.xml에 추가
	<!-- Context Load Listener -->
	<listener>
		<listener-class>com.douzone.web.listener.ContextLoadListener</listener-class>
	</listener>
  • WAS 구동시에 webm.xml을 읽어들여 설정파일들이 모두 load 되도록 등록할때 사용
  • contextConfigLocation으로 설정파일들의 위치를 지정시켜준다.
    위치를 처음에 지정시켜주지 않으면 기본적으로 web.xml은 root-context.xml로 설정파일 위치를 잡아 준다.

Filters

  • 필터는 재사용성이 높은 클래스 파일로 클라이언트,서버 간에 자원을 주고받을 때 반복해서 처리하는 일(인코딩, 로그인 확인 등)을 한다.
ex) UTF-8필터
public class EncodingFilter implements Filter {
	private String encoding;
	public void init(FilterConfig fConfig) throws ServletException {
		encoding = fConfig.getInitParameter("encoding");
		if(encoding == null) { // default encoding charset
			encoding = "UTF-8";
		}
	}
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		/* request */
		request.setCharacterEncoding(encoding);
		chain.doFilter(request, response);
		/* response */
	}
	public void destroy() {
	}
}

세션

  • 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
  • 특정 페이지 사용 가능하도록 권한 상태 유지
ex)guestbook의 LoginAction에서 인증처리(세션처리)
public class LoginAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 String email = request.getParameter("email");
		 String password = request.getParameter("password");
		 
		 UserVo userVo = new UserDao().findByEmailAndPassword(email, password);
		 if(userVo == null) {
			 /*로그인 실패*/
			 request.setAttribute("result", "fail");
			 MvcUtil.forward("user/loginform", request, response);
			 return;
		 }
		 /* 인증처리(세션처리)*/
		 HttpSession session = request.getSession(true);
		 session.setAttribute("authUser", userVo);
		 
		 MvcUtil.redirect("/mysite02", request, response);
	}
}
ex)guestbook의 updateAction에서 Access Control(보안, 인증체크)
public class UpdateAction implements Action {
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	HttpSession session = request.getSession();
	UserVo authUser = (UserVo) session.getAttribute("authUser");
	if (authUser == null) {
		MvcUtil.redirect(request.getContextPath(), request, response);
		return;

0개의 댓글