${expr}
| 기본객체 | 설명 |
|---|---|
| pageContext | JSP의 page 기본 객체와 동일 |
| pageScope | pageContext 기본 객체에 저장된 속성의 <속성,값>매핑을 저장한 Map 객체 |
| requestScope | request 기본 객체에 저장된 속성의 <속성,값> 매핑을 저장한 Map 객체 |
| sessionScope | session 기본 객체에 저장된 속성의 <속성,값> 매핑을 저장한 Map객체 |
| applicationScope | application 기본 객체에 저장된 속성의 <속성,값>매핑을 저장한 Map객체 |
| param | 요청 파라미터의 <파라미터이름,값> 매핑을 저장한 Map객체 |
| paramValues | 요청 정보의 <파라미터이름,값 배열> 매핑을 저장한 Map 객체 |
| header | 요청 정보의 <헤더이름,값> 매핑을 저장한 Map 객체 |
| headerValues | 요청 정보의 <헤더이름,값 배열> 매핑을 저장한 Map 객체 |
| cookie | <쿠키 이름, Cookie> 매핑을 저장한 Map 객체 |
| initParam | 초기화 파라미터의 <이름,값> 매핑을 저장한 Map 객체 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL 테스트</title>
</head>
<body>
<h3>표현언어(EL)의 사용</h3>
<table border="1" style="width: 40%">
<tr>
<th>표현식</th>
<th>값</th>
</tr>
<tr>
<td>\${2+5}</td>
<td>${2+5}</td>
</tr>
<tr>
<td>\${"10"+5}</td>
<td>${"10"+5}</td>
</tr>
<tr>
<td>\${"10"+"5"}</td>
<td>${"10"+"5"}</td>
</tr>
<tr>
<td>\${"십"+"5"}</td>
<td>에러 발생(EL에서의 +는 연산만 가능하다)</td>
</tr>
<tr>
<td>\${4/5}</td>
<td>${4/5}</td>
</tr>
<tr>
<td>\${5/0}</td>
<td>${5/0}</td>
</tr>
<tr>
<td>\${2 += 5}</td>
<td>${2 += 5}(문자열로 연결)</td>
</tr>
<tr>
<td>\${"한국"+="서울"}</td>
<td>${"한국"+="서울"}(문자열로 연결)</td>
</tr>
<tr>
<td>\${1+="서울"}</td>
<td>${1+="서울"}(문자열로 연결)</td>
</tr>
</table>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>표현 언어의 사용 예제</title>
</head>
<body>
<h1>표현 언어의 - 파라미터 값 처리</h1>
<form action="s02_el.jsp" method="post">
<% request.setCharacterEncoding("UTF-8"); %>
이름 : <input type="text" name="name"><br>
<input type="submit" value="확인">
</form>
<br>
이름은 <%= request.getParameter("name") %><br>
이름은 ${param.name}<br>
이름은 ${param["name"]} 입니다.
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8");%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>표현 언어의 사용 예제</title>
</head>
<body>
<h1>표현 언어의 - 파라미터 값 처리</h1>
<form action="s03_el.jsp" method="post">
좋아하는 계절
<input type="checkbox" name="season" value="봄"> 봄
<input type="checkbox" name="season" value="여름"> 여름
<input type="checkbox" name="season" value="가을"> 가을
<input type="checkbox" name="season" value="겨울"> 겨울
<input type="submit" value="확인">
</form>
<br>
${paramValues.season[0]}<br>
${paramValues.season[1]}<br>
${paramValues.season[2]}<br>
${paramValues.season[3]}<br>
--------------------------<br>
${paramValues["season"][0]}<br>
${paramValues["season"][1]}<br>
${paramValues["season"][2]}<br>
${paramValues["season"][3]}<br>
</body>
</html>

내장객체명을 생략하고 속성명을 호출하면
JSP 4개 영역에서 page, request, session, application 영역 순으로
검색해서 해당 속성명이 있으면 속성값을 반환
스크립트릿에서 선언한 변수의 값은 el에서 바로 읽을 수 없음.
변수의 값을 읽기 원한다면 JSP 4개 영역에 저장 후 읽어와야 한다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL 텍스트</title>
</head>
<body>
<%
String str ="여름 여행";
pageContext.setAttribute("msg", "봄");
request.setAttribute("msg2", "여름");
session.setAttribute("msg3", "가을");
application.setAttribute("msg4", "겨울");
%>
page 영역 : <%= pageContext.getAttribute("msg")%><br>
request 영역 : <%= request.getParameter("msg2")%><br>
session 영역 : <%= session.getAttribute("msg3")%><br>
application 영역 : <%= application.getAttribute("msg4")%><br>
------------------------------------<br>
page 영역 : ${pageScope.msg},${msg }<br>
request 영역 : ${requestScope.msg2},${msg2}<br>
session 영역 : ${sessionScope.msg3},${msg3 }<br>
application 영역 : ${applicationScope.msg4},${msg4 }<br>
------------------------------------<br>
str : <%=str %>, ${str }
</body>
</html>

설정
WEB-INF > lib 폴더 > JSTL-1.2.jar 삽입
<c:set var="변수명" value="설정값" target="객체" property="값" scope="범위" />
지정된 변수에 값을 할당하는 태그
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Set 태그</title>
</head>
<body>
<%-- 속성명 속성값 영역 --%>
<c:set var="msg" value="봄" scope="page"/>
<c:set var="msg2" value="여름" scope="request"/>
<c:set var="msg3" value="가을" scope="session"/>
<c:set var="msg4" value="겨울" scope="application"/>
${pageScope.msg},${msg }<br>
${requestScope.msg2},${msg2 }<br>
${sessionScope.msg3},${msg3 }<br>
${applicationScope.msg4},${msg4 }<br>
</body>
</html>

<%
Member member = new Member();
%>
<%-- page 영역에 Member 객체 저장 --%>
<c:set var="member" value="<%=member %>"/>
<%-- Member 객체의 name 멤버 변수에 데이터 저장 --%>
<%--
target : 값을 설정하고자 하는 객체를 명시
property : 값이 저장되는 멤버 변수
--%>
<c:set target="${member }" property="name" value="홍길동"/>
회원 이름 : ${member.name }<br>
회원 이름 : ${member.getName() }<br>

<c:remove var="변수명" scope="범위" />
빈도수가 높지는 않은 태그, 저장 후 필요가 없다면 명시를 안 하면 되기 때문에 굳이 지우는 작업을 할 필요가 없음
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Remove 태그</title>
</head>
<body>
<c:set var="city" value="서울"/>
데이터 삭제 전 : ${city }<br>
------------------------------<br>
<c:remove var="city"/>
데이터 삭제 후 : ${city }<br>
</body>
</html>

<c:if test="조건" var="변수명" scope="범위" />
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>If 태그</title>
</head>
<body>
<c:if test="true">
무조건 수행 <br>
</c:if>
</body>
</html>

링크 뒤에 ?name=dragon 넣어줘야 문구가 출력될 수 있다.
equals도 사용이 가능은 하지만 ==을 훨씬 더 많이 사용함
<c:if test="${param.name == 'dragon' }">
name 파라미터의 값이 ${param.name }입니다.<br>
</c:if>
<%-- tomcat 7버전 이상부터 equals 비교 지원 --%>
<c:if test="${param.name.equals('dragon') }">
name 파라미터의 값이 ${param.name }입니다.<br>
</c:if>

명시적으로 형변환을 하지 않아도 자동으로 숫자로 비교하여 넘어간다.
<c:if test="${param.age >= 20 }">
당신의 나이는 20세 이상입니다.<br>
</c:if>

<c:choose>
<c:when test="조건"></c:when>
<c:when test="조건"></c:when>
<c:otherwise></c:otherwise>
</c:choose>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Choose 태그</title>
</head>
<body>
<c:choose>
<c:when test="${param.name == 'dragon' && param.age >= 20 }">
당신의 이름은 ${param.name }이고 20세 이상입니다.
</c:when>
<c:when test="${param.name == 'dragon'}">
당신의 이름은 ${param.name } 입니다.
</c:when>
<c:when test="${param.age >= 20}">
당신은 20세 이상입니다.
</c:when>
<c:otherwise>
당신은 dragon이 아니며, 20세 이상이 아닙니다.
</c:otherwise>
</c:choose>
</body>
</html>
name, age에 해당하는 값이 주어지지 않았을 때의 결과 화면
Otherwise에 해당하는 문구

?name=dragon 입력했을 때 나오는 결과 화면
When 2번째에 해당하는 문구

?age=21 입력했을 때 나오는 결과 화면
When 3번째에 해당하는 문구

?name=dragon&age=21입력했을 때 나오는 결과 화면
When 1번째에 해당하는 문구

수행문을 반복해서 수행
<c:forEach items="객체명" begin="시작 인덱스" end="끝 인덱스" step="증감식" var="변수명" varStatus="상태변수" />
예) varStatus 의 사용예
<c:forEach var="list" items="itemList" varStatus="status">
${status.index} <- 0부터 시작하는 인덱스 표시
${status.count} <- 1부터 시작하여 1씩 증가
${status.first} <- forEach 반복의 처음 일 경우 true
${status.last} <- forEach 반복의 마지막 일 경우 true
</c:forEach>
예) forEach를 사용할 때 List의 크기 구하기
<%@ taglib prefix="fn" uri=http://java.sun.com/jsp/jstl/functions %>=>페이지 상단에 명시
${fn:length(itemList)}
1~100까지의 총합
<h4>1~100까지의 합</h4>
<c:set var="sum" value="0"/>
<c:forEach var="i" begin="1" end="100" step="1">
<c:set var="sum" value="${sum+i}"/>
</c:forEach>
결과 = ${sum}

1~100의 홀수의 합
<h4>1~100까지의 홀수의 합</h4>
<c:set var="sum2" value="0"/>
<c:forEach var="i" begin="1" end="100" step="2">
<c:set var="sum2" value="${sum2+i}"/>
</c:forEach>
결과 = ${sum2 }

구구단 반복문 사용하여 나타내기
<h4>구구단 5단</h4>
<ul>
<c:forEach var="i" begin="1" end="9">
<li>5 * ${i} = ${5 * i}</li>
</c:forEach>
</ul>

Array 보여주기
<h4>int형 배열</h4>
<c:set var="intArray" value="<%= new int[] {10,20,30,40,50}%>" />
<c:forEach var="i" items="${intArray }">
${i }<br>
</c:forEach>
<h4>int형 배열 - begin, end 인덱스 지정</h4>
<c:set var="intArray" value="<%= new int[] {10,20,30,40,50}%>" />
<c:forEach var="i" items="${intArray }" begin="2" end="4">
${i }<br>
</c:forEach>

varStatus 사용하기
배열 인덱스의 값 -
번호 매기기 -
각 인덱스의 값 -
첫 번째 반복이면 true, 그 외는 false -
마지막 반복이면 true, 그 외는 false
<h4>int형 배열 - varStatus 사용</h4>
<c:set var="intArray" value="<%= new int[] {10,20,30,40,50}%>" />
<c:forEach var="i" items="${intArray }" begin="2" end="4" varStatus="status">
${status.index} - ${status.count} - [${i}] - ${status.first } - ${status.last }<br>
</c:forEach>

<h4>Map</h4>
<%
HashMap<String,String> mapData = new HashMap<String,String>();
mapData.put("name", "홍길동");
mapData.put("job", "소방관");
mapData.put("hobby", "음악 듣기");
%>
<c:set var="map" value="<%=mapData %>" />
<c:forEach var="i" items="${map}">
${i.key} = ${i.value }<br>
</c:forEach>
set의 var를 map, forEach의 items="${map}"과 동일함

문자열을 구분자로 잘라내어 출력
<c:forTokens items="객체명" delims="구분자" begin="시작 인덱스" end="끝 인덱스" step="증감식" var="변수명" varStatus="상태변수" />
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forTokens 태그</title>
</head>
<body>
<h4>쉼표와 점을 구분자로 사용</h4>
<c:forTokens items="빨강색,주황색.노란색.초록색,파란색,남색.보라색" var="token" delims=",.">
${token}<br>
</c:forTokens>
<h4>날짜를 연월일시분초로 구분해서 출력</h4>
<c:forTokens items="2024-05-07 14:09:20" var="now" delims="- :">
${now}<br>
</c:forTokens>
</body>
</html>

지정한 url 페이지의 내용을 읽어와 출력
<c:import url="URL" var="변수명" scope="범위" varReader="변수명" context="context" charEncoding="인코딩" />
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Import 태그</title>
</head>
<body>
<h1>import 태그 연습</h1>
<c:import url="https://www.daum.net"/>
<h1>import 태그 연습 종료</h1>
</body>
</html>

지정된 값을 출력하는 태그
<c:out value="출력값" default="기본값" escapeXml="true/false" />
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Out 태그</title>
</head>
<body>
<c:out value="<h1>오늘은 좋은 날!!</h1>" escapeXml="true"/>
<c:out value="<h1>오늘은 좋은 날!!</h1>" escapeXml="false"/>
</body>
</html>

예외 발생시 예외 처리 태그
<c:catch var="변수명" />
예외가 발생할 수 있는 수행문 앞 뒤에 catch 태그를 배치하고 예외가 발생하면
var에 지정한 변수명에 예외 문구를 저장한다. out 태그 또는 el 를 통해 예외 문구를 호출해 출력할 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Catch 태그</title>
</head>
<body>
<h1>catch 태그 사용하기</h1>
<c:catch var="ex">
name 파라미터의 값 = <%= request.getParameter("name") %><br>
<%
if(request.getParameter("name").equals("test")){
%>
${param.name }은 test입니다.
<%
}
%>
</c:catch>
<c:if test="${ex!=null }">
예외가 발생하였습니다.<br>
${ex }
</c:if>
</body>
</html>

사용 빈도수 아주 높음
수치 데이터를 숫자, 통화, 퍼센트로 변환
<fmt:formatNumber
value="Number로 형식화할 수치 데이터"
type="숫자, 통화, 퍼센트 중 하나{number|currency|percent}"
pattern="사용자 지정 패턴"
currencyCode="통화코드지정"
currencySymbol="통화기호"
groupingUsed="{true|false}출력시 그룹 분리 기호(,) 포함여부"
maxIntegerDigits="출력시 integer 최대 자릿수 지정"
minIntegerDigits="출력시 integer 최소 자릿수 지정"
maxFractionDigits="출력시 소수점 이하 최대 자릿수 지정"
minFractionDigits="출력시 소수점 이하 최소 자릿수 지정"
var="변수"
scope="범위"
/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>formatNumber 태그</title>
</head>
<body>
숫자 : <fmt:formatNumber type="number" value="10000000"/><br>
통화 : <fmt:formatNumber type="currency" value="1000000" currencySymbol="$"/><br>
통화 : <fmt:formatNumber type="currency" value="1000000" currencySymbol="\\"/><br>
퍼센트 : <fmt:formatNumber type="percent" value="0.3"/><br>
패턴 : <fmt:formatNumber value="12.345" pattern="00000.00"/><br>
</body>
</html>

날짜에 형식 지정
<fmt:formatDate
value="형식화할 날짜와 시간 데이터"
type="{time|date|both}"
dateStyle="{short|full}"
timeStyle="{short|full}"
pattern="사용자 지정 패턴"
timeZone="타임존 지정"
var="변수"
scope="범위"
/>
<%@page import="org.apache.naming.java.javaURLContextFactory"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>formatDate 태그</title>
</head>
<body>
<c:set var="now" value="<%=new java.util.Date() %>"/>
${now }<br>
<fmt:formatDate value="${now }" type="date" dateStyle="full"/><br>
<fmt:formatDate value="${now }" type="date" dateStyle="short"/><br>
<fmt:formatDate value="${now }" type="time" timeStyle="full"/><br>
<fmt:formatDate value="${now }" type="time" timeStyle="short"/><br>
<fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/><br>
<fmt:formatDate value="${now }" type="both" dateStyle="short" timeStyle="short"/><br>
---------------------------------------------------------------------<br>
<h3>패턴 지정하여 나타내기</h3>
<fmt:formatDate value="${now }" pattern="yyyy년MM월dd일 HH:mm:ss" />
</body>
</html>

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Functions 라이브러리</title>
</head>
<body>
<c:set var="str1" value=" Functions <태그>를 사용합니다. "/>
<c:set var="str2" value="사용"/>
<c:set var="str3" value="10,20,30-40,50,60,70,80.90,100"/>
문자열의 길이 :${fn:length(str1)}<br>
대문자로 변경 :${fn:toUpperCase(str1)}<br>
소문자로 변경 :${fn:toLowerCase(str1)}<br>
인덱스 3 ~ 6전까지 문자열 추출하기 : ${fn:substring(str1,3,6)}<br>
문자열에서 원래 문자를 지정한 문자로 대체 :${fn:replace(str1," ","-")}<br>
문자열의 앞뒤 공백 제거 :${fn:trim(str1)}<br>
문자열의 앞뒤 공백을 제거하고, 문자열의 원래 문자를 지정한 문자로 대체 :${fn:replace(fn:trim(str1), " ", "-")}<br>
지정한 문자의 인덱스 구하기 : ${fn:indexOf(str1,str2)}<br>
문자열에서 지정한 문자를 구분자로 문자열을 잘라내기 : ${fn:split(str3,',')}<br>
<c:forEach var="array" items="${fn:split(str3,',')}">
${array }<br>
</c:forEach>
</body>
</html>

역할 분담을 할 수 없음

모델 클래스 -> 백엔드, JSP -> 프론트엔드 역할 분담이 가능함

| 패턴 | 설명 |
|---|---|
| 모델(M) | 비즈니스 영역의 상태 정보를 처리한다.[모델 클래스] |
| 뷰(V) | 비즈니스 영역에 대한 프레젠테이션 뷰(즉, 사용자가 보게 될 결과 화면)를 담당한다.[JSP] |
| 컨트롤러(C) | 사용자의 입력 및 흐름 제어를 담당한다.[Servlet] |
MVC 패턴의 경우에는 web.xml로 어노테이션 하는게 더 편리함
package kr.web.mvc;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DispatcherServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 컨텐트 타입 및 캐릭터셋 지정
response.setContentType("text/html;charset=utf-8");
// HTML 태그 출력을 위한 스트림 생성
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>MVC패턴 연습</title></head>");
out.println("<body>");
out.println("MVC 패턴 연습");
out.println("</body>");
out.println("</html>");
// 자원 정리
out.close();
}
}
<servlet>, <servlet-mappin>의 <servlet-name>이 동일한 이름을 갖고 있음
DispatcheServlet 에서 /dispatcher를 호출하게 되면 <servlet-name>으로 연결이 되어 있기 때문에 <servlet-class>를 찾아서 실행시키는 방식이다.
<!-- DispatcherServlet 설정 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>kr.web.mvc.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/dispatcher</url-pattern>
</servlet-mapping>
HTTP GET 및 POST 요청을 처리하는 메서드들을 오버라이딩하여 구현한다.
두 메서드 모두 requestPro 메서드를 호출하고 있다.
requestPro 메서드는 실제 요청을 처리하는 메서드이다.
HttpServletRequest와 HttpServletResponse를 매개변수로 받아와서 처리하고, 응답으로 전달할 컨텐츠 타입과 캐릭터셋을 설정한다.HTML을 사용하여 간단한 응답을 생성하고 응답을 반환합니다.
package kr.web.mvc;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*@WebServlet(name = "DispatcherServlet", urlPatterns = {"/dispatcher"})*/
public class DispatcherServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
requestPro(request, response);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
requestPro(request, response);
}
private void requestPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
// 컨텐트 타입 및 캐릭터셋 지정
response.setContentType("text/html;charset=utf-8");
// HTML 태그 출력을 위한 스트림 생성
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>MVC패턴 연습</title></head>");
out.println("<body>");
out.println("MVC 패턴 연습");
out.println("</body>");
out.println("</html>");
// 자원 정리
out.close();
}
}


Forward 방식으로 view(messageView.jsp)를 호출한다.
client가 서블릿에 요청하고 -> JSP를 forward해서 -> client에게 응답한다
<%@ 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>MVC 패턴 연습</h1>
</body>
</html>
package kr.web.mvc;
import java.io.IOException;
import java.io.PrintWriter;
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;
/*@WebServlet(name = "DispatcherServlet", urlPatterns = {"/dispatcher"})*/
public class DispatcherServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
requestPro(request, response);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
requestPro(request, response);
}
private void requestPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//forward 방식으로 view(messageView.jsp) 호출하기
RequestDispatcher dispatcher = request.getRequestDispatcher("/views/messageView.jsp");
dispatcher.forward(request, response);
}
}
http://localhost:5495/ch03_JSP/dispatcher
주소가 JSP로 바뀌지 않고 유지되기 때문에 Forward 처리되었다는 것을 확인할 수 있다.
=> Client는 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>
결과 : <%= request .getAttribute("result") %><br>
결과 : ${result} <br>
</body>
</html>
package kr.web.mvc;
import java.io.IOException;
import java.io.PrintWriter;
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;
/*@WebServlet(name = "DispatcherServlet", urlPatterns = {"/dispatcher"})*/
public class DispatcherServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
requestPro(request, response);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
requestPro(request, response);
}
private void requestPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String message = request.getParameter("message");
String result = null;
if (message == null || message.equals("")) {
result = "메세지가 없습니다.";
} else if (message.equals("name")) {
result = "홍길동";
} else if (message.equals("base")) {
result="기본 호출입니다.";
} else {
result = "잘못된 호출입니다.";
}
// 속성명 속성값
request.setAttribute("result",result );
//forward 방식으로 view(messageView.jsp) 호출하기
RequestDispatcher dispatcher = request.getRequestDispatcher("/views/messageView.jsp");
dispatcher.forward(request, response);
}
}
Dispatcher Servlet 실행시켰을 때

?message=name 주소에 추가하여 실행했을 때 설정한 홍길동 출력

?message=base 주소에 추가하여 실행했을 때 설정한 기본 호출입니다. 출력

?message=0 주소에 추가하여 실행했을 때 else의 잘못된 호출입니다 출력
