2023. 1. 25. 10:41ㆍJAVA/JSP
JSP Action이란?
JSP에서 기본으로 제공하는 태그들의 집합을 'JSP Action'이라 한다.
JSP Action은 각 태그에 맞는 자바 코드로 변환된다.
즉, JSP Action 태그를 사용하지 않더라도 스크립트릿 <% %>에 자바 코드를 작성해도 된다..
그렇다면 JSP Action은 왜 존재하는 것일까?
JSP Action 태그를 사용할 줄 안다면 자바 코드를 사용하지 않아도 JSP로 웹 페이지를 개발할 수 있다.
JSP Action 태그는 비즈니스 로직을 처리하는 부분과 화면을 처리하는 부분을 나눠서 개발할 수 있도록 하기 위해 만들어진 기술이다.
다음은 JSP 2.2에서 제공하는 Standard Action이다.
액션 | 설명 |
<jsp:useBean> | 자바 인스턴스를 준비한다. 보관소에서 자바 인스턴스를 꺼내거나 자바 인스턴스를 새로 만들어 보관소에 저장하는 코드를 생성한다.(자바 인스턴스 = Java Bean) |
<jsp:setProperty> | 자바 빈의 프로퍼티 값을 설정한다. 자바 객체의 setter()를 호출하는 코드를 생성한다. |
<jsp:getProperty> | 자바 빈의 프로퍼티 값을 꺼낸다. 자바 객체의 getter()를 호출하는 코드를 생성한다. |
<jsp:include> | 정적(HTML, 텍스트 파일 등) 또는 동적(서블릿/JSP) 자원을 including하는 자바 코드를 생성한다. |
<jsp:forward> | 현재 페이지의 실행을 멈추고 다른 정적, 동적 자원으로 forwarding하는 자바 코드를 생성한다. |
<jsp:param> | jsp:include, jsp:forard, jsp:params의 자식 태그로 사용한다. ServletRequest 객체에 매개변수를 추가하는 코드를 생성한다. |
<jsp:plugin> | OBJECT 또는 EMBED HTML 태그를 생성한다. |
<jsp:element> | 임의의 XML 태그나 HTML 태그를 생성한다. |
<jsp:useBean>
<jsp:useBean>은 application, session, request, page 보관소에 저장된 자바 객체를 꺼낼 수 있다.
만약 보관소에 저장된 객체가 없다면 새로 생성하여 해당 보관소에 저장한다.
<jsp:useBean> 문법
<jsp:useBean id="이름" scope="page | request | session | application" class="클래스명" type="타입명" />
<jsp:useBean> 사용 예
jsp 코드
<jsp:useBean
id="members"
scope="request"
class="java.util.ArrayList"
type="java.util.ArrayList<spms.vo.Member>"/>
위 JSP 코드는 다음 자바 코드와 같다.
자바 코드
java.util.ArrayList<spms.vo.Member> members =
(java.util.ArrayList<spms.vo.Member>) request.getAttribute("members");
if(members = null) {
members = new java.util.ArrayList();
request.setAttribute("members", members);
}
아무리 봐도 jsp 코드로 작성하는게 가독성이 좋아보인다.
<jsp:useBean> - id 속성
객체의 이름을 설정한다. 이 이름은 3군데에서 사용된다.
① 꺼낸 객체의 참조 변수 이름
② getAttribute()로 값을 꺼낼때 사용하는 이름
③ 객체를 생성할경우 보관소에 저장하는 key값의 이름
<jsp:useBean> - scope 속성
보관소를 지정한다. page(기본값), request, session, application 중 하나를 지정할 수 있다.
- page = JspContext(기본값)
- request = ServletRequest
- session = HttpSession
- application = ServletContext
<jsp:useBean> - class 속성
class 속성은 자바 객체를 생성할 때 사용할 클래스 이름을 지정한다.
반드시 패키지 이름을 포함해야한다. (QName)
new 연산자를 사용하므로 인터페이스는 올 수 없다.
scope에서 지정한 보관소에서 객체를 찾지 못할 경우 class의 값을 사용해서 인스턴스를 생성한다.
생성된 객체는 scope 보관소에 자동으로 저장된다.
class 속성이 없으면 객체를 생성할 수 없다.
<jsp:useBean> - type 속성
type 속성에는 참조 변수를 선언할 때 사용할 타입(클래스, 인터페이스)을 지정한다.
반드시 패키지 이름을 포함한 QName을 지정해야 한다.
type 값을 지정하지 않으면 class 속성의 값을 사용한다.
<jsp:useBean> 사용 예제
아래 코드는 다음과 같은 화면을 출력하는 jsp이다.
<%@ page import="com.atoz_develop.spms.vo.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<html>
<head>
<title>학생 목록</title>
</head>
<body>
<jsp:include page="/Header.jsp"/>
<h1>학생 목록</h1>
<p>
<a href="add">신규 학생</a>
</p>
<% List<Student> students = (ArrayList<Student>)request.getAttribute("students");
for(Student student: students) {%>
<%=student.getStudentNo()%>,
<%=student.getDepartment()%>,
<a href="update?student_no=<%=student.getStudentNo()%>">
<%=student.getStudentName()%></a>,<%=student.getGrade()%>,
<%=student.getGender()%>,
<%=student.getAge()%>,
<%=student.getPhoneNumber()%>,
<%=student.getAddress()%><br><%
}%>
<jsp:include page="/Tail.jsp"/>
</body>
</html>
이를 <jsp:useBean>을 사용해서 다음과 같이 바꿀 수 있다.
<%@ page import="com.atoz_develop.spms.vo.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>학생 목록</title>
</head>
<body>
<jsp:include page="/Header.jsp"/>
<h1>학생 목록</h1>
<p><a href="add">신규 학생</a></p>
<jsp:useBean id="students" scope="request" class="java.util.ArrayList" type="java.util.List<com.atoz_develop.spms.vo.Student>" />
<% // <jsp:useBean> 사용(상단 코드)하여 주석처리//
List<Student> students = (ArrayList<Student>)request.getAttribute("students");
for(Student student: students) {%>
<%=student.getStudentNo()%>,
<%=student.getDepartment()%>,
<a href="update?student_no=<%=student.getStudentNo()%>">
<%=student.getStudentName()%></a>,
<%=student.getGrade()%>,
<%=student.getGender()%>,
<%=student.getAge()%>,
<%=student.getPhoneNumber()%>,
<%=student.getAddress()%><br><% }%>
<jsp:include page="/Tail.jsp"/>
</body>
</html>
또 다른 예로 다음은 로그인한 사용자 정보를 출력하는 JSP이다.
<%@ page import="com.atoz_develop.spms.vo.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% Student student = (Student) session.getAttribute("student");%>
<div style="background-color: darkcyan; color: aliceblue; height: 20px; padding: 5px;">
SPMS
<% if(student.getStudentNo() != null) { %>
<span style="float: right;"><%=student.getStudentName()%>
<a style="color: white;" href="<%=request.getContextPath()%>/auth/logout">로그아웃</a>
</span>
<% } %>
</div>
<jsp:useBean>을 사용해서 아래와 같이 변경할 수 있다.
<%@ page import="com.atoz_develop.spms.vo.Student" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><jsp:useBean id="student" scope="session" class="com.atoz_develop.spms.vo.Student" /><%// Student student = (Student) session.getAttribute("student");%>
<div style="background-color: darkcyan; color: aliceblue; height: 20px; padding: 5px;">
SPMS
<% if(student.getStudentNo() != null) { %>
<span style="float: right;"><%=student.getStudentName()%>
<a style="color: white;" href="<%=request.getContextPath()%>/auth/logout">로그아웃</a>
</span>
<% } %>
</div>
사실 실제 화면 개발은 JavaScript 기반 기술이 많이 활용된다.
JSP 기술에 종속되기보다는 서버 측 기술에 독립적인 표준 웹 기술을 배우고 사용하는게 좋다.
'JAVA > JSP' 카테고리의 다른 글
JSP: fmt를 이용한 Date 포맷 변경 (0) | 2023.01.25 |
---|---|
JSP: fmt태그 : <fmt:formatNumber> (0) | 2023.01.25 |
JSP 파일에 데이터 출력하기 (0) | 2023.01.25 |
JSTL : <c:foreach> (0) | 2023.01.25 |