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)
<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: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
<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) {
encoding = "UTF-8";
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, 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;