고래씌
[JSP] 7-1. Action Tag (EL 기본 구문) 본문
1. JSP Action Tag 란?
- XML기술을 이용하여 기존의 JSP문법을 확장하는 매커니즘을 제공하는 태그
- 웹 브라우저에서 실행되는 것이 아니라 웹 컨테이너에서 실행되고 결과만 브라우저로 보냄
▶ 표준 액션 태그
1) 실습 준비
▶ActionProject 프로젝트 생성
2. EL(Expression Language)
: 기존에 사용했던 표현식<&= name %>와같이 jsp상에서 표현하고자 하는 값을 ${name }의 형식으로 표현해서 작성하는 것
- EL 내장 객체 => 별도의 변수 선언없이(import 없이) 사용할 수 있는 것!
▶ 데이터들을 담을 수 있는 JSP 내장객체 종류
1. ServletContext (application scope)
- 한 애플리케이션당 1개만 존재하는 객체
- 이 영역에 데이터를 담으면 애플리케이션 전역에서 사용 가능
=> 공유범위가 가장 크다.
2. HttpSession (session scope)
- 한 브라우저당 1개만 존재하는 객체
- 이 영역에 데이터를 담으면 jsp/servlet 단 등 모두 사용 가능하다.
- 값이 한번 담기면 서버가 멈추거나, 브라우저가 종료되기 전까지 사용 가능하다.
=> 공유범위가 제한적임
3. HttpServletRequest (request scope)
- 요청 및 응답시 생성되는 객체
- 이 영역에 데이터를 담으면 해당 request객체를 포워딩받는 응답 jsp에서 사용 가능
=> 공유범위가 해당 요청에 대한 응답 jsp까지
4. PageContext (page scope)
- 현재 jsp페이지에서만 사용가능
=> 공유범위가 가장 적음
- 위의 객체들에 값을 담을 때는 setAttribute('키', 데이터)
- 꺼낼 때는 getAttribute('키')
- 지울 때는 removeAttribute('키')
▶ index.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(Expression Language)</h1>
<p>
기존에 사용했던 표현식<&= name %>와같이<br>
jsp상에서 표현하고자 하는 값을 \${name }의 형식으로 표현해서 작성하는 것
</p>
<h3>1. EL 기본 구문에 대해서 배우기</h3>
<a href="/action/el.do">01_EL</a>
</body>
</html>
▶ Peson.java 클래스 생성
package com.kh.model.vo;
public class Person {
private String name;
private int age;
private String gender;
public Person() {
}
public Person(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";
}
}
▶ ELServlet.java 파일 생성(Servlet)
package com.kh.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
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;
import com.kh.model.vo.Person;
/**
* Servlet implementation class ELServlet
*/
@WebServlet("/el.do")
public class ELServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ELServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// requestScope에 데이터 담기
request.setAttribute("classRoom", "C강의장"); // 키값 classRoom
request.setAttribute("student", new Person("이고래", 26, "여자"));
// sessionScope에 담기
HttpSession session = request.getSession();
session.setAttribute("academy", "이고래아카데미");
session.setAttribute("teacher", new Person("이선생",35, "남자"));
// 동일한 키값으로 데이터 추가
request.setAttribute("scope", "request scope");
session.setAttribute("scope", "session scope");
// application scope에 담기
ServletContext application = request.getServletContext();
application.setAttribute("scope", "application");
request.getRequestDispatcher("views/1_EL/01_el.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
▶ 01_el.jsp 파일 생성
1) 기존방식대로 스크립틀릿과 표현식을 이용해서 각 영역에 담겨있는 값을 뽑아서 화면에 출력하기
- 결과화면
2) EL을 이용해서 보다 쉽게 Scope에 저장된 값들 출력하기
- EL은 getAttribute("키")을 통해 값을 빼올 필요 없이 "키"값만 제시하면 바로 접근 가능하다.
- 내부적으로 해당 scope영역에 키 값의 밸류값을 가져올 수 있다
- 기본적으로 EL은 JSP내장객체를 구분하지 않고 모든 내장객체에 키값을 검색해서 존재하는 경우 값을 가져온다.
- 단점은 자바스크립트의 표현객체와 겹친다.
- 위 코드를 모두 주석처리하고 다음과 같이 실행해보았다.
=> teacher에 접근했을때의 밸류값은 person객체임. Person객체의 각 필드에 담긴 값을 출력하고자 한다면 객체명.필드명 으로 접근하면 됨. 내부적으로 getter메소드를 찾아서 실행함. getter함수가 없다면 가져올 수 없다.
=> 스크립틀릿과 표현식을 이용하지 않아도 출력되는 것을 볼 수 있다!
3) EL 사용시 내장객체들이 동일한 키값을 사용하는 경우
▶ EL은 공유범위가 제일 작은 Scope에서부터 키값을 검색함
page => request => session => application 순서
만약 모든 영역에서 값을 못찾을 경우 아무것도 출력되지 않는다.
scope 값 : ${scope } |
- 결과화면
4) 직접 Scope영역을 지정해서 접근하기
<% // page scope에 데이터 담기 pageContext.setAttribute("scope", "page"); %> pageScope에 담긴 값 : ${scope } 또는 ${pageScope.scope } <br> requestScope에 담긴 값 : ${requestScope.scope } <br> sessionScope에 담긴 값 : ${sessionScope.scope } <br> applicationScope에 담긴 값 : ${applicationScope.scope } <br><br> |
- 결과화면
'Server > JSP과 Servlet' 카테고리의 다른 글
[JSP] 7-3. JSP Action Tag(include, forward, JSTL(CORE Library)) (0) | 2023.12.18 |
---|---|
[JSP] 7-2. Action Tag(EL 연산자) (0) | 2023.12.18 |
[JSP] 6-4. 아이디 중복체크 기능, 댓글 기능 (0) | 2023.12.15 |
[JSP] 6-3. AJAX(게시글 리스트 검색, XML데이터 가져오기, 파일 업로드 처리) (0) | 2023.12.14 |
[JSP] 6-2. AJAX (Gson ,ArrayList 받기) (0) | 2023.12.14 |