✿∘˚˳°∘°
73일차 : Action Tag, EL, JSTL, Filter 본문
20230313
1. Action Tag
: JSP 문법을 확장하는 메커니즘을 제공하는 태그
<jsp:include> : 페이지에 특정페이지를 포함할 때(예를들어 페이지에 헤더푸터)
<jsp:forward> : 현재 페이지 접근 시 특정 페이지로 이동 시킬 때
( URL이 변경되지 않아 파라미터를 보낼 때 편함)
<!-- 기존방식 : 지시자 태그를 이용 -->
<%-- <%@include file="/WEB-INF/views/common/header.jsp" %> --%>
<%-- <jsp:include page="/WEB-INF/views/common/header.jsp"></jsp:include> --%>
<jsp:include page="/WEB-INF/views/common/header.jsp" />
<!-- 위 두개 모두 같은 문법 끝이라는 의미로 /를 해주면 /jsp:include와 같은의미를 갖는다. -->
<h1>index</h1>
<h3><a href="/test1.do">필터테스트</a></h3>
<h3><a href="/jspForward.do?name=test">jsp:forward</a></h3>
package kr.or.iei.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class test1Servlet
*/
@WebServlet(name = "test1", urlPatterns = { "/test1.do" })
public class test1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public test1Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("서블릿 시작지점");
//1. 인코딩
//2. 값추출
//3. 비즈니스로직
//4. 결과처리
System.out.println("서블릿 끝지점");
response.sendRedirect("/");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
package kr.or.iei.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class JspForwardServlet
*/
@WebServlet(name = "JspForward", urlPatterns = { "/jspForward.do" })
public class JspForwardServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public JspForwardServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
String name = request.getParameter("name");
//3. 비즈니스로직
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/action/forward.jsp");
request.setAttribute("name", name);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name = (String)request.getAttribute("name");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%if(name != null) {%>
<!--
<script>
location.href="/forward2.do"
</script>
이 방법으로 서블릿을 하나 더 생성해서 이동하는 방법도 있지만 위방식의 경우 name파라미터를 또 보내줘야함
태그가 나왔다가 자바코드가 나왔다가 하는 것을 태그만 사용해서 이용하는 것
-->
<jsp:forward page="/WEB-INF/views/action/forward2.jsp" />
<!-- include처럼 추가한게 아닌 이동한 것이므로 아래 forward name은나오지않고 forward2로 페이지이동 -->
<%} %>
<h1>forward</h1>
<h2><%= name %></h2>
<!-- web-inf에 있는 jsp는 반드시 서블릿을 통해 이동해야함 : 이과정을 생략해주는게 action:forward -->
<!-- action태그를 이용하면 바로 이동이 가능하다. -->
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 주소창은 Servlet주소가 여전히 유지(jspFoward.do?name=test)
forward방식으로 이동하면 forward2에서도 name=test라는 파라미터를 이용 가능 -->
<%
String name = (String)request.getAttribute("name");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>forward2</h1>
<h3><%=name %></h3>
</body>
</html>
2. EL
: <%=%>, out.print()를 좀더 간결하게 사용하는 방법 ${value}의 형식으로 표현
<h2>EL(Expression Language)</h2>
<h3><a href="/eLTest1.do">1. EL test1(기본문법)</a></h3>
<h3><a href="/eLTest2.do">2. EL test2(VO)</a></h3>
<h3><a href="/eLTest3.do">3. EL test3(list, array)</a></h3>
<h3><a href="/eLTest4.do">4. EL test4(연산)</a></h3>
<h3><a href="/eLTest5.do">5. EL test5(내장객체)</a></h3>
2 - 1 ) 기본문법
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ELTest1Servlet
*/
@WebServlet(name = "ELTest1", urlPatterns = { "/eLTest1.do" })
public class ELTest1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ELTest1Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/el/elTest1.jsp");
request.setAttribute("name", "유저1");
request.setAttribute("age", 20);
request.setAttribute("addr", "서울시 영등포구");
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>이름 : ${name}</h2>
<h2>나이 : ${age}</h2>
<h2>주소 : ${addr}</h2>
<h2>전화번호 : ${phone}</h2>
<!-- 기존문법과 달리 phone이 null이 아니고 공백으로 나온다 -->
<!-- 위에 변수를 선언하지 않아도 사용이 가능하다. -->
</body>
</html>
2 - 2 ) VO
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ELTest2Servlet
*/
@WebServlet(name = "ELTest2", urlPatterns = { "/eLTest2.do" })
public class ELTest2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ELTest2Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
Member m = new Member("유저2", 30, "서울시 강남구");
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/el/elTest2.jsp");
request.setAttribute("m", m);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>이름 : ${m.name }</h3>
<!-- 적는건 name으로 적지만 getName()을 알아서 호출하고 있는 것 -->
<h3>나이 : ${m.age }</h3>
<h3>주소 : ${m.addr }</h3>
<h3>${m.test }</h3>
<!-- Member에 test라는게 없으므로 에러발생 -->
<!-- 단, Member에 getTest메소드만 만들어도 사용가능 : 변수를 가져오는게 아닌 getter를 가져오는 것 -->
</body>
</html>
2 - 3 ) List, Array
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ELTest3Servlet
*/
@WebServlet(name = "ELTest3", urlPatterns = { "/eLTest3.do" })
public class ELTest3Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ELTest3Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
int[] numArr = {100,200,300};
ArrayList<Integer> numList = new ArrayList<Integer>();
numList.add(10);
numList.add(20);
numList.add(30);
ArrayList<Member> memberList = new ArrayList<Member>();
Member m1 = new Member("유저1", 30, "서울");
Member m2 = new Member("유저2", 40, "인천");
memberList.add(m1);
memberList.add(m2);
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/el/elTest3.jsp");
request.setAttribute("numArr", numArr);
request.setAttribute("numList", numList);
request.setAttribute("memberList", memberList);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>배열 사용 방법</h2>
<p>${numArr[0] }</p>
<p>${numArr[1] }</p>
<p>${numArr[2] }</p>
<h2>리스트 사용 방법 1</h2>
<p>${numList[0] }</p>
<p>${numList[1] }</p>
<p>${numList[2] }</p>
<h2>리스트 사용 방법 2</h2>
<p>${memberList[0].name }</p>
<p>${memberList[0].age }</p>
<p>${memberList[0].addr }</p>
<p>${memberList[1].name }</p>
<p>${memberList[1].age }</p>
<p>${memberList[1].addr }</p>
</body>
</html>
2 - 4 ) 연산
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ELTest4Servlet
*/
@WebServlet(name = "ELTest4", urlPatterns = { "/eLTest4.do" })
public class ELTest4Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ELTest4Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/el/elTest4.jsp");
request.setAttribute("num1", 10);
request.setAttribute("num2", 20);
request.setAttribute("str", "abc");
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>EL 연산</h1>
<ul>
<li>${num1 }</li>
<li>${num2 }</li>
<li>${str }</li>
<li>${str1 }</li>
</ul>
<hr>
<table border="1">
<tr>
<th>표현식</th>
<th>결과</th>
</tr>
<tr>
<td>\${num1 }+\${num2 }</td> <!-- 화면은 10+20 으로 만들어질것 \를사용하면 el로 사용하지 말라는 의미 -->
<td>${num1 }+${num2 }</td>
</tr>
<tr>
<td>\${num1 - num2 }</td>
<td>${num1 - num2 }</td>
</tr>
<tr>
<td>\${num1 * num2 }</td>
<td>${num1 * num2 }</td>
</tr>
<tr>
<td>\${num1 / num2 }</td>
<td>${num1 / num2 }</td>
</tr>
<tr>
<td>\${num1 % num2 }</td>
<td>${num1 % num2 }</td>
</tr>
<tr>
<td>\${num1 > num2 }</td>
<td>${num1 gt num2 }</td>
</tr>
<tr>
<td>\${num1 < num2 }</td>
<td>${num1 lt num2 }</td>
</tr>
<tr>
<td>\${num1 >= num2 }</td>
<td>${num1 ge num2 }</td>
</tr>
<tr>
<td>\${num1 <= num2 }</td>
<td>${num1 le num2 }</td>
</tr>
<tr>
<td>\${num1 == num2 }</td>
<td>${num1 eq num2 }</td>
</tr>
<tr>
<td>\${num1 != num2 }</td>
<td>${num1 ne num2 }</td>
</tr>
<tr>
<td>\${str == "abc" }</td>
<td>${str eq "abc" }</td>
</tr>
<tr>
<td>\${str == null }</td>
<td>${empty str }</td>
</tr>
<tr>
<td>\${str == null }</td>
<td>${not empty str }</td>
</tr>
<tr>
<td>\${str1 == null }</td>
<td>${empty str }</td>
</tr>
<tr>
<td>\${str1 == null }</td>
<td>${not empty str }</td>
</tr>
</table>
<%--
> -> gt(greater)
< -> lt(little)
>= -> get(greater or equal)
<= -> le(little or equal)
== -> eq(equal)
!= -> ne(not equal)
--%>
</body>
</html>
2 - 5 ) 내장객체
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class ELTest5Servlet
*/
@WebServlet(name = "ELTest5", urlPatterns = { "/eLTest5.do" })
public class ELTest5Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ELTest5Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
Member m1 = new Member("유저1", 20, "서울");
Member m2 = new Member("유저2", 30, "부산");
//3. 비즈니스로직
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/el/elTest5.jsp");
request.setAttribute("m", m1);
HttpSession session = request.getSession();
session.setAttribute("m", m2);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>request data</h1>
<p>${requestScope.m.name }</p>
<p>${requestScope.m.age }</p>
<p>${requestScope.m.addr }</p>
<h2>session data</h2>
<p>${sessionScope.m.name }</p>
<p>${sessionScope.m.age }</p>
<p>${sessionScope.m.addr }</p>
<%-- key값이 겹칠 경우 session에 있는 데이터는 가져오지 않음 requestScope / sessionScope 명시
session보다 request에서 더 많이 가져오므로 기본적으로 명시하지 않을 경우 request로 가져온다
request는 생략해도 되지만, session은 key값이 겹치지 않더라도 명시해주는게 좋음(사용에는 문제가 없지만 코드를 봤을 때 구분이 안되므로) --%>
</body>
</html>
3. JSTL : 사용하는 코드의 집합을 태그화 하여 표준으로 제공한것
1. 라이브러리등록 jstl
2. 선언<%@taglib uri="링크" @>
3. 사용 <c:if ~~ />
core tag : 변수와 url, 조건문, 반목문과 관련된 문법제공
<c:set> : 변수를 선언하고 그 변수에 초기앖을 대입하는 기능의 태그(자바변수선언과 유사)
int num = 100 / <c:set var="num" value="100" scope="request" />
<c:out> : 데이터를 출력할 때 사용
<c:out value="야호">
<c:if> : if문 조건식은 test라는 속성의 값으로 지정
<c:if test="${num1>num2}"> 야호 </c:if>
<c:choose> : switch / if~else if 문
<c:when test="조건"></c:when> 과 <c:otherwise></c:otherwise>함께사용
(c:otherwise는 else)
<c:forEach> : forEach문
items : 반복할 객체명 / var : 반복횟수에 해당하는 변수명 / step : 반복할 횟수번호
<c:forTokens> : 구분자를 통해 토큰을 분리해서 반복처리
items : 토큰을 포함하는 문자열 / delims 토큰구분자
<c:url> : url경로를 생성
<h2>JSTL(JSP Standard Tag Library)</h2>
<h3><a href="/jstlTest1.do">1. JSTL 기본사용법</a></h3>
<h3><a href="/jstlTest2.do">2. JSTL if</a></h3>
<h3>3. JSTL choose</h3>
<form action="/jstlTest3.do">
<input type="text" name="num">
<input type="submit" value="전송">
</form>
<h3><a href="/jstlTest4.do">4. JSTL forEach</a></h3>
3 - 1 ) 기본사용법
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class JstlTest1Servlet
*/
@WebServlet(name = "JstlTest1", urlPatterns = { "/jstlTest1.do" })
public class JstlTest1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public JstlTest1Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/jstl/jstlTest1.jsp");
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>JSTL 기본문법</h1>
<h3>1. 변수를 선언(기본 변수 선언으로 해당페이지에서만 사용 가능)</h3>
<%--
<%
int num = 10;
%>
위 코드를 core tag를 사용해서 선언
--%>
<c:set var="num" value="10" />
<c:set var="str" value="안녕" />
<%-- page < request < session < application
페이지 내에서만 사용할 수 있는 pageScope에 생성된다. --%>
<p>request: ${requestScope.num }</p>
<p>session: ${sessionScope.num }</p>
<p>page : ${pageScope.num }</p>
<p>page : ${pageScope.str }</p>
<h3>2. 변수 선언(영역 지정)</h3>
<%--scope를 지정해서 원하는 영역에 변수를 만들 수 도 있다. --%>
<c:set var="num1" value="200" scope="request" />
<c:set var="num1" value="300" scope="session" />
<p> request : ${requestScope.num1 }</p>
<p> session : ${sessionScope.num1 }</p>
<h3>3. 변수 삭제</h3>
<c:remove var="num1" scope="session" />
<%--num1이라는 변수가 request에도 session에도 있으므로 어느영역에 있는 num1를 삭제할 지 지정해 주어야함 --%>
<p> request : ${requestScope.num1 }</p>
<p> session : ${sessionScope.num1 }</p>
<h3>4. core를 이용한 출력</h3>
<p>EL : ${num1 }</p>
<p>core : <c:out value="${num1 }" /></p>
<%-- coreTag는 기본값설정이 가능하다 --%>
<p>core(session) : <c:out value="${sessionScope.num1 }" default="값없음" />
<c:set var="test" value="<b>진한글씨</b>" />
<p>EL : ${pageScope.test }</p>
<%--그냥 출력 시에는 EL이 쉽지만 아래처럼 태그포함출력이라거나 설정을 주고싶을 때는 c:out태그를 사용 --%>
<p>core1 : <c:out value="${pageScope.test }" escapeXml="true" /></p>
<p>core2 : <c:out value="${pageScope.test }" escapeXml="false" /></p>
</body>
</html>
3 - 2 ) if
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class JstlTest2Servlet
*/
@WebServlet(name = "JstlTest2", urlPatterns = { "/jstlTest2.do" })
public class JstlTest2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public JstlTest2Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/jstl/jstlTest2.jsp");
request.setAttribute("num", 100);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>c:if</h1>
<c:if test="${num%2 eq 0 }">
<h3>짝수</h3>
</c:if>
<c:if test="${num%2 eq 1 }">
<h3>홀수</h3>
</c:if>
</body>
</html>
3 - 3 ) choose : switch/if~else if와 유사
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class JstlTest3Servlet
*/
@WebServlet(name = "JstlTest3", urlPatterns = { "/jstlTest3.do" })
public class JstlTest3Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public JstlTest3Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
int num = Integer.parseInt(request.getParameter("num"));
//3. 비즈니스로직
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/jstl/jstlTest3.jsp");
request.setAttribute("num", num);
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>c:choose</h1>
<hr>
<c:choose>
<c:when test="${num%3 == 0 && num%4 == 0}">
<h1>3의 배수이면서 4의배수입니다.</h1>
</c:when>
<c:when test="${num%4 == 0 }">
<h1>4의 배수입니다.</h1>
</c:when>
<c:when test="${num%3 == 0 }">
<h1>3의 배수입니다.</h1>
</c:when>
<c:otherwise>
<h1>3의 배수도 4의 배수도 아닙니다.</h1>
</c:otherwise>
<%--else if의 경우에는 c:when을 한번더 입력 / else의 경우 c:otherwise사용 --%>
</c:choose>
</body>
</html>
3 - 4 ) forEach
Servlet
package kr.or.iei.controller;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class JstlTest4Servlet
*/
@WebServlet(name = "JstlTest4", urlPatterns = { "/jstlTest4.do" })
public class JstlTest4Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public JstlTest4Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
ArrayList<Member> list = new ArrayList<Member>();
Member m1 = new Member("유저1", 20, "서울");
Member m2 = new Member("유저2", 30, "인천");
Member m3 = new Member("유저3", 40, "경기");
list.add(m1);
list.add(m2);
list.add(m3);
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/jstl/jstlTest4.jsp");
request.setAttribute("list", list);
view.forward(request, response);;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>c:forEach</h1>
<hr>
<h3>1. 리스트 순회 반복</h3>
<table border="1">
<tr style="background-color: #ccc">
<th>순서</th><th>이름</th><th>나이</th><th>주소</th>
</tr>
<%-- for(Member m : list) // items="list"로 넣지않도록 주의 저렇게하면 list라는 문자열이 들어간 것 --%>
<c:forEach items="${list }" var="m" varStatus="i">
<tr>
<td>${i.index }</td> <%--index는 0부터시작 count는 1부터시작 --%>
<td>${m.name }</td>
<td>${m.age }</td>
<td>${m.addr }</td>
</tr>
</c:forEach>
</table>
<hr>
<h3>2. 반복회차 지정하는 반복문</h3>
<ul>
<c:forEach begin="1" end="10" step="1" varStatus="i">
<li>${i.count }_번째 반복</li>
</c:forEach>
</ul>
</body>
</html>
4. Filter
클라이언트와 서버사이에서 request / response객체를 필터가 먼저 받아 공통적으로 필요한 부분을 처리
인코딩 같은거 할때(공통적임) Filter에 추가해두면 좋음
package common;
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;
public class EncodingFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("필터 종료");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("서블린 가기 전");
request.setCharacterEncoding("utf-8");
System.out.println("인코딩 완료");
chain.doFilter(request, response);//서블릿 수행코드
System.out.println("서블릿 종료 후");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("초기화 완료");
}
}
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_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>08_etcProject</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>EncodingFilter</filter-name>
//패키지경로 반드시
<filter-class>common.EncodingFilter</filter-class>
</filter>
</web-app>
'국비수업 > Server' 카테고리의 다른 글
61일차 : Editor, GitHub (0) | 2023.02.23 |
---|---|
60일차 : mvc2WebProject - 6 ( API ) (0) | 2023.02.22 |
59일차 : AJAX, mvc2WebProject - 6 (0) | 2023.02.21 |
58일차 - mvc2WebProject - 5 (0) | 2023.02.21 |
57일차 : mvc2WebProject - 4 (0) | 2023.02.19 |