Struts 2-가치 스택 / OGNL
가치 스택
값 스택은 제공된 순서대로 다음 개체를 유지하는 여러 개체의 집합입니다-
Sr. 아니요 | 개체 및 설명 |
---|---|
1 | Temporary Objects 페이지 실행 중에 생성되는 다양한 임시 개체가 있습니다. 예를 들어 JSP 태그에서 반복되는 콜렉션의 현재 반복 값입니다. |
2 | The Model Object Struts 애플리케이션에서 모델 객체를 사용하는 경우 현재 모델 객체가 값 스택의 작업 앞에 배치됩니다. |
삼 | The Action Object 실행중인 현재 작업 개체가됩니다. |
4 | Named Objects 이러한 객체에는 #application, #session, #request, #attr 및 #parameters가 포함되며 해당 서블릿 범위를 참조합니다. |
값 스택은 JSP, Velocity 또는 Freemarker에 제공된 태그를 통해 액세스 할 수 있습니다. 별도의 장에서 공부할 다양한 태그가 있으며 struts 2.0 값 스택을 가져오고 설정하는 데 사용됩니다. 다음과 같이 작업 내에서 valueStack 객체를 얻을 수 있습니다.
ActionContext.getContext().getValueStack()
ValueStack 객체가 있으면 다음 메서드를 사용하여 해당 객체를 조작 할 수 있습니다.
Sr. 아니요 | ValueStack 방법 및 설명 |
---|---|
1 | Object findValue(String expr) 기본 검색 순서에서 스택에 대해 주어진 표현식을 평가하여 값을 찾습니다. |
2 | CompoundRoot getRoot() 스택에 푸시 된 객체를 보유하는 CompoundRoot를 가져옵니다. |
삼 | Object peek() 스택을 변경하지 않고 스택 맨 위에있는 객체를 가져옵니다. |
4 | Object pop() 스택 맨 위에있는 개체를 가져와 스택에서 제거합니다. |
5 | void push(Object o) 이 개체를 스택 맨 위에 놓습니다. |
6 | void set(String key, Object o) 주어진 키로 스택에 객체를 설정하여 findValue (key, ...)로 검색 할 수 있습니다. |
7 | void setDefaultType(Class defaultType) 값을 가져올 때 유형이 제공되지 않은 경우 변환 할 기본 유형을 설정합니다. |
8 | void setValue(String expr, Object value) 기본 검색 순서를 사용하여 주어진 표현식으로 스택의 빈에 속성을 설정하려고합니다. |
9 | int size() 스택의 개체 수를 가져옵니다. |
OGNL
그만큼 Object-Graph Navigation Language(OGNL)은 ValueStack에서 데이터를 참조하고 조작하는 데 사용되는 강력한 표현 언어입니다. OGNL은 데이터 전송 및 유형 변환에도 도움이됩니다.
OGNL은 JSP 표현식 언어와 매우 유사합니다. OGNL은 컨텍스트 내에 루트 또는 기본 개체를 갖는 아이디어를 기반으로합니다. 기본 또는 루트 개체의 속성은 파운드 기호 인 마크 업 표기법을 사용하여 참조 할 수 있습니다.
앞서 언급했듯이 OGNL은 컨텍스트를 기반으로하며 Struts는 OGNL과 함께 사용할 ActionContext 맵을 빌드합니다. ActionContext 맵은 다음으로 구성됩니다-
Application − 애플리케이션 범위 변수
Session − 세션 범위 변수
Root / value stack − 모든 작업 변수가 여기에 저장됩니다.
Request − 범위 변수 요청
Parameters − 요청 매개 변수
Atributes − 페이지, 요청, 세션 및 애플리케이션 범위에 저장된 속성
Action 개체는 항상 값 스택에서 사용할 수 있음을 이해하는 것이 중요합니다. 따라서 Action 개체에 속성이있는 경우“x” 과 “y” 바로 사용할 수 있습니다.
ActionContext의 개체는 파운드 기호를 사용하여 참조되지만 값 스택의 개체는 직접 참조 할 수 있습니다.
예를 들어 employee 액션 클래스의 속성이면 다음과 같이 참조 할 수 있습니다.
<s:property value = "name"/>
대신에
<s:property value = "#name"/>
세션에 "로그인"이라는 속성이있는 경우 다음과 같이 검색 할 수 있습니다.
<s:property value = "#session.login"/>
OGNL은 또한 Map, List 및 Set와 같은 컬렉션 처리를 지원합니다. 예를 들어 색상 드롭 다운 목록을 표시하려면 다음을 수행 할 수 있습니다.
<s:select name = "color" list = "{'red','yellow','green'}" />
OGNL 표현식은 "빨강", "노란색", "녹색"을 색상으로 해석하고이를 기반으로 목록을 작성하는 데 영리합니다.
OGNL 표현식은 다음 장에서 다른 태그를 공부할 때 광범위하게 사용됩니다. 따라서 개별적으로보기보다는 양식 태그 / 제어 태그 / 데이터 태그 및 Ajax 태그 섹션의 몇 가지 예를 사용하여 살펴 보겠습니다.
ValueStack / OGNL 예제
액션 만들기
valueStack에 액세스하고 뷰, 즉 JSP 페이지에서 OGNL을 사용하여 액세스 할 몇 가지 키를 설정하는 다음 액션 클래스를 고려해 보겠습니다.
package com.tutorialspoint.struts2;
import java.util.*;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
public String execute() throws Exception {
ValueStack stack = ActionContext.getContext().getValueStack();
Map<String, Object> context = new HashMap<String, Object>();
context.put("key1", new String("This is key1"));
context.put("key2", new String("This is key2"));
stack.push(context);
System.out.println("Size of the valueStack: " + stack.size());
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
실제로 Struts 2는 실행될 때 valueStack의 맨 위에 작업을 추가합니다. 따라서 값 스택에 항목을 넣는 일반적인 방법은 값에 대한 getter / setter를 Action 클래스에 추가 한 다음 <s : property> 태그를 사용하여 값에 액세스하는 것입니다. 하지만 저는 Struts에서 ActionContext와 ValueStack이 정확히 어떻게 작동하는지 보여 드리고 있습니다.
보기 만들기
아래 jsp 파일을 생성하겠습니다. HelloWorld.jspEclipse 프로젝트의 WebContent 폴더에 있습니다. 이보기는 작업이 성공을 반환하는 경우에 표시됩니다.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Entered value : <s:property value = "name"/><br/>
Value of key 1 : <s:property value = "key1" /><br/>
Value of key 2 : <s:property value = "key2" /> <br/>
</body>
</html>
우리는 또한 만들어야합니다 index.jsp 컨텐츠가 다음과 같은 WebContent 폴더에서-
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
구성 파일
다음 내용은 struts.xml 파일-
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
다음 내용은 web.xml 파일-
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 Export > WAR FileWar 파일을 만듭니다. 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다.
마지막으로 Tomcat 서버를 시작하고 URL에 액세스하십시오. http://localhost:8080/HelloWorldStruts2/index.jsp. 그러면 다음 화면이 생성됩니다.
이제 주어진 텍스트 상자에 단어를 입력하고 "Say Hello"버튼을 클릭하여 정의 된 작업을 실행합니다. 이제 생성 된 로그를 확인하면 하단에 다음과 같은 텍스트가 있습니다.
Size of the valueStack: 3
그러면 입력 할 값과 ValueStack에 입력 한 key1 및 key2의 값이 표시되는 다음 화면이 표시됩니다.