EL test


  • expression 태그를 통해 출력할 수 있었던 내용을 보다 간결하게 사용할 수 있도록 한다.  
  • 요청을 서블릿으로 하고, request 영역에 Attribute를 담고 이를 화면에 expression 으로 표현해보고
  • 이를 el로 어떻게 표현할 수 있는지 살펴보고자 한다. 

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>el-jstl</title>
</head>
<body>
	<h1 align="center">JSP Action Tag</h1>
	<h3><a href="views/action/testAction.jsp">JSP Action Tag 테스트</a></h3>

	<h2>EL test</h2>
	<h3><a href="test1">request.getAttribute() 테스트</a></h3>
	<h3><a href="test2">request에 저장 된 객체 출력 테스트</a></h3>
	<h3><a href="views/el/testEl3.jsp?name=galaxy&price=95&no=5&no=6&option=삼성">parameter로 값 전달한 경우 el 테스트</a></h3>
	<h3><a href="test4">requestScope와 sessionScope 테스트</a></h3>

</body>
</html>

 

TestOneServlet.java

package com.greedy.el.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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("/test1")
public class TestOneServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setAttribute("name", "홍길동");
		request.setAttribute("age", 20);
		request.setAttribute("phone", "010-1234-5678");
	
		List<String> items = new ArrayList<>();
		items.add(new String("apple"));
		items.add(new String("banana"));
		items.add(new String("melon"));
		
		request.setAttribute("items", items);
		
		RequestDispatcher view = request.getRequestDispatcher("views/el/testEl1.jsp");
		view.forward(request, response);
	
	}


}

 

 

  • <a href>코드에서 작성한 내용이므로 doGet 메소드를 사용한다. 
  • 요청을 하고 그에대한 응답을 보낼 때, 응답에 대해 동적으로 처리되는 내용들을 request 의 Attribute 내에 담아 화면상에 출력하고자 할 것이다. 
  • 위임된 JSP에서 출력하고자 하는 내용을 request 내장객체 내 setAttribute를 이용해서 담는다. 
  • 문자값, 숫자값을 담은 뒤 ArrayList 배열도 생성한다. 이 배열역시 request에 담는다. 
  • items를 request에 setAttribute 하여 담아준다. 
  • attribute는 Object 타입이므로 담길 수 있다. 

 

 

ServletRequest를 통해서 RequestDispatcher 얻는 법
서블릿 클래스에서는 service() 메서드나 doGet() doPost() 등에서 ServletRequest의 하위 클래스인 HttpServletRequest를 매개변수로 받기 때문에 이것을 이용하여 RequestDispatcher를 얻을 수 있습니다. HttpServletRequest에서는 URL 경로를 통해서 대상을 지정하는 한가지 방법만을 제공합니다. 그러나 ServletContext를 통해서 대상을 지정할때와는 다르게 절대경로 및 상대경로 모두 지정이 가능합니다. JSP 페이지에서도 ServletRequest의 인스턴스인 request 기본객체가 있으므로 쉽게 얻을 수 있습니다.

출처: https://dololak.tistory.com/502

 

 

 

  • 다 담아줬다면 위임, 즉 forward 하여 jsp로 보내도록 한다. 
  • 보내기 위해 RequestDispatcher 객체가 필요하다. 
* * *
RequestDispatcher
란?
RequestDispatcher는 클라이언트로부터 최초에 들어온 요청을 JSP/Servlet 내에서 원하는 자원으로 요청을 넘기는(보내는) 역할을 수행하거나, 특정 자원에 처리를 요청하고 처리 결과를 얻어오는 기능을 수행하는 클래스입니다. 즉 /a.jsp 로 들어온 요청을 /a.jsp 내에서 RequestDispatcher를 사용하여 b.jsp로 요청을 보낼 수 있습니다. 또는 a.jsp에서 b.jsp로 처리를 요청하고 b.jsp에서 처리한 결과 내용을 a.jsp의 결과에 포함시킬 수 있습니다.

요청을 보내는 방법으로는 (1) RequestDispatcher#forward()(2) RequestDispatcher#include() 두 가지 방법이 있습니다. 

출처 : https://dololak.tistory.com/502

 

  • 경로를 지정한뒤 해당경로로 위임시키는 forward를 호출한다. 
  • request 와 response를 다 넘겨야 해당페이지에서도 담았던 값들을 모두 사용할 수 있다. 

 

 

 

  • 위임될 대상인 JSP ("views/el/testEl1.jsp")를 경로에 맞게 작성한다. 

 

testEl1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>전달 된 request 객체에서 저장된 정보 출력하기</h2>
<%-- 	<%
		String name = (String)request.getAttribute("name");
		int age = (Integer)request.getAttribute("age");
		String phone = (String)request.getAttribute("phone");
	%>
	name : <%= name %> <br>
	age : <%= age %> <br>
	phone : <%= phone %> <br> --%>
	
	<!-- EL 표현식으로 출력하기 -->
	name : ${ requestScope.name } <br>
	age : ${ requestScope.age } <br>
	phone : ${ requestScope.phone } <br>
	
	<!-- 스코프 범위 생략 가능함(알아서 찾음) -->
	name : ${ name } <br>
	age : ${ age } <br>
	phone : ${ phone } <br>
	
	<br>
	
	<h2>items 이름으로 저장 된 리스트 정보 출력하기</h2>
	<%-- <%
		ArrayList items = (ArrayList)request.getAttribute("items");
	%>
	
	<% for(int i = 0; i < items.size(); i++) { %>
		<%= i %> : <%= items.get(i) %> <br>
	<% } %> --%>
	
	0 : ${ requestScope.items[0] } <br>
	1 : ${ requestScope.items[1] } <br>
	2 : ${ requestScope.items[2] } <br>
	
	0 : ${ items[0] } <br>
	1 : ${ items[1] } <br>
	2 : ${ items[2] } <br>
	
	
</body>
</html>

 

 

 

전달 된 request 객체에서 저장된 정보 출력하기

  • 스크립틀릿과 익스프레션 태그를 이용해서 먼저 출력해본다. 
  • request에서 setAttribute 해주었던 내용을 getAttribute 해온다. 
  • 스크립틀릿(<% %>) 내에선 순수하게 '꺼내왔다'고만 할 수 있으나 이걸 화면상에서 표현하고자 한다면
  • 익스프레션(<%= %>) 태그를 이용해 주면 된다. 

 

  • 화면에 잘 반영되는지 확인해보자. 
  • 아까전 jsp 파일에 /test1으로 경로를 지정해서 연결해주었다. 
  • 1) test1으로 요청이 되어서 서블릿과 매핑이 되고
  • 2) 서블릿에서는 jsp로 위임한 것이 화면에 출력된 것이다. 
  • 하지만 위임에 대해서는 경로에 드러나지 않는다. 내부적으로 위임이 되어 jsp 에서 처리를 해주는 것이다. 

 

 

 

 


 

 

 

EL 표현식으로 출력하기

  • 지금까지 태그를 이용해서 (위와같이) 꺼내오고 출력하는 모습을 확인했다. 
  • 이렇게 꺼내오는 과정의 번거로움을 줄이기 위해 나타난 것이 el표현식이다. 
  • 특징은 다음과 같다. ${ } 를 활용하며, requestScope 라는 내장객체를 이용해, 속성을 가져온다.
  • requestScope란, request 영역을 의미한다. el문법안에서 사용할 수 있는 el 내장객체이다. 
  • requestScope 뒤에 점을 찍어 영역의 속성을 가져오는 것이다.

 

  • jsp내장객체이기에 request를 그냥 쓸 수 있듯 requestScope 역시 el 문법의 내장객체이기에 별도의 처리 없이 사용할 수 있다. 약속된 용어이다. 
  • el문법에서 내장하고있는 객체, 즉 requstScope 는 생략이 가능하다. 
  • JSP 태그를 사용하면 저장(setAttribute)하고 꺼내와야(getAttribute)하지만
  • el문법에서 내장하고있는 객체는 ${ } 즉, 달러와 중괄호 내에 작성하기만 하면 알아서 잘 찾아온다는 특징을 가지고 있으므로 훨씬 간결하고, 편리한 면이 있다. 

 

 

 

 


 

 

 

items 이름으로 저장 된 리스트 정보 출력하기


  • request 객체의 속성은 Object로 리턴되므로 ArrayList에 담기위해서 다운 캐스팅이 필요하다.
  • Attribute는 Object에 속한탓이다. 
  • 다운캐스팅을 해주어도 여전히 에러줄이 사라지지않는다면 맨 위 지시자 태그내에 import 처리가 되어있는지 확인한다. 

 

 

  • 배열이므로 출력을 위해선 반복문의 사용이 필요하다.
  • 단순히 화면에 출력되기 위해 반복문을 출력줄 것이다. 
  • 겉, 즉 위아래로 반복문의 범위를 스크립틀릿으로 잡아주고 
  • 내부에선 익스프레션 태그를 이용해 반복되는 만큼 화면에 출력해줄 것이다.  

	<%
		ArrayList items = (ArrayList)request.getAttribute("items");
	%>
	
	<% for(int i = 0; i < items.size(); i++) { %>
		<%= i %> : <%= items.get(i) %> <br>
	<% } %>

 

 

 

 

 


 

 

리스트 정보 el문법을 이용해 출력하기


  • list 이므로 배열 인덱스 하나하나 값으로 접근시, 잘 출력된다.
  • 역시 내장객체인 requestScope 의 사용은 생략 가능하다. 
  • 이와같이 인덱스로 하나하나 접근하는게 아닌 반복문은 나중에 배울 jstl을 이용하면 된다. 

 

 

 

 


 

 

 

request에 저장된 객체 출력 테스트

 

 

index.jsp

 

 

TestTwoServlet.java

package com.greedy.el.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 com.greedy.el.model.dto.MemberDTO;


@WebServlet("/test2")
public class TestTwoServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		MemberDTO member = new MemberDTO("홍길동", 20, "010-1234-5678", "hong@greedy.com");
		
		request.setAttribute("member", member);
		
		RequestDispatcher view = request.getRequestDispatcher("views/el/testEl2.jsp");
		view.forward(request, response);
	}
	
}

 

 

 

  • 앞으로 서버상 화면에 표현할 데이터들이 대체로 객체 타입이 많을 것이다.
  • request 안에 담긴 값이 인스턴스, 객체일때 화면상에 el로 출력하려면 어떻게 해야할까? 
  • 멤버 DTO를 생성한뒤 JSP로 위임, 즉 forwarding 해준다.
  • 먼저 setAttribute를 통해 해당값을 저장한다.

 

  • 위임이라는 처리를 위해서는  RequestDispatcher 객체가 필요하다. 
  • 이를 통해 jsp 페이지로 위임처리를 해줄 수 있다.

 

  • 경로에 맞게끔 testEl2 페이지도 생성후 작성해준다. 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="com.greedy.el.model.dto.MemberDTO"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>전달 된 request 객체에 저장 된 Member 객체 필드 값 출력하기</h2>
	
	<%-- <%
		MemberDTO member = (MemberDTO)request.getAttribute("member");
	%>
	이름 : <%= member.getName() %> <br>
	나이 : <%= member.getAge() %> <br>
	전화번호 : <%= member.getPhone() %> <br>
	이메일 : <%= member.getEmail() %> <br> --%>
	
	<!-- EL 표현식으로 작성 -->
	이름 : ${ requestScope.member.name } <br>
	나이 : ${ requestScope.member.age } <br>
	전화번호 : ${ requestScope.member.phone } <br>
	이메일 : ${ requestScope.member.email } <br>
	
	이름 : ${ member.name } <br>
	나이 : ${ member.age } <br>
	전화번호 : ${ member.phone } <br>
	이메일 : ${ member.email } <br>

	
</body>
</html>

 

 

스크립틀릿으로 화면상에 표현하기


  • 스크립틀릿 방법을 쓴 후 그것을 el표현식으로 바꿔보도록 한다.
  • <%  %> 스크립틀릿 코드 선언 후 그 안에 작성한다. 
  •  request 객체를 통해 받아오는 값은 Object 형이므로 MemberDTO를 통한 다운캐스팅이 필요하다.
  • 잘 작성했음에도 에러줄이 발생시, 가장 상단 지시자 태그 내에 임포트가 잘 되었는지 확인한다. 

 

 

  • 화면상에 다음과같이 익스프레션 태그를 통해 객체에서 값을 꺼내온다. 
  • 서블릿같은 경우 컴파일이 필요하므로 서버 구동해서 확인하기전 컴파일 해주어야 한다. 

 

 

EL 표현식으로 작성

  • 이제는 이를 EL 태그로 표현하여 화면에서 출력되는지 확인해본다. 
  • 다음과 같이 작성하면 내부적으로 GET 메소드를 불러서 화면에 뿌려주게 된다. 
  • 위 스크립틀릿 코드로 작성한 것과 동일하게 나타남을 확인할 수 있다. 
  • 또한 requstScope를 반드시 명시해야하는 것도 아니기에 생략하고 객체명.컬럼명만 적어도 문제없이 호출됨을 확인할 수 있다. 

 

 

 

  • requestScope도 생략되었는데 화면에서는 member가 참조변수인지 아는 이유는 
  • 서블릿 내 doGet 메소드에서 setAttribute 명을 member로 설정 해 주었기 때문임을 잊지말아야 한다.

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

jsp 액션태그  (0) 2023.04.03
JSP 태그 종류와 사용법(2)  (0) 2023.03.30
JSP 태그 종류와 사용법(1)  (0) 2023.03.29
10. EL & JSTL (2)  (0) 2022.03.08
10. EL & JSTL (1)  (0) 2022.03.08

 

 

  • 서블릿과 JSP 는 사용 목적이 비즈니스 로직과 화면로직을 분리하기 위함에 있었다. 
  • JSP 내에서도 여러 문법이 있었는데, 자바 언어를 모르더라도 XML을 확장한 문법으로 간편하게 활용할 수 있는 방법을  알아보도록 한다. 
  • 프로젝트를 생성한다. 

 

 

  • 이때 인덱스 파일은 JSP로 만들어보도록 한다. 

 

 

 

  • 이때 web.xml에 들어가 보면 다음과같은 웰컴 파일들을 확인 해 볼 수 있다. 
  • 여기 적힌 순서대로 찾아서 웰컴파일로 삼는 것이다. 
  • 주로 index 혹은 default 등으로 설정 한다.  
  • 이때 index.jsp 도 웰컴파일로 사용할 수 있도록 설정이 되어있는걸 확인할 수 있다. 

 

 

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>el-jstl</title>
</head>
<body>
	<h1 align="center">JSP Action Tag</h1>
	<h3><a href="views/action/testAction.jsp">JSP Action Tag 테스트</a></h3>
	
	<br>
	
	<h2>EL test</h2>
	<h3><a href="test1">request.getAttribute() 테스트</a></h3>
	<h3><a href="test2">request에 저장 된 객체 출력 테스트</a></h3>
	<h3><a href="views/el/testEl3.jsp?name=galaxy&price=95&no=5&no=6&option=삼성">parameter로 값 전달한 경우 el 테스트</a></h3>
	<h3><a href="test4">requestScope와 sessionScope 테스트</a></h3>
	
	<br>
	
	<h2>JSTL test</h2>	
	<h3><a href="views/jstl/testJstlCore.jsp">Core Library Test</a></h3>
	<h3><a href="views/jstl/testJstlFmt.jsp">Fmt Library Test</a></h3>
	<h3><a href="views/jstl/testFunction.jsp">Function Library Test</a></h3>
</body>
</html>

 

 

 

 

JSP Action Tag


  • 1.JSP 액션 태그 2. EL 3. JSTL 의 순으로 학습한다. 
  • 꼭 자바 문법을 모르더라도 쉽게 사용할수 있도록, 혹은 좀더 간결하게 사용할 수 있도록 고안된 문법이다. 
  • XML을 확장한 태그 형식의 문법이다.  

 

  • 경로맨 앞에 슬래쉬(/)를 붙이지 않는 것은 상대경로임을 의미한다. 
  • 즉 상대경로는 최상위 루트인 web에서부터 시작하게 된다.   

  • 그런데 이때 testAction.jsp 에서 다시 index.jsp 로 돌아가고싶을땐 어떻게 해야 하는가?
  • 아마 ../../../ 이와같이 작성해서 경로를 거슬러 올라가야 할 것이다. 
  • 이때 번거로움을 줄이고자 사용하는게 절대경로이다. 
  • 맨 앞에 슬래쉬를 붙이면 이를 절대적인 경로로 해석하게 된다. 이때는 chap14라는 경로부터 시작해야한다. 

 

 

  • 정리하자면, 상대경로를 쓰고싶다면 다음과같이 맨 앞에 슬래쉬를 빼면 되고 

  • 절대경로로 작성하고자 한다면 맨앞에 슬래쉬를 붙여 경로를 픽스 해 두고 하위 경로를 작성하면 된다. 

 

  • 작성한 경로에 맞게 파일을 생성해준다. 

 

 

 

  • testAction 내에 include를 표현하고자 한다. 
  • include 를 표현하려면 include 하려는대상파일이 있어야 하므로 새로 만들어준다. 
  • common.jsp 파일을 만들어준다. 

 

 

common.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>안녕하세요? common.jsp 입니다!</h1>
</body>
</html>

 

  • 다시 testActon.jsp 파일로 돌아와 inclde를 위해 지시자 태그를 작성한다. 
  • 지시자 태그는 다음과 같이 썼다. <%@ %>
  • common.jsp 는 경로로 따졌을때 같은 폴더 내에 있으므로 상대경로서 슬래쉬 없이 다음과같이 작성해준다.  

 

 

  • 확인을 위해선 서버를 올려 지시자 태그가 잘 올라가는지 확인해야 한다. 
  • 해당 서버를 우클릭 >  Add and Remove > configured 에 chap14를 추가 > Finish

 

 

  • 다음과 같이 뜬다면 잘 include 되었으며 상대경로 역시 잘 작성된 것이다. 

 

 

  • 이렇게 지시자 태그를 사용하지않고, 액션태그를 이용해서 인클루드를 표현하는 방법도 있다.  

 

  • 다음과 같이 작성한다. 
  • <jsp:include page="경로"></jsp:include>
  • 액션태그는 xml의 문법을 확장해서 만든 태그이며, 태그 내 열고 닫는 부분을 맞춰주는 것이 보다 엄격하다. 
  • 그래서 여닫는 태그가 잘 적용해 짝 지어졌는지 반드시 확인해야 한다. 

 

<!-- JSP Action Tag의 경우 여닫는 태그 반드시 작성해야 함 -->
	<jsp:include page="common.jsp"/>

 

 

  • 닫는 태그 누락시 해당페이지는 500 Error가 발생한다.
  • <>태그와 태그사이<>에 무언가를 작성하고 싶은게 아니라면, 그냥 태그 뒤에 </>만 작성해 주면 된다.  

 

 

  • 스크립틀릿 태그 내에선 간단한 자바코드를 작성할 수 있다고 했다. 
  • 다음과 같이 작성 후 포워딩을 위해 "testForward.jsp" 경로를 실제로 작성해준다.

 

  • 앞서 request 객체에 setAttribute 해 주었다. 
  • 그말은 즉, 설정된 값을 가져오는 getAttribute 도 가능하게 된다는 말이 된다. 
  • 값을 가져오며, 가져온 값을 표현하기 위해 익스프레션 태그를 사용한다. <%= %>

 

 

  • 실제 테스트 후 주소를 살펴보면, 실제 경로는 view/action/testAction.jsp 로 갔지만
  • 실제적으론 foward 라는 코드를 통해서 testForward 쪽으로 포워딩된 결과를 확인할 수 있다. 
  • 또한 setAttribute로 설정된 홍길동을 getAttribute로 가져오는 것도 확인할 수 있다. 

 

 

 

  • 이렇게 자바코드를 작성할 수 있지만, jsp 액션태그로도 주석처리 된 이 두줄을 작성할 수 있다. 

 

  • 다음과 같이 작성해 줄 수 있다. 
<jsp:forward page="포워딩할/페이지/경로.jsp"/>

 

  • 자바코드로도 작성할 수 있지만 jsp 는 뷰적인 영역이고 뷰에 목적이 있기 때문에
  • 액션 태그와 같은 문법들을 사용할 수 있도록 만들어 놓은 것이다. 
  • testForward.jsp 화면에서 몇가지만 더 확인해보도록 한다. 

 

 

 

 

  • jsp:useBean 활용하기 
  • jsp:useBean 을 활용하기 위해선 값을 설정해줄 하나의 DTO  클래스가 필요하다.

 

  • 서블릿 파일 작성

 

 

 

 

  • DTO 클래스 작성 후 나머지 get, set 메소드를 작성해 주어야 한다. 

 

 

1) Generate Constructor using Fields

마우스 우클릭 > Source > Generate Constructor using Fields > Generate

 

 

 

2) Generate Getters and Setters

마우스 우클릭 > Source > Generate Getters and Setters > Select All > Generate

 

 

3) Generate toString()...

마우스 우클릭 > Source > Generate toString() > Generate

 

 

  • 다시 testForward 로 돌아와 작성한다. 
  • <jsp ... 만 작성하였는데도 굉장히 사용할 수 있는 태그가 많은 것을 확인할 수 있다. 
  • 그중에서 마지막으로 테스트 해보고 싶은 것은 useBean 이고, 아이디와 클래스를 차례로 작성한다.
  • 클래스에는 방금 작성한 DTO 의 패키지명을 포함한 클래스명을 기재한다. 

 

  • 참고로 MemberDTO 의 기본생성자는 필수인데, 이를 주석처리 할 시 내부서버 오류의 문제가 발생한다. 

 

 

  • DTO 내 기본생성자를 가져다 쓰는데, 이것이 주석처리 되면 다음과같은 예외가 발생함을 알 수 있다. 
  • DTO 등을 작성할 때 기본생성자는 항상 기본으로, 습관적으로 작성해두어야 하는 이유이다. 
  • 기본적으로 기본생성자를 가져가서 인스턴스를 생성하는 처리가 다양히 존재하기 때문이다. 
  • useBean은 "member"라는 이름을 가진 인스턴스를 만들자, 라는 것

 

 

 

 

 

<jsp:setProperty> 


  • userBean에 id 로 준것은 그것이 해당 인스턴스의 name 이기 때문이다. 
  • 1) 즉, userBean 의 id는 name 의 역할을 하며, setProperty 내의 name 과 동일해야 한다. 
  • 2) property는 작성했던 dto 내에서 값을 설정해줄 컬럼이다. 
  • 3) 해당 property 가 설정되었으면 하는 값을 value에 설정해 준다. 

 

  • 해당 인스턴스의 각각의 속성에다 원하는 값을 설정 해 주었다. 
  • 이것이 잘 설정되었는지 눈으로 확인하고 싶다면 getProperty를 통해 가져오면 된다. 
  • 마찬가지로 member 라는 인스턴스내의 속성임을 표현하기 위해 name 에 인스턴스 명을 작성한다. 
  • name : 해당 인스턴스를 나타내는 명
  • property : 인스턴스의 필드 값 

 

 

 

 

<%@ 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.getAttribute("name") %>님 환영합니다.</h1>
	
	<h2>jsp:useBean 활용하기</h2>
	<jsp:useBean id="member" class="com.greedy.el.model.dto.MemberDTO"/>
	<jsp:setProperty property="name" name="member" value="홍길동"/>
	<jsp:setProperty property="age" name="member" value="20"/>
	<jsp:setProperty property="phone" name="member" value="010-1234-5678"/>
	<jsp:setProperty property="email" name="member" value="hong@greedy.com"/>
	
	이름 : <jsp:getProperty property="name" name="member"/> <br>
	나이 : <jsp:getProperty property="age" name="member"/> <br>
	전화번호 : <jsp:getProperty property="phone" name="member"/> <br>
	이메일 : <jsp:getProperty property="email" name="member"/> <br>
	
	
	
</body>
</html>

 

 

 

 

참고

더보기

input Box 속성 name과 id의 차이

 
▶ name
(1) document.폼객체명.폼원소명.value
(2) document.getElementsByName("name")
 
name은 page 안에서 중복되어 사용이 가능하며 action에 해당하는 페이지로 전달하는 파라미터로 사용
GET/POST 방식으로 값을 전달하고 싶은 tag에 사용. Form 객체들(input , radio box ,checkbox )에서 전송되어지는 Parameter의 Key값으로 사용
서버단에서는 request.getParameter(parameterName) 이런 식으로 값을 가져옴
 
 
▶ id
(1) document.all.id.value
(2) id.value
(3) document.getElementById("폼 id").value
 
id는 page 안에서 중복 사용 불가하며 주로 JavaScript에서 다룰려고 지정.
name도 자바스크립트로 속성이나 값을 변경 할 수 있으나 중복값을 갖기 때문에 id로 접근하는 것을 주로 사용.
document.getElementById(id) 를 통해서 해당 엘리먼트Object 를 가져옴.
 
XML문서(DOM Tree) 내에서 node를 식별하는 용도로 사용되어 페이지 안에 이름이 한개만 존재해야 함.
보통은 특정 tag를 지정하기 위해서 사용. 태그 내용을 바꾸는 dhtml 작업에서 주로 사용.
 
참고로 id로 설정된 값은 서버쪽으로 파라미터로 넘어가지 않기 때문에 서버쪽에서 접근이 안됨.
 
 
 

input 박스 name과 id의 차이

input Box 속성 name과 id의 차이 ▶ name(1) document.폼객체명.폼원소명.value(2) document.getElementsByName("name") name은 page 안에서 중복되어 사용이 가능하며 action에 해당하는 페이지로 전달하는 파라미터로 사

devfootprint.tistory.com

 

 

 

(+) 참고하면 좋은 글 

https://velog.io/@ansalstmd/JSP4.-%EC%95%A1%EC%85%98-%ED%83%9C%EA%B7%B8

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

EL-JSTL 실습  (0) 2023.04.24
JSP 태그 종류와 사용법(2)  (0) 2023.03.30
JSP 태그 종류와 사용법(1)  (0) 2023.03.29
10. EL & JSTL (2)  (0) 2022.03.08
10. EL & JSTL (1)  (0) 2022.03.08

 

JSP 태그 종류와 사용법(1)

https://0306-0903.tistory.com/202

 

JSP 태그 종류와 사용법(1)

들어가며 앞서 JSP 태그 종류를 살펴보았고, 이번 포스팅에서는 각각의 태그의 쓰임을 좀 더 자세히 살펴본다. https://0306-0903.tistory.com/118 8. JSP(Java Server Page) (2) JSP 내장 객체 JSP 내장 객체란? JSP에

0306-0903.tistory.com

 

 

 

 

  • 앞서 언급한 내용 중 지시자 태그는 page 지시자 태그, include 지시자 태그, taglib 지시자 태그가 있다.
  1. page 지시자 태그 : 현 jsp 페이지에 대한 설정을 하는 지시자 태그
  2. include 지시자 태그 : 다른 jsp 파일을 포함하기 위해 사용하는 지시자 태그
  3. taglib : xml 문법 기반의 라이브러리인 JSTL을 이용하기 위해 선언하는 지시자 태그

 

  • 동그라미 친 해당위치에 page, include, taglib 등을 넣어서 사용하는 것이다. 
  • 앞서 (1) 에서 page 지시자를 살펴보았다면, 이제는 include 지시자를 테스트 하기 위해 index 에 페이지를 하나 더 만들어보기로 한다. 

 

 

 

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp</title>
</head>
<body>
	<h1 align="center">JSP</h1>
	<ul>
		<li><a href="jsp/1_simpleJspStates.jsp">JSP 기본 문법</a></li>
		<li><a href="jsp/2_pageDirective.jsp">page 지시자 태그</a></li>
		<li><a href="jsp/3_includeDirective.jsp">include 지시자 태그</a></li>
	</ul>
</body>
</html>

 

3_includeDirective.jsp 페이지를 만들어준다. 

 

 

 

 

  • include 지시자 태그를 이용하여 file 속성에 jsp 경로를 지정해주면 
  • 해당 jsp에 작성한 내용을 그대로 포함시켜 현재 jsp 파일을 동작시킨다.
  • 포함이 시키려면 포함될 jsp 파일이 있어야하므로 포함을 시킬 jsp 파일을 작성한다. 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>3_includeDirective</title>
</head>
<body>
	<h1 align="center">include directive</h1>
	<!-- 
		include 지시자 태그를 이용하여 file 속성에 jsp 경로를 지정해주면 해당 jsp에 작성한 내용을 그대로 포함시켜 현재 jsp 파일을 동작시킨다.
	 -->
	 <div align="right"><%@ include file="today.jsp" %></div>
	 <%
	 	/* 동일한 변수 이름을 사용했기 때문에 컴파일 에러가 발생한다. */
	 	//String output = "";
	 %>
</body>
</html>

 

 

 

  • 또다시 같은 경로에 Today 라고 하는 jsp 파일을 작성한다. 

 

 

 

 

 

 

  • today.jsp 페이지 내 스크립틀릿 코드 안에 DATE 객체를 작성하는데, 이때는 임포트 되지않았으므로 에러가 발생할 것이다. 

 

  • 하나 더 페이지 지시자를 만들어도 문제없다. 

 

  • 그 다음 작성시 또다시 에러가 발생한다. 

 

 

  • 앞서 배웠듯이, import 가 여러개 필요할 때는 콤마(, ) 찍은 뒤 기술하면 된다고 했다.  

 

 

  • SimpleDateFormat 으로 원하는 문자열 포맷을 나타내보자. 
  • format 이라는 메소드를 사용하여 today를 담는다. 
  • 이후 익스프래션 태그를 이용해 화면에 출력하도록 한다. 

 

  • import 전, today 만 보자면, (주소에 경로를 바꿔 입력했을때) 다음과같이 포맷화가 잘 된 시간을 확인할 수 있다. 

 

 

  • 하지만 확인하고 싶은 것은 include 지시자 태그이다.
  • 돌아와서 지시자 태그 내에 inclue 와 파일속성을 사용해 경로를 작성한다. 

 

 

  • 주소 경로를 다시 입력하여 include 지시자 태그를 클릭하면
  • 다음과같이 화면 오른쪽에 포맷화된 날짜를 확인할 수 있다. 

 

 

 

유의할 점은 무엇이 있는가?


  • 만약  포함하는 페이지에서 output 이라는 변수를 사용한다면
  • 다음과 같은 변수의 중복으로 인한 에러메세지가 뜬다.
  • Duplicate local variable output

 

 

왜?

  • 포함되는 today.jsp 영역안에 이미 output 이라는 지역변수가 선언되어 있기 때문이다. 
  • 전체적인 코드안에 '포함되는(include)' 코드들도 공유되어있다. 
  • include 지시자를 통한 포함 처리를 할 때는 하나의 jsp 로 간주되기 때문에 중복된 변수이름을 사용할 수 없다. 

 

 

 

 

 

 

  • 다음으로 jsp를 이용한 응답처리를 테스트 한다.
  • index.html 내에 요청과 응답을 테스트 할 페이지를 만들어 준후 경로에 맞게 jsp 파일을 생성한다. 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp</title>
</head>
<body>
	<h1 align="center">JSP</h1>
	<ul>
		<li><a href="jsp/1_simpleJspStates.jsp">JSP 기본 문법</a></li>
		<li><a href="jsp/2_pageDirective.jsp">page 지시자 태그</a></li>
		<li><a href="jsp/3_includeDirective.jsp">include 지시자 태그</a></li>
		<li><a href="jsp/4_request.jsp">jsp를 이용한 응답 처리(forward)</a></li>
	</ul>
</body>
</html>

 

 

 

 

 

 

  • form 에 action 태그를 준 후  request 즉 내장객체를 사용한다. 
Action 속성
action 속성은 폼이 제출될 때 수행할 행동을 정의 한다.
(서버에 폼을 제출하는 일반적인 방법은 submit  버튼을 사용)
일반적으로, 폼은 웹서버에 있는 웹페이지에 제출된다.
만약 action 속성이 생략되어 있으면, action 은 현재 페이지로 설정된다.
(출처 : http://jun.hansung.ac.kr/CWP/htmls/HTML%20Forms.html)
Method 속성
method 속성은 폼을 제출할 때 사용될 HTTP method (GET or POST)를 지정한다.
(출처 : http://jun.hansung.ac.kr/CWP/htmls/HTML%20Forms.html)

 

  • jsp 안에서 사용할 수 있게끔 몇가지 객체들이 선언되어 있기 때문이다. 
  • 코드속 request객체는 서블릿에서 사용하던 httpServletRequest 인스턴스이다. 

 

  • contextPath는 프로젝트 내에서 chap13 이라고 임의로 설정이 되어있다. 
  • 가장 root 인 경로부터 시작해서 경로를 작성하고자 하는 것이다. 
  • "<%= request.getContextPath() %>/menu/order" chap13/menu/order 와 동일하다. 

 

 

 

  • 인덱스 페이지로 들어가 정말 그러한지 확인해 볼 수 있다. 

 

 

 

  • 마저 테스트를 하기위해 form 내에 태그 까지 작성해준다. 
  • 화면상에서는 다음과같이 확인이 가능하다. 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>4_request</title>
</head>
<body>
	<h1 align="center">메뉴 주문</h1>
	<form action="<%= request.getContextPath() %>/menu/order" method="post">
		<select id="menu" name="menuName">
			<option value="햄버거">햄버거</option>
			<option value="짜장면">짜장면</option>
			<option value="짬뽕">짬뽕</option>
			<option value="순대국">순대국</option>
		</select>
		<input type="number" min="0" max="100" step="1" name="amount">
		<button type="submit">선택 완료</button>
	</form>
</body>
</html>

 

 

 

  • 다음으로, menu/order 라는 요청에 대해서 매핑될 서블릿 클래스가 필요하다.

  • 클래스 작성

 

  • MenuOrderServlet 을 만들어준다. > Next 

 

  • form 태그에 작성한 대로, 요청될 url 매핑을 다음과같이 작성해준다. 

 

 

  • post 방식의 요청이었으므로, 작성할 메소드는 doPost 가 된다. 
  • 이 서블릿안에서 무엇을 해야 할까? 

 

 

 

서블릿에서 하는 일


  1.  요청 받은 값 확인 및 검증
  2.  비지니스 로직 처리
  3.  응답 페이지 생성 후 응답

여기서 3번은 서블릿이 아닌 jsp 로 foward 하여 응답 페이지를 만들어 보도록 한다. 

 

 

  • * doPost 메소드를 수행하면서 한가지 잊지 말아야 하는 점은, 
  • 값을 받아오기 전에 Character Encoding 처리를 먼저 해주어야 한다는 것이다. 
  • 그래야 한글값에 대한 부분이 잘 처리 될 것이다. 

 

 

1. 요청 받은 값 확인 및 검증 

  • 확인 해야 될 값은 다음과 같다 -> 1. 메뉴 이름 2. 메뉴 수량 
  • name 속성으로 확인한다. 

 

 

 

  • name 속성으로 값을 가져오려고 할 때 에러 줄이 발생한다. 왜일까? 

 

  • 항상 넘어오는 통신 값은 문자열로 넘어온다.
  • 그러므로 필요한 다른 형태가 있다면 형변환(Parsing) 해주어야 한다. 

 

 

 

2. 비즈니스 로직 처리 

  • 비즈니스 로직은 대부분 DB에 CRUD 연산 등을 이용해 이루어지게 된다.
  • 여기서는 DB 연결을 할 것은 아니기 때문에 간단한 로직 처리만 해보자.

		int orderPrice = 0;
		
		switch(menuName) {
		case "햄버거" : orderPrice = 6000 * amount; break;
		case "짜장면" : orderPrice = 7000 * amount; break;
		case "짬뽕" : orderPrice = 8000 * amount; break;
		case "순대국" : orderPrice = 9000 * amount; break;
		}

 

 

 

 

3. 응답 페이지를 생성 후 응답한다.

  • 직접 페이지를 문자열로 생성한 뒤 스트림으로 내보내기를 할 수도 있지만
  • 페이지 작성이 더 쉽고 응답을 보여주는 (역할에 대해 구분하여)
  • 응답만 전용으로 할 수 있는 jsp쪽으로 request에 값을 담은 뒤 forward 해서 화면에 출력해보자.

  • 서블릿을 타긴하지만, 결과값은 다른 JSP 쪽으로 위임하도록 한다. 
  • 위임을 시킬때 필요한 것은 무엇이 있을까? 이 위임된 페이지에서는 이전의 정보가 필요하다.
  • 1. 메뉴 2. 수량 3. 총가격
  • forward라는 기능을 사용 할때는 request 라는 인스턴스에 setAttribute 해줄 수 있다. 

위임전 넘겨줄 정보들

 

  • RequestDispatcher 라는 인스턴스가 필요한데, 이는 request 로부터 가져올 수 있다. 
  • import 해준다. 

 

  • 임포트 후 에러줄이 사라진것을 확인했다면 다음은 path 에 위임될 새로운 jsp 경로를 작성한다. 
  • 아직 만들지 않았으므로 해당 경로에 파일을 만들어 준다.  
  • 항상 RequestDispatcher 에 경로를 적을때는 이미 was의 최상위 root  가 적용된 상태이다. 

  • 서블릿 컨테이너 내부에서는 /root가 적용된 상태이다.
  • root는 web 이라는 폴더를 기준으로 보면된다. web은 톰캣에서 보여주고 있는 프로젝트의 최상위 경로이다. 

 

  • 어떻게 작성을 하던 맨 앞에 슬래쉬(/)를 붙였을때는 절대 경로가 된다. 
  • 슬래쉬를 제거하면 상대경로가 된다. 
  • 슬래쉬를 붙인다면 (/) 이는 root  폴더, 즉 최상위 경로를 의미하게 된다. 

 

  • 값을 설정해준 request를 forward에 보내주면 다시한번 담겨있는 값들이 깊은 복사가 되어 위임처리 된다.  
    RequestDispatcher rd = request.getRequestDispatcher("/jsp/5_response.jsp");
    rd.forward(request, response);

 

  • jsp 페이지 생성

 

 

더보기
package com.greedy.menu.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;


@WebServlet("/menu/order")
public class MenuOrderServlet extends HttpServlet {
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/* 서블릿에서 하는 일
		 * 1. 요청 받은 값 확인 및 검증
		 * 2. 비지니스 로직 처리
		 * 3. 응답 페이지 생성 후 응답
		 * */
		
		/* 1. 요청에 대한 처리 */
		request.setCharacterEncoding("UTF-8");
		
		String menuName = request.getParameter("menuName");
		int amount = Integer.parseInt(request.getParameter("amount"));
		
		System.out.println("menuName : " + menuName);
		System.out.println("amount : " + amount);
		
		/* 2. 비즈니스 로직 처리 */
		/* 비즈니스 로직은 대부분 DB에 CRUD 연산 등을 이용해 이루어지게 된다.
		 * 여기서는 DB 연결을 할 것은 아니기 때문에 간단한 로직 처리만 해보자.
		 * */
		int orderPrice = 0;
		
		switch(menuName) {
		case "햄버거" : orderPrice = 6000 * amount; break;
		case "짜장면" : orderPrice = 7000 * amount; break;
		case "짬뽕" : orderPrice = 8000 * amount; break;
		case "순대국" : orderPrice = 9000 * amount; break;
		}
		
		/* 3. 응답 페이지를 생성 후 응답한다.
		 * 직접 페이지를 문자열로 생성한 뒤 스트림으로 내보내기를 할 수도 있지만
		 * 페이지 작성이 더 쉽고 응답을 보여주는 역할에 대해 구분하여 응답만 전용으로 할 수 있는 jsp쪽으로
		 * request에 값을 담은 뒤 forward 해서 화면에 출력해보자.
		 * */
		request.setAttribute("menuName", menuName);
		request.setAttribute("amount", amount);
		request.setAttribute("orderPrice", orderPrice);
		
		/* 서블릿 컨테이너 내부에서는 /root가 적용된 상태이다. */
		RequestDispatcher rd = request.getRequestDispatcher("/jsp/5_response.jsp");
		rd.forward(request, response);
		
		
		
		
		
		
		
	}

}

 

 

 

  • 스크립틀릿(<% %>)을 이용해서 값을 꺼내준다. 
  • jsp는 결국 서블릿 화 되기 때문에 위임의 과정역시 서블릿과 동일하다.
  • 앞에 request에 setAttribute로 담은 값을 getAttribute로 꺼내올 수 있다.
  • getAttribute 로 꺼내올 때의 리턴값은 항상 Object 타입이다.
  • 그러므로 필요한 타입으로 다운캐스팅이 필요하다. 

 

 

 

  • 넘어온 값을 화면에 표현해보자
  • 화면에 출력할 수 있는 익스프레션 태그<%= %>를 사용한다. 
	<h3>주문하신 음식 : <%= menuName %></h3>
	<h3>주문하신 수량 : <%= amount %>인분</h3>
	<h3>결제하실 최종 금액 : <%= orderPrice %></h3>

 

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>5_response</title>
</head>
<body>
	<!-- 응답하기 위해 헤더에 text/html; charset=UTF-8 설정을 해주어야 하는데 이미 위에서 페이지 지시자 태그에 작성해 두었다. -->
	<%
		/* request에 setAttribute로 담은 값을 getAttribute로 꺼내올 수 있다. */
		String menuName = (String) request.getAttribute("menuName");
		int amount = (Integer) request.getAttribute("amount");
		int orderPrice = (Integer) request.getAttribute("orderPrice");
	%>
	<h3>주문하신 음식 : <%= menuName %></h3>
	<h3>주문하신 수량 : <%= amount %>인분</h3>
	<h3>결제하실 최종 금액 : <%= orderPrice %></h3>
</body>
</html>

 

 

 

  • 다음과 같이 위임된 화면에 값이 잘 넘어가서 나타나는 것을 확인 할 수 있다. 

 

 

흐름을 정리해보면 다음과 같다. 

 

  • 1. 클라이언트 쪽에서 서버로 요청을 보냄
  • 2. 처음에 서블릿에서 해당요청에 대한 비즈니스적 처리를 함
  • 3. 중간과정인 service 나 dao 처리를 거침
  • 4. db 처리,  수행된 db 처리가 다시 servlet 으로 돌아옴
  • 5. servlet 에서는 직접적인 응답처리보다는 이를 JSP 쪽에 위임 함 (forward, 즉 request 와 response)
  • 6. jsp는 결국 서블릿 화 되어서 구동 됨
  • 7.이 구동이 클라이언트에게 다시 전달 됨 

 

 

 

 

 

 

정리


 

 

 

  • 이제 MVC 패턴으로 다시한번 보자면 서블릿은 Controller 의 역할을 하게 될 것이다. 
  • 즉 사용자의 요청을 받아 검증하거나 확인하고 
  • 비즈니스 로직, 즉 서비스 쪽으로 넘겨서 응답받는 처리이다. 

 

  • jsp는 VIEW 에 해당하는 영역이 될 것이다. 

 

 

  • JSP는 변경되지않으면 컴파일 되지않고, 변경될 시 동적으로 로딩된다. 
  • 즉, JSP을 변경시 따로 서버를 구동시키는 처리, 즉 컴파일을 하지 않아도 된다. 웹 컨테이너가 자동으로 수행한다. 
  • JSP파일은 서블릿처럼 소스 폴더 하위에 놓는것이 아니라, web 하위 디렉토리, 폴더에 작성해야 한다. 

 

 

  • 주석태그 : 클라이언트 쪽에 출력되지 않는다.
  • 지시자 태그 : include, page, taglib 등이 있다. 
  • 선언문 : 필드에 대한 값들을 선언할 수 있다. 
  • 스크립틀릿 : 간단한 코드 작성가능
  • 익스프레션 : 화면상에 값을 나타낼 수 있다. 

 

  • 표현태그에서는 세미콜론(;)을 붙이지 않음에 유의한다.

 

 

  • 표현 태그내에 세미콜론을 붙이면 위 아래 사진이 동일한 의미가 된다. 
  • 스크립틀릿 코드는 코드를 작성하는 부분이기 때문에 세미콜론을 붙여도 문제없다. 

 

 

  • 내장된, 기본적으로 제공하는객체를 내장객체라고한다. 따로 선언할 필요 없다.  

 

 

 

 

  • exception 내장객체도 사용해봤었다. 
  • 다만 이때 지시자 태그 내 isErrorPage가 true 여야한다. 

 

 

 

  • 페이지 안에서 쓸수있는 jsp 영역 < 위임을 함으로서 사용할수 있는 request 영역 < 하나의 고유값을 통해 인식될 수 있는 session 영역 

 

 

  • 지시자 태그 중 import는 두번이상 사용할 수 있다. 다른 지시자 태그는 한군데에 한번만 써야한다. 

 

  • jsp에서 문제가 발생할 수 있는 경우는 다음과 같다. 

 

 

 

1. Translation Time Error : jsp에서 서블릿화 되기 위해서 .java가 되는 기점에 translate 되며 발생하는 오류

   - 문제가 있을경우 자바파일로 해석하지 못한다. 

 

  • 2. java 파일이 class 파일로 컴파일 되는 시점에 발생하는 오류 
  • Servlet init() : 서블릿 초기화가 되어 동작되는 시점

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

EL-JSTL 실습  (0) 2023.04.24
jsp 액션태그  (0) 2023.04.03
JSP 태그 종류와 사용법(1)  (0) 2023.03.29
10. EL & JSTL (2)  (0) 2022.03.08
10. EL & JSTL (1)  (0) 2022.03.08

 

들어가며

앞서 JSP 태그 종류를 살펴보았고, 이번 포스팅에서는 각각의 태그의 쓰임을 좀 더 자세히 살펴본다.  

https://0306-0903.tistory.com/118

 

8. JSP(Java Server Page) (2)

JSP 내장 객체 JSP 내장 객체란? JSP에서 기본적으로 제공하는 객체들로 request, response, out 등 Scriptlet tag와 Expression tag에서 사용할 수 있도록 암시적으로 선언 된 객체를 뜻한다. JSP 내장 객체의 종류

0306-0903.tistory.com

 

 

 

  • 프로젝트 하위 web/WEB-INF/index.html 에 다음과 같이 작성한다. 
  • <a href=""></a> 내에 작성하는 것은 해당 jsp 파일 경로를 매핑하는 것이다. 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp</title>
</head>
<body>
	<h1 align="center">JSP</h1>
	<ul>
		<li><a href="jsp/1_simpleJspStates.jsp">JSP 기본 문법</a></li>
		<li><a href="jsp/2_pageDirective.jsp">page 지시자 태그</a></li>
		<li><a href="jsp/3_includeDirective.jsp">include 지시자 태그</a></li>
		<li><a href="jsp/4_request.jsp">jsp를 이용한 응답 처리(forward)</a></li>
	</ul>
</body>
</html>

 

 

  • 매핑한대로 해당 경로아래에 .jsp파일을 만든다.

 

 

  • 위와 같이 경로와 파일명을 작성하면 다음과같은 .jsp 파일이 생성된다. 
  • <title></title> 사이에 페이지 제목을 작성한다. 
  • <% %> 스크립틀릿 태그 안에는 자바코드를 작성할 수 있다. 

 

  • 스크립틀릿 안에 다음과같은 자바 코드를 작성하면 에러가 생긴다. 왜일까? import 가 안되었기 때문이다. 

 

 

 

 


page <지시자 태그>에서 사용 가능한 속성 


<%@&nbsp; &nbsp;%> 바로 이것! 이것이 페이지 지시자 태그

  • 여러가지 있지만 현재 알고 있어야 하는 속성은 크게 많지는 않다.
  1. errorPage : 현재 페이지에서 Exception이 발생하게 되면 속성 값에 설정한 jsp 경로로 exception을 던진다.
  2. isErrorPage : 현재 페이지가 Exception을 처리할 페이지인 경우 true로 지정한다. 기본 값은 false이다. true일시 내장객체 Exception을 사용할 수 있게된다. 
  3. import : java.lang 패키지 이외의 클래스를 현 jsp 파일에서 사용할 때 import 속성에 정의하게 되면 import 선언부를 작성하는 것과 같다.

  • 또한 지시자 태그는 page 지시자 태그, include 지시자 태그, taglib 지시자 태그가 있다.
  1. page 지시자 태그 : 현 jsp 페이지에 대한 설정을 하는 지시자 태그
  2. include 지시자 태그 : 다른 jsp 파일을 포함하기 위해 사용하는 지시자 태그
  3. taglib : xml 문법 기반의 라이브러리인 JSTL을 이용하기 위해 선언하는 지시자 태그

 

 

* 지시자 태그1. import 

  • 지시자 태그 내 import 태그를 사용해 주니 자바 코드작성이 가능한 스크립틀릿 <%%> 내에 에러줄이 사라졌음을 확인할 수 있다. 임포트 처리가 완료 된 것이다. 

 

 

  • 화면으로 돌아가 페이지 지시자 태그를 눌렀을때 스크립틀릿 코드가 돌았기에 콘솔창에 날짜와 관련된 부분이 적히는 것을 확인할 수 있다. 

 

 

 

  • 만약 임포트 할 경로가 두개 이상이라면 다음과 같이 콤마를 찍고 import=" " 내에 작성하면 된다.

 

 

 

* 지시자 태그2. errorPage

  • 에러페이지라는 속성을 테스트 해본다.
  • 현재 페이지에서 Exception이 발생하게 되면 속성 값에 설정한 jsp 경로로 exception을 던진다.
  • 같은 경로 내에 errorPage.jsp 를 만들어 본다. 

 

"같은 경로 내"

 

 

 

  • 같은 경로내 에러페이지.jsp 파일을 만들었다면 다시 지시자 태그내에 isErrorPage="true"를 작성해준다. 
  • 현재 페이지가 Exception을 처리할 페이지인 경우 true로 지정한다.
  • 에러에대한 속성을 다루는 페이지로서 true 라는 뜻
  • 즉, 에러페이지가 아닌 페이지의 기본 값은 false이다. (기본은 에러페이지가 아닐테니까)

 

  • 이와같이 isErrorPage="true" 로 놓았을때 얻을 수 있는 효과는 
  • exception 이라는 내장객체를 사용할 수 있게 된다는 점이다. 
  • 즉 jsp 내에 그저 exception 이라고 썼을때, 존재하게 되는 어떤 내장 객체가 있는데 이를 이용하여
  • (1) getName통해 '이름'을 알아옴으로서 어떤 에러가 발생했는지 알 수 있고
  • (2) getMassage를 통해 오류 메세지를 얻어올 수도 있다. 

 

즉 ,

  • (1) isErrorPage="true" 설정을 통해서
  • (2) exception  내장 객체의 사용이 가능해지므로
  • (3) exception과 관련된 데이터(getName,getMessage)를 얻어올 수 있다.

 

 

 

그렇다면,

  • 이렇게 가져온 변수값 (exceptionType, exceptionMessage)을 expression 태그를 통해서 화면에 출력해보도록한다.
  • 앞서 jsp 태그를 공부하면서 값을 화면에 출력하기 위해선 expression 태그, 즉 표현 태그를 사용할 수 있음을 알았다.

 

익스프레션 태그를 통해, 가져온 에러 정보를 담은 변수를 화면에 출력해보도록 한다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>errorPage</title>
</head>
<body>
	<%
		String exceptionType = exception.getClass().getName();
		String exceptionMessage = exception.getMessage();
	%>
	
	<h1 align="center"><%= exceptionType %></h1>
	<h1 align="center"><%= exceptionMessage %></h1>
</body>
</html>

 

 

 

  • 그런데 한가지 문제는 작성한 오류 메세지를 확인하려면 오류가 나야하는데 있다. 
  • 앞서 작성한 pageDirective 라는 이름의 jsp 파일을 열었을때 오류가 발생하도록 해야한다. 
  • 작성하던 페이지로 돌아가 일부러 오류 발생을 시켜본다. 
Runtime Error가 발생할 코드를 작성하여 errorPage, isErrorPage 속성을 테스트한다.

null 인 상태인데 0번째 인덱스의 문자를 달라는 코드이니 에러가 발생한다.

 

 

 

  • 화면으로 돌아가 pageDirective.jsp 페이지에서 새로고침을 누르면 에러가 발생하여 에러페이지로 넘어간다.
  • 즉 다음과같은 에러 메세지를 확인할 수 있다. 
  • 첫번째줄은 exceptionType이며 두번째줄은 exceptionMessage이다. 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

jsp 액션태그  (0) 2023.04.03
JSP 태그 종류와 사용법(2)  (0) 2023.03.30
10. EL & JSTL (2)  (0) 2022.03.08
10. EL & JSTL (1)  (0) 2022.03.08
9. JSP Action Tag  (0) 2022.03.08

 

 

 

 

 

 

 

JSTL Formatting Tags

 

 

 

 

 

 

<fmt: ??? >


 

 

 

 

 

 

 

 

 

 

 

<fmt:requestEncoding>


요청 파라미터의 문자셋을 value속성으로 설정하는 태그.

 

 

사용 예

 

 

 

 

 

 

 

 

 

<fmt:setLocale>


 

 

 

 

 

 

 

<fmt:setLocale> 사용 예


<c:set var="Date" value="<%=new java.util.Date()%>" />
<h1>미국</h1>
<fmt:setLocale value="en_us"/>
금액 : <fmt:formatNumber value="1000000" type="currency" /><br>
일시 : <fmt:formatDate value="${ Date }" type="both" dateStyle="full"
timeStyle="full"/>
<h1>일본</h1>
<fmt:setLocale value="ja_jp"/>
금액 : <fmt:formatNumber value="1000000" type="currency" /><br>
일시 : <fmt:formatDate value="${ Date }" type="both" dateStyle="full"
timeStyle="full"/>

 

 

 

 

 

 

 

 

 

 

<fmt:timeZone>


 

 

 

 

 

 

 

 

 

<fmt:timeZone> 사용 예


<c:set
var="now"
value="<%= new java.util.Date() %>"/>

<fmt:timeZone value="America/New_York">
뉴욕 : <fmt:formatDate value="${ now }" type="both" dateStyle="full" timeStyle="full"/>
</fmt:timeZone>

<br>

<fmt:timeZone value="Europe/London">
런던 : <fmt:formatDate value="${ now }" type="both" dateStyle="full" timeStyle="full"/>
</fmt:timeZone>

 

 

 

 

 

 

 

 

<fmt:setTimeZone>


fmt:timeZone과 동일하나, 시작과 끝 태그에 영향을 미치는 것이 아닌, 선언한 이후의 모든 태그에 영향을 미친다.

 

 

 

사용 예

 

<c:set var="now" value="<%= new java.util.Date() %>"/>
<fmt:setTimeZone value="America/New_York" />
뉴욕 : <fmt:formatDate value="${ now }" type="both" />

<br>

<fmt:setTimeZone value="Europe/London" />
런던 : <fmt:formatDate value="${ now }" type="both" />

 

 

 

 

 

 

 

 

<fmt:formatNumber>


표현하고자 하는 숫자의 포맷을 통화 기호, ‘ , ’ 표시, %표시 등 원하는 쓰임에 맞게 지정할 수 있다.

 

 

 

사용 예

 

 

    <p> 포맷 방식 세자리 구분 : <fmt:formatNumber value=“${number}”
        type=“number” groupingUsed =“true” /></p> <!–- 12,300.12 -->
    <p> 포맷 방식 통화 기호 : <fmt:formatNumber value=“${number}”
        type=“currency” /></p> <!–- \12,300 -->
    <p> 포맷 방식 백분율 : <fmt:formatNumber value=“${number}”
        type=“percent” /></p> <!–- 012% -->

 

 

 

 

 

 

 

 

 

<fmt:formatNumber> 속성 정리


 

 

 

 

 

 

 

 

 

 

 

<fmt:formatNumber>


  • maxIntegerDigits 및 minIntegerDigits의 속성으로 표시하고자 하는 수의 단위를 표현할 수 있다. 
  • 숫자가 지정한 최대값을 초과할 경우 해당 자릿수 만큼만 표시된다.

 

 

사용 예

 

 

 

 

 

 

 

 

 

 

 

 

<fmt : formatNumber>


  • minFractionalDigits 및 maxFractionalDigits의 속성은 소수 자릿수를 지정할 수 있으며, 숫자가 최소 자릿수를 초과 할 시 자동 반올림이 된다.
  • 패턴 속성을 사용하여 숫자 포맷 방법을 지정할 수 있다.

 

 

사용 예

 

 

 

 

 

 

 

 

 

 

<fmt:parseNumber>


특정 문자열을 값으로 받아 원하는 방식의 숫자 표현으로 변환 시킨다.

 

 

사용 예

 

    <c:set var = "balance" value = "123000.123" />
    <fmt:parseNumber var = "i" type = "number" value = "${balance}" />

    <p>숫자 변환 테스트 1 : ${i}</p>  <!-- 123000.123 -->
    <fmt:parseNumber var = "i" integerOnly = "true" type = "number" value = "${balance}" />
    <p>숫자 변환 테스트 2 : ${i}</p>  <!-- 123000 -->

 

 

 

 

 

 

 

 

 

 

<fmt:parseNumber> 속성 정리


 

 

 

 

 

 

 

 

 

<fmt:formatDate>


  • 날짜나 시간의 포맷방식을 지정하여 화면에 보여줄 때 사용한다.
  • value 속성으로는 java.util.Date() 객체를 사용해야 한다.
  • type 지정 방식에 따라 날짜, 시간, 둘 모두를 표시할 수 있고,
  • dateStyle, timeStyle 속성으로 보여줄 포맷의 표기 방식을 설정할 수 있다.

 

 

사용 문법

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<fmt:formatDate> 속성 정리


 

 

 

 

 

 

 

 

 

Date Style 별 표현 방식


 

 

 

 

 

 

 

 

Time Style 별 표현 방식


 

 

 

 

 

 

 

 

 

<fmt:formatDate> 사용 예


<fmt:formatDate type="time" value="${Date}" />
<br> 오전 1:01:00

<fmt:formatDate type="date" value="${Date}" />
<br> 2018. 1. 01

<fmt:formatDate type="both" value="${Date}" />
<br> 2018. 1. 01 오전 1:01:00

<fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${Date}" />
<br> 18. 1. 01 오전 1:01

<fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${Date}" />
<br> 2018. 1. 01 오전 1:01:00

<fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${Date}" />
<br> 2018년 1월 1일 (월) 오전 1시 1분 00초

 

 

 

 

 

 

 

 

 

 

<fmt:parseDate>


문자열로 표시된 날짜 및 시간 값을 java.util.Date로 변환하여 화면에 표시할 때 사용한다

 

 

사용 예

 

 

 

 

 

 

 

 

 

 

 

 

<fmt:parseDate> 속성 정리


 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSTL Function

 

 

 

 

JSTL Function 종류


 

 

 

 

 

 

 

 

 

JSTL Function


  • 문자열 처리에 관한 메소드들을 EL 형식에서 사용할 수 있게 제공하는 라이브러리
  • 다른 JSTL 태그들과는 다르게 ${fn:메소드명(문자열)} 의 형식으로 EL 태그에 직접 대입하여 사용한다.

 

 

선언 방식

 

 

 

예시

 

<c:set var = "theString" value = "I am a test String"/>

<c:if test = "${fn:contains(theString, 'test')}">
    <p>Found test string<p>
</c:if>

 

 

 

 

 

 

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

JSP 태그 종류와 사용법(2)  (0) 2023.03.30
JSP 태그 종류와 사용법(1)  (0) 2023.03.29
10. EL & JSTL (1)  (0) 2022.03.08
9. JSP Action Tag  (0) 2022.03.08
8. JSP(Java Server Page) (3)  (0) 2022.03.07

 

 

 

 

 

 

 

 

EL & JSTL

 

 

 


EL(Expression Language)


  • JSP 2.0 버전에서 추가된 것으로 <%= %>, out.print() 와 같이 JSP에 쓰이는 Java 코드를 간결하게 사용하는 방법
  • 화면에 표현하고자 하는 코드를 ${ value } 의 형식으로 표현하여 작성하는 것을 말한다.

 

사용 문법

 

 

예시

 

 

 

 

 

 

 

 

 

 

 

EL 연산자 기호


  • ( ) : ~의 원말

 

 

 

 

 

 

 

 

 

EL 연산자 우선 순위


 

 

 

 

 

 

 

 

 

EL 내장 객체


 

 

 

 

 

 

 

 

 

 

 

 

 

JSTL(JSP Standard Tag Library)


  • JSP에서 사용하는 커스텀 태그
  • 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화하여 표준으로 제공한 것을 말한다.

 

선언 방식

 

 

예시

 



 

 

 

 

 

 

 

 

 

JSTL 라이브러리 등록


 

 

 

 

 

 

 

 

 

 

JSTL 태그 종류


  • 최근에는 XML보다 JSON으로 인한 데이터 처리가 늘고 있어 XML Tags 사용을 지양한다.
  • SQL Tags는 Database를 직접 연동하는 것에는 용이하나, Database 트랜잭션을 별도로 묶어 관리하는 MVC Model2 방식에는 맞지 않기 때문에 사용을 지양한다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSTL Core Tags

 

 

 

 


<c:set> 태그


  • <c:set>은 변수를 선언하고 나서 그 변수에 초기값을 대입하는 기능의 태그
  • 자바에서 변수를 선언하는 방법과 비슷하다.

 

Java 변수 선언 방식

 

 

 

 

<c:set> 변수 선언 방식

 




 

 

 

 

 

 

<c:set> 사용법


  • <c:set>에서의 변수 타입은 별도로 선언하지 않는다.
  • 초기값은 반드시 기술해야 한다.
  • <c:set>으로 선언한 변수는 EL 식 안에서 사용할 수 있다.
  • 하지만 JSP <% %> 같은 스크립트릿 요소에서는 사용할 수 없다.

 

 

 

 

 

 

 

 

 

<c:set> 사용법 (2)


  • <c:set>에서 선언한 변수를 JSP 스크립팅 요소에서 쓰는 것은 불가능
  • 하지만, 반대로 스크립팅 요소 안에서 선언한 변수를 <c:set> 의 value 속성에 사용하는 것은 가능하다.

 

 

 

 

 

 

 

 

 

 

 

 

 


<c:set> 실습


    <%@ page 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>JSTL Core 실습</title>
    </head>
    <body>
    <h2>JSTL Core Tags 실습</h2>
    <hr>
    <c:set var="num1" value="10"/>
    <c:set var="num2" value="20"/>
        <ol>
        <li>&lt;c:set&gt; 테스트 : ${num1} + ${num2} = ${num1 + num2}</li>
        </ol>
    </body>
    </html>

 

 

 

 

 

 

 

 

<c:set> 태그 scope 속성


  •  <c:set> 의 scope 속성을 이용하면 page 영역 뿐맊 아니라 request, session, application 영역에 속성을 저장하는 것이 가능하다.
  • 설정하지 않을 시 기본값은 page 이다.

 

    < c:set var="num" value="100" scope="request" />

 

 

 

 

 

 

 

 

<c:set> 태그 배열 설정


<c:set> 의 body 부분에 "," 를 이용해서 배열이나 Collection 과 같이 여러 개의 값을 지정할 수 있다.

 

 

 

 

 

 

 

 

 

 

<c:remove> 태그 배열 설정


  • <c:set> 을 이용해서 선언한 변수는 page, request, session, application 영역에 속성으로 저장되기 때문에 삭제해야 할 필요가 있다.
  • 이 때 사용하는 태그가 <c:remove> 태그이다.
  • scope 속성을 정의하지 않으면 page, request, session, application 영역에 저장되어있는 num 이라는 이름의 속성을 모두 찾아서 제거한다.

 

 

 

 

 

 

 

 

 

 

 

<c:out> 태그


  • <c:out> 태그는 데이터를 출력할 때 사용하는 태그이다.
  • <, >, & 특수 문자를 자동으로 이스케이프 시퀀스(escape sequance)로 바꿔준다.

 

 

 

 

사용 예

 

 

 

 

 

 

 

 

 

 

 

<c:out> 태그 (2)


  • 출력할 데이터에 포함된 특수 문자를 태그의 일부로 인식시키고 싶을 경우
  •   : escapeXml 이라는 속성을 추가하고, false 값을 지정한다.

 

 

사용 예

 

 

 

 

 

 

 

 

 

<c:out> 실습


    <%@ page 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>JSTL Core 실습</title>
    </head>
    <body>
    <h2>JSTL Core Tags 실습</h2>
    <hr>
        <li>&lt;c:out&gt; 테스트 :
            <c:out value="<h3>c:out 테스트 입니다.</h3>"/></li>
        <li>&lt;c:out&gt; 테스트 escapeXml:
            <c:out value="<h3>c:out 테스트 입니다.</h3>" 
            escapeXml="false"/></li>
    </body>
    </html>

 

 

 

 

 

 

 

 

 

 

 

<c : if> 태그


  • 자바 프로그램의 if 문과 비슷한 역할을 하는 태그
  • <c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 한다.
  • 이 때 조건식은 반드시 EL 형식으로 기술한다.

 

사용 예

 

 

 

 

 

 

 

 

 

 

 

 

 

<c:choose> 태그


  • 자바 프로그램의 switch 문과 비슷한 역할을 하는 태그.
  • <c:when>, <c:otherwise> 태그와 함께 사용되는데, 각각 switch 문의 case, default 절과 비슷한 역할을 한다.

 

 

 

사용 예

 

 

 

 

 

 

 

 

 

 

 

 

 

<c : forEach> 태그


  • 자바의 for, for-in문에 해당하는 기능을 제공한다.

 

 

 

사용 예

 

 

 

 

 

 

 

 

 

<c:forEach> 태그


varStatus는 다음과 같은 속성을 가지고 있다.

 

 

 

 

사용 예

 

 

 

 

 

 

 

 

 

 

<c : forTokens> 태그


  • 문자열에 포함된 구분자를 통해 토큰을 분리해서 반복 처리를 한다.
  • items 속성에는 토큰을 포함하는 문자열을 지정한다.
  • delims 속성에는 토큰을 분리하는데 사용할 구획 문자를 기술한다.

 

 

사용 예

 

 

 

 

 

 

 

 

 

 

 

<c:url> 태그


  • url 경로를 생성하고, 해당 url의 param 속성을 선언하여 쿼리스트링을 정의할 수 있는 태그
  • 해당 태그를 통해 url 경로와 관련 쿼리스트링의 값을 미리 설정하여 이를 제어할 수 있다.

 

사용 예

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

JSP 태그 종류와 사용법(1)  (0) 2023.03.29
10. EL & JSTL (2)  (0) 2022.03.08
9. JSP Action Tag  (0) 2022.03.08
8. JSP(Java Server Page) (3)  (0) 2022.03.07
8. JSP(Java Server Page) (2)  (0) 2022.03.07

 

 

 

 

 

JSP Action Tag

 

 

 

 

JSP Action Tag


  • JSP Action 태그는 XML 기술을 이용하여 기존의 JSP 문법을 확장하는 메커니즘을 제공하는 태그로, 웹 브라우저에서 실행되는 것이 아니라, 웹 컨테이너에서 실행되고 결과만 브라우저로 보낸다.
  • 액션 태그 접두어란 태그 이름 앞에 ‘OOO:’ 형식으로 제공하는 태그의 그룹을 지정하는 것을 뜻한다.

 

 

 

 

 

 

 

 

 

 

표준 액션 태그


JSP 에서 기본으로 제공하는 태그

 

 

 

 

 

 

 

 

 

 

 

<jsp:include>


<%@ include file=“파일명” %> 과 쓰임이 동일하나, jsp 파일이 java 파일로 변환될 때 삽입되는 <%@include %>와는 달리 <jsp:include>는 jsp 파일이 java 파일로 바뀌고 컴파일이 완료되어 런타임 시 삽입된다.

 

 

 

사용 문법

 


예시

    <jsp:include page=“./header.html”>
        <jsp:param name=“str” value=“안녕하세요.”>
    </jsp:include>

 

 

 

 

 

 

 

 

 

jsp:include 실습


 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
    <meta charset="UTF-8">
    <title>Index Page</title>
    </head>
    <body>
    <jsp:include page="header.html"/>
        <%-- <%@ include file=“header.html" %> 
        와 출력은 동일하나 방식의 차이가 있음 --%>
    <hr>
    <br>
    <h1>Index Page 입니다.</h1>
    <br>
    </body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

jsp:forward


  • 하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할 때 사용한다.
  • 전달하는 페이지에서 request, response 객체가 같이 전달되며, URL은 변경되지 않는다.

 

사용 문법

 


예시

    <% if( str.equals(“A”)) { %>
        < jsp:forward page=“./A_Class.jsp”/>
    <% } else { %>
        < jsp:forward page=“./B_Class.jsp”/>
    <% } %>



 

 

 

 

 

 

 

 

jsp:forward 실습


 

  • forward.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>forward Page</title>
    </head>
    <body>
    <pre>
    아래 forward 액션태그가 동작하면,
    이 글은 보이지 않게 됨!
    </pre>
    <jsp:forward page="./dstForm.html"/>
    </body>
    </html>



 

  • dstForm.jsp
    <!DOCTYPE html>
    <html>
        <head>
        <meta charset="UTF-8">
        <title>Forward Check</title>
        </head>
        <body>
            <pre>
            만약 forward가 동작했다면,
            여러분은 이 페이지를 보고 계신 겁니다.
            하지만 URL은 변하지 않았습니다.
            </pre>
        </body>
    </html>
  • url은 forward.jsp를 가리키지만, 화면의 내용은 dstForm.jsp의 내용이 출력된 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

jsp:useBean


  • java class를 참조하여 빈 객체를 생성하고, setProperty와 getProperty를 통해 값을 저장, 조회할 수 있다.
  • 이미 같은 이름의 객체가 생성된 경우 기존의 객체를 참조한다.

 

 

 

 

 

 

 

 

 

 

jsp : setProperty


  • 자바빈 객체의 속성값을 설정하거나 수정할때 사용

 

 

  • ‘param=“*’ 사용하면 request객체에 저장된 param값과 일치하는 멤버변수의 값을 전부 변경

 

 

 

 

 

jsp:getProperty


자바빈 객체의 속성값을 가져올때 사용

 

 

 

 

 

 

 

 

jsp:useBean 실습


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>useBean 사용하기</title>
    </head>
    <body>
    <jsp:useBean id="m" class="test.member.model.vo.Member" scope="page">
    <jsp:setProperty name="m" property="id" value="user1"/>
    <jsp:setProperty name="m" property="passwd" value="pass1"/>
    <jsp:setProperty name="m" property="name" value="김유신"/>
    </jsp:useBean>
    <h2>jsp:useBean</h2>
    ID : <jsp:getProperty property="id" name="m"/><br>
    PASSWORD : <jsp:getProperty property="passwd" name="m"/><br>
    이름 : <jsp:getProperty property="name" name="m"/>
    </body>
    </html>



 

 

 

  • Member 객체를 <% %> 태그로 생성한 것이 아니라, <jsp:useBean>을 통해 객체를 생성하여 해당 객체 명을 통해 속성들을 확인이 가능하다.

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

10. EL & JSTL (2)  (0) 2022.03.08
10. EL & JSTL (1)  (0) 2022.03.08
8. JSP(Java Server Page) (3)  (0) 2022.03.07
8. JSP(Java Server Page) (2)  (0) 2022.03.07
8. JSP(Java Server Page) (1)  (0) 2022.03.07

 

 

 

 

 

 

JSP Exception 처리

 

 

 

 

JSP Exception 처리


  • 하나의 JSP 페이지에 대한 예외 처리 페이지는 하나만 지정할 수 있기 때문에 예외마다 다른 예외 처리는 불가능하다.

 

 

 

예외가 발생할 페이지

 

 

 

예외를 처리할 페이지

 

 

 

 

 

 

 

 

 

 

 

 

 

 

에러 발생 페이지 작성


 

error/throws_error.jsp

    <%@ page contentType="text/html; charset=UTF8"
    pageEncoding="UTF-8" errorPage="exceptionPage.jsp" %>

    <html>
    <head>
        <title>에러 발생 페이지!</title>
    </head>

    <body>
        <h2>JSP 에러 테스트 페이지</h2>
        <% String str = null; %>
        str 문자열 길이 : <%= str.length() %> 개
    </body>
    </html>

 

 

 

 

 

 

에러 처리 페이지 작성 (2)


 

error/exceptionPage.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>

    <html>
    <head>
        <title>Exception Check</title>
    </head>

    <body>
        <h2>에러가 발생하였습니다!</h2>
        <h3>에러 종류 : <%= exception.getClass().getName() %></h3>
    </body>
    </html>

 

 

 

 

 

 

  • http://localhost:8800/first/views/error/throws_error.jsp 접속

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP 디버깅

 

 

 

 

Translation Time Error


  • JSP 파일을 Java 파일로 변환할 때 발생하는 오류
  • Web Container가 JSP 페이지의 Scripting elements의 구문을 분석할 수 없을 때 발생한다

 

예)  ‚%>‛ 없이 ‚<%!‛ 만 사용한 경우

 

 


Compile Time Error


  • Java 파일을 Class 파일로 컴파일 할 때 발생하는 오류
  • 자바 문법 오류

 

예) 자바 문장을 끝낼 때, ‘;’ 사용하지 않음

 

 

 

Runtime error


실행 도중, Exception이 발생하는 경우

 

예) HTML form 태그 전송 시 없는 이름을 getParameter() 인자에 사용하면, getParameter() 는 null을 return하는데 이 값을 가지고 조작하는 경우 NullPointerException 발생

 

 

 

 

 

 

 

 

 

 

에러 발생 시점


 

 

 

 

 

 

 

 

 

Translation Time Error 실습


 

error/Translation_error.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <html>

    <head>
        <title>Translation Error</title>
    </head>

    <body>
    <%-- 정상적으로 JSP 태그가 끝나지 않아 에러가 발생한다 --%>
    <%= request.getSession()
    </body>
    </html>

 

 

 

 

 

 

 

 

 

 

 

 

error/Translation_error.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

    <html>
    <head>
        <title>Compile Error</title>
    </head>

    <body>
    <%-- 코드가 ‘;’으로 끝나지 않아 컴파일 에러가 발생한다 --%>
    <% out.print("Welcome :" ) %>
    </body>
    </html>

 

 

 

 

 

 

 

 

 

 

RunTime Error 실습


 

error/Runtime_error.jsp

    <%@ page language="java" contentType="text/html;
    charset=UTF-8" pageEncoding="UTF-8"%>

    <html>
    <head>
        <title>Runtime Error</title>
    </head>

    <body>
    <%-- 전달받지 않은 name 의 길이를 출력하므로 에러 발생 --%>
    <%= request.getParameter("name").length() %>
    </body>
    </html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

10. EL & JSTL (1)  (0) 2022.03.08
9. JSP Action Tag  (0) 2022.03.08
8. JSP(Java Server Page) (2)  (0) 2022.03.07
8. JSP(Java Server Page) (1)  (0) 2022.03.07
7. 서블릿 리스너  (0) 2022.03.04

 

 

 

 

 

 

JSP 내장 객체

 

 

 

 

 

JSP 내장 객체란?


JSP에서 기본적으로 제공하는 객체들로 request, response, out 등 Scriptlet tag와 Expression tag에서 사용할 수 있도록 암시적으로 선언 된 객체를 뜻한다.

 

 

 

 

 

 

 

JSP 내장 객체의 종류


 

 

 

 

 

 

 

JSP 내장 객체의 영역


 

 

 

 

 

 

 

Request 주요 메소드


 

 

 

 

 

 

 

Response 주요 메소드


 

 

 

 

 

 

 

 

 

HTTP Request 전송의 GET 방식과 POST 방식


  • HTTP 프로토콜을 통해 데이터를 전송할 때 보통 두 가지의 Request Method를 사용하는데 바로 GET 방식과 POST 방식이다.
  • GET 방식은 요청한 정보와 함께 전달되는 파라미터 값이 URL 내부에 쿼리 스트링(query string)으로 저장되어 보내진다.
  • POST 방식은 서버로 파라미터 값이 전달될 때, HTTP 메시지 바디 안에 query string이 저장되어 보내진다.

 

 

 

 

 

 

 

Query String이란?


  • 사용자가 서버로 데이터를 전달할 때 전송된 데이터들을 URL의 뒷부분에 ‘?’ 로 구분 지어 전송하는 것을 말한다.
  • key 는 input 태그의 name 값을, value는 input 태그의 value 값을 뜻한다.
  • ‘?’ 는 Query String의 시작을 의미하며, ‘&’ 는 각 데이터 간의 구분 자를 뜻한다.

 

[표현 식]

http://localhost:8800/first/test.jsp?key=value


[표현 예제]

http://localhost:8800/first/test.jsp?id=sample&pwd=sample

 

 

 

 

 

 

 

 

GET 방식 예제


 

 

 

 

 

 

 

 

 

 

 

POST 방식 예제


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP 지시자 태그

 

 

 

page 지시자 태그 사용법


  • 여러 개의 page 구문을 사용할 수 있지만, import 속성을 제외하고는 한 페이지에 한 번씩만 선언할 수 있다.
  • page 지시어는 JSP 파일의 어느 위치에 와도 상관 없으나, 가장 첫 부분에 사용하는 것이 좋다.

 

    <%@ page import=“java.io.*”%>
    <%@ page contentType=“text/html” %>

 

 

 

 

 

 

 

 

import


  • 변환될 서블릿 클래스에 필요한 자바 클래스의 import 문을 정의한다.
  • java.lang, javax.servlet, javax.servlet.http, javax.servlet.jsp 는 기본적으로 import 되어 있다.
  • 여러 package import시 ‘,’ 기호를 이용하여 구분한다.
    <%@ page import=“java.io.*”%>
    <%@ page contentType=“text/html” %>

 

 

 

 

 

 

contentType


MIME 타입과 문자 인코딩을 설정한다.

 

    <%@ page contentType=“text/html;charset=euc-kr” %>

 

 

 

 

 

 

isErrorPage


  • 현재 페이지가 JSP 오류 처리용 페이지인지를 정의한다.
  • 값은 true 또는 false(default)이다.
  • true인 경우, exception 내장 객체를 사용할 수 있다.

 

    <%@ page isErrorPage=“true” %>

 

 

 

 

 

 

errorPage


  • 해당 JSP 페이지가 발생시키는 모든 runtime exception을 처리할 다른 JSP페이지를 지정한다.
  • 값은 상대적인 URL이다.

 

    <%@ page errorPage=“/error/errorForm.jsp” %>

 

 

 

 

 

 

 

include 지시자 태그


include 지시자 태그를 사용하면 다른 페이지(JSP, HTML)를 포함할 수 있다.

 

 

문법

    <%@ include file=“페이지 경로” %>

 

사용 예제

    <%@ include file=“footer.html” %>

 

 

 

 

 

 

 

 

 

include 지시자 태그 실습


 

포함될 페이지 
  •  web/views/footer.html
    <footer> Copyright Greedy Corp. All rights reserved. </footer>



 

포함하는 페이지
  • web/views/index.jsp
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>JavaServer Page 실습</title>
</head>
<body>
<h1>Index Page 입니다.</h1>
<hr>
<%@ include file="footer.html" %>
</body>
</html>

 

 

 

 

 

 

실습 테스트


 

 

 

index_jsp.java
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"UTF-8\">\r\n");
out.write("<title>Java Server Page 실습</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("<h1>Index Page입니다.</h1>\r\n");
out.write("<hr>\r\n");
out.write("<!-- JSP에 포함되면서 HTML태그가 적용된다.>\r\n");
out.write("<footer>\r\n");
out.write("<\tCopyright Greedy Corp. All rights reserved.\r\n>");
out.write("</footer>");
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n")



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

9. JSP Action Tag  (0) 2022.03.08
8. JSP(Java Server Page) (3)  (0) 2022.03.07
8. JSP(Java Server Page) (1)  (0) 2022.03.07
7. 서블릿 리스너  (0) 2022.03.04
6. 서블릿 필터와 래퍼  (0) 2022.03.03

 

 

 

 

 

 

JSP(Java Server Page)

 

 

 

 


Servlet과 JSP비교


JSP 기술의 목표는 Servlet의 Business 로직으로부터 화면 로직을 분리하는데 있다

 

 

  • 서블릿은 비즈니스적인 로직을 처리하는 데는 좋지만 <html> 코드를 중간중간 삽입하는데는 너무 어렵다. 
  • 해서 '자바 코드 내에 html을 삽입'하는 서블릿에서 벗어나 'html 코드안에 중간중간 필요한 자바 코드를 삽입'하는 jsp라는  또다른 방식을 방식을 사용하게 된다. 

 

 

 

 

 

 

JSP 실행 방식


  • 전체적으로 한눈에 보기엔 html 형식을 취하고 있지만 이는 내부적으로 다시 서블릿 형식(.java)을 취하게 된다. 이후 컴파일 된 상태에서 적용된다. 

 

 

 

 

코드 예제로 확인하기 


  • new> 다이나믹 웹 프로젝트 > 프로젝트명 기입 

 

  • web > New > HTML File 선택 > 파일명 : index.html

 

  • HTML 화면 내 보고자 하는 링크를 jsp 형식으로 작성해준다. 해당 jsp파일을 작성해야한다. 

 

 

  • web > New > JSP File, 새로운 jsp 파일 생성 

 

  • 링크명을 보면 web 하단에 jsp 폴더가 존재해야한다. 이후 / 아래 jsp 형식의 파일이 존재해야 하므로 파일명도 기입해준다. 

 

 

  • 생성된 파일을 관찰해보면 3-12번 줄은 우리가 알고있는 html 파일이다. 다른점은 1-2번 줄이다. 
  • JSP는 표면상으로는 HTML문서와 유사하다. 하지만 JSP 컨테이너가 최초 JSP를 요청할 시 JSP를 서블릿으로 변환 시켜야한다. 자바코드가 당연히 html 안에서 해석될 리가 없기 때문이다. 
  • 그 후엔 서블릿 컨테이너가 변환 된 서블릿을 이용해 인스턴스를 생성하고 호출한다.
  • JSP는 매 요청 시 마다 기존 JSP 파일이 변환 되었는지 확인하여 변경이 없는 경우 기본에 생성해 둔 인스턴스를 사용하고, 변경이 있는 경우 translate 과정을 거쳐 인스턴스를 다시 생성한다.

 

  • 변경이 있는 경우 translate 과정을 거쳐 인스턴스를 다시 생성한다는 무슨 의미인가? 
  • 서블릿이라는 클래스를 작성했을 때, 수정사항이 있을경우 반드시 다시 컴파일이 진행되어야 했다. 이를 정적 로딩 처리라고 한다. 즉, 수정 시 무조건 컴파일
  • 그러나 jsp 컨테이너는 수정사항이 있을경우 직접 해줄 필요 없이 '내부적으로' 다시 컴파일이 일어난다. 이를 동적로딩처리라고 한다.
  • 즉 변경이 있는 경우, 동적로딩처리 된다는 의미이다. 

 

 

  • JSP는 표면상으로는 HTML문서와 유사하다. 하지만 JSP 컨테이너가 최초 JSP를 요청할 시 JSP를 서블릿으로 변환 시킨 후, 서블릿 컨테이너가 변환 된 서블릿을 이용해 인스턴스를 생성하고 호출한다.
  • JSP는 매 요청 시 마다 기존 JSP 파일이 변환 되었는지 확인하여 변경이 없는 경우 기본에 생성해 둔 인스턴스를 사용하고, 변경이 있는 경우 translate 과정을 거쳐 인스턴스를 다시 생성한다.
  • jsp는 html 기반의 문서에서 자바 문법을 사용할 수 있도록 지원한다.
  • jsp의 태그 엘리먼트를 이용하여 사용 목적별로 자바 코드를 이용할 수 있도록 지원한다.
  • jsp의 태그 엘리먼트는 directive, declare, scriptlet, expression, comment 가 있다.

 

 

태그1. 페이지 지시자 태그 (directive) -  <%@ ___ %>


  • 안 만들었지만 자동으로 만들어져 있는것, 페이지 상단의 지시자 태그, 필수로 선언이 되어야 함
  • 페이지에 대한 설정을 하는 지시자 태그이다.
  • 현재 페이지에 스크립틀릿 태그를 이용하여 작성하는 문법은 자바라는 의미이며, (page language="java")
  • response header에 응답을 위한 설정(contentType="text/html; charset=UTF-8")을 하는 것도 할 수 있다.
  • content-type이라는 헤더에 밈타입과 인코딩 방식을 지정해두었다.


 

 

태그2. JSP 주석 태그 (comment) - <%-- ___ --%>


  • <%-- html 주석은 클라이언트에 노출 되지만, jsp 주석은 클라이언트에게 노출되지 않는다. --%>
  • 즉 위 30번째 주석은 노출되지만 31번째 주석은 노출되지않는다. 

 

더보기

 

정말 jsp 주석태그는 출력되지 않는지 확인해보자. 해당 프로젝트를 서버창에 돌린다. 

서버 우클릭 > Add and Remove 

 

 현재 프로젝트를 Available 에서 Configured 로 추가 

 서버를 올린다. 

 

띄운 로컬 주소 뒤 chap13 입력 

 

우클릭 > 페이지 소스 보기 

 

이후 페이지 소스 보기 시 html 주석 태그는 나오지만 jsp 주석 태그는 출력되지않는 것을 확인할 수 있다. 

 

 

 

 

 

태그3. 선언 태그 (declare) -  <%! ___ %>


  • 서블릿으로 변환 시 선언 태그 내에 작성한 내용을 필드로 선언해준다. 
  • 자바 코드 안에서 필드 선언하듯이 해당 태그 내에 필드처럼 작성해줄 수 있다. 

 

 

 

태그4. 스크립틀릿 태그 (scriptlet) -  <% ___ %>


  • 간단한 자바 코드를 작성할 수 있는 부분이다.
  • 스크립틀릿 태그 내에서의 주석은 자바 주석과 동일하다. 
  • 선언 태그에서 작성한 내용을 초기화 하고 출력할 수 도 있으며, 이 안에선 간단한 자바코드, 간단한 로직 처리도 가능하다
  • 태그 3에서 필드 역할을 하는 name 과 age 를 작성했다면, 아래와같은 로직 작성이 가능하다. 
	<% 
		//간단한 자바 코드를 작성할 수 있는 부분이다.
		/* 스크립틀릿 태그 내에서의 주석은 자바 주석과 동일하다. */
		/* 선언 태그에서 작성한 내용을 초기화 하고 출력할 수 도 있으며, 간단한 로직 처리도 가능하다. */
		name = "홍길동";
		age = 20;
		
		System.out.println("name : " + name);
		System.out.println("age : " + age);
		
		/* 간단한 로직 작성도 가능하다. */
		for(int i = 0; i < name.length(); i++) {
			System.out.println(name.charAt(i));
		}
	%>

 

 

 

태그5. 익스프레션 태그 (expression) -  <%= ___ %>


  • PrintWriter를 이용하여 브라우저에 '값을 내보내기' 하여 브라우저에 보여지게 한다. 
  • 아래와 같은 코드를 작성했다면 화면상엔 이미지와 같이 보여지게 될 것이다. 
	name : <%= name %> <br>
	age : <%= age %> <br>

html Elements 요소에서도 확인 가능

 

 

 

 

 

JSP 특징


  • 1. JSP 파일이 변경되지 않는다면, ‘.jsp’ 파일에 대한 컴파일은 다시 일어나지 않는다.
  • 2. JSP 파일이 변경될 때 마다, Web Container는 translation, compile, load, initialization 과정을 수행한다.
    ※ 주의 : 구 버전의 JSP 파일을 overwrite 할 경우 제대로 반영이 되지 않는 경우가 발생할 수 있다.
  • 3. JSP 파일의 배포 환경(위치)은 HTML과 동일하다
    = WEB_ROOT 폴더 하단.

 

 

 

 

 

 

 

JSP 만들기


  • 웹 프로젝트 내 web/views 를 선택 후, 우클릭하여 JSP 파일 생성

 

 

 

 

 

  • 생성될 경로를 확인하고 Next, New JSP File 양식 선택 후 Finish

 

 

 

 

 

 

 

  • 생성된 JSP 파일을 확인하고 서버를 실행하여 접근 확인

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP Elements

 

 

 

JSP Element 표기법


 

 

 

 

  • JSP Element 표기법 예제

 

 

 

 

 

 

 

 

Comments tag 종류에 따른 컴파일 여부

 

 

HTML 주석

내부에서 out.write(); 로 변환되나 화면에는 보이지 않는다.

    <!-– HTML 주석입니다 -->
    out.write(" <!-– HTML 주석입니다 --> \r\n");

 

 

JSP 주석 태그

JSP 파일 내에만 존재하고, Servlet 코드에는 포함되지 않는다.

    <%-- JSP 주석 태그 입니다. --%>

 

 

Java 주석 태그

변환된 Servlet 코드에는 포함되지만 HTTP 응답으로 전송되지 않는다.

    <%-- //Java 주석입니다. --%>
    //Java 주석입니다

 

 

 

 

 

 

 

 

 

Directive tag


JSP page 전체에 영향을 미치는 정보를 기술할 때 쓰인다.

    <%@ 지시자 [속성명=“value”] … %>

 

 

 

지시자 종류

  • page, include, taglib 3종류로 나뉜다.
    <%@ page import=“java.io.*”%>
    <%@ include file=“header.html”%>
    <%@ taglib uri="/WEB-INF/tags/abc" prefix=“abc" %>

 

 

 

 

 

 

Declaration tag


Servlet 클래스의 멤버변수/메소드에 해당하는 코드를 작성할 때 사용된다.

 

 

 

멤버 변수 선언

    <%! public static final String DEFAULT_NAME=“홍길동”; %>
    <%! int counter = 0; %>

 

멤버 메소드 선언

    <%!
        public String getName(HttpServletRequest request){
            return request.getParameter(“name”);
        }
    %>

 

 

 

 

 

 

 

Scriptlet tag


_jspService 메소드의 로컬 변수와 코드를 작성할 때 사용된다.

 

 

로컬 변수 선언

    <% int i = 0; %>

 


자바 코드 내용 기술

    <% if ( i > 10 ) { %>
    i가 10보다 큽니다.
    <% } else { %>
    i가 10보다 작습니다.
    <% } %>

 

 

 

 

 

 

 

Expression tag


Servlet 코드에서 out.print() 의 역할을 수행한다.

 

 

예제

현재 시간은 <%= new java.util.Date() %> 입니다.
※ 표현 태그에서는 ‘;’ 을 붙이지 않는다

 

 

    <%= new java.util.Date(); %>

 

    out.print( new java.util.Date(); ); -> Syntax Error !!



 

 

 

 

 

 

JSP도 Servlet이다!


  • JSP도 컴파일 시 Servlet으로 변환되어 서비스 된다. 해당 과정을 직접 보기 위해 먼저 web/META-INF/ 경로에 context.xml 파일을 생성하여 다음과 같이 기록한다.

 

 

 

 

 

 

  • context.xml은 웹 애플리케이션 서버에서 사용할 자원을 설정하는 파일이다. 이 중 Context workDir 속성은 컴파일 된 JSP class 파일이 위치할 경로를 가리킨다. 해당 경로는 자신의 프로젝트 내 WEB-INF 경로에 맞게 작성하자

 

 

 

 

  • 설정이 끝났다면 서버를 재실행하고 Project Explorer를 갱신하여 생성된 소스코드를 확인해보자.

 

 

 

 

 

  • JSP Elements - Java 코드 변환 내용

 

 

 

 

 

 

 

 

 

'Programming > Servlet&JSP' 카테고리의 다른 글

8. JSP(Java Server Page) (3)  (0) 2022.03.07
8. JSP(Java Server Page) (2)  (0) 2022.03.07
7. 서블릿 리스너  (0) 2022.03.04
6. 서블릿 필터와 래퍼  (0) 2022.03.03
5. Session과 Cookie  (0) 2022.03.03

+ Recent posts