JSP Action

2023. 1. 25. 10:41JAVA/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