✿∘˚˳°∘°

73일차 : Action Tag, EL, JSTL, Filter 본문

국비수업/Server

73일차 : Action Tag, EL, JSTL, Filter

_HYE_ 2023. 3. 14. 11:54

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
Comments