Struts 2 의 OGNL.
표현 식 언어 는 주로 다음 과 같은 몇 가지 장점 이 있 습 니 다.
(MyType) request. getAttribute () 와 my Bean. getMyProperty () 와 같은 문 구 를 피하 고 페이지 를 더욱 간결 하 게 합 니 다.
연산 자 (예 를 들 어 + - * /) 를 지원 하고 일반 표지 보다 더 높 은 자유도 와 강 한 기능 을 가 집 니 다.
코드 논 리 를 간단명료 하 게 표현 하고 코드 를 사용 하면 더욱 읽 을 수 있 고 유지 하기 편리 하 다.
Struts 2 의 표현 식 언어
Struts 2 는 다음 과 같은 몇 가지 표현 식 언어 를 지원 합 니 다.
OGNL (Object - Graph Navigation Language) 은 대상 속성의 오픈 소스 표현 식 언어 를 편리 하 게 조작 할 수 있 습 니 다.
JSTL (JSP Standard Tag Library), JSP 2.0 통합 표준 표현 식 언어;
Groovy 는 자바 플랫폼 의 동적 언어 를 바탕 으로 가끔 유행 하 는 동적 언어 (예 를 들 어 Python, Ruby 와 Smartalk 등) 의 일부 특성 을 가진다.
Velocity 는 엄 밀 히 말 하면 표현 식 언어 가 아니 라 자바 기반 템 플 릿 매 칭 엔진 으로 JSP 보다 성능 이 좋다 고 합 니 다.
Struts 2 기본 표현 식 언어 는 OGNL 입 니 다. 다른 표현 식 언어 에 비해 다음 과 같은 몇 가지 장점 이 있 기 때 문 입 니 다.
xxx. doSomespace () 와 같은 대상 방법 호출 을 지원 합 니 다.
클래스 정적 방법 호출 과 값 접근 을 지원 합 니 다. 표현 식 의 형식 은 @ [클래스 전체 이름 (패키지 경로 포함)] @ [방법 명 | 입 니 다. 값 이름], 예: @ java. lang.String@format('foo% s',' bar ') 또는 @ tutorial.MyConstant@APP_NAME;
price = 100, discount = 0.8, calculate Price () 와 같은 할당 작업 과 표현 식 직렬 연결 을 지원 합 니 다. 이 표현 식 은 80 을 되 돌려 줍 니 다.
OGNL 컨 텍스트 (OGNL context) 와 ActionContext 에 접근 하기;
조작 집합 대상.
OGNL 의 용법
OGNL 은 < s: property value = "xx" / > 등 일반적으로 Struts 2 의 로 고 를 결합 하여 사용 합 니 다.여러분 이 자주 겪 는 문 제 는 \ #,%, $라 는 세 가지 기호의 사용 입 니 다.다음 에 나 는 예 를 들 어 이 문 제 를 이야기 하고 싶다.
우선 Struts 2 라 는 이름 을 새로 만 듭 니 다.OGNL 의 웹 프로젝트, 개발 환경 설정.그동안 많은 친구 들 이 Struts 2 를 사용 하 는 과정 에서 난 장 판 문 제 를 겪 었 다.물론 난 장 판 문 제 는 유래 가 오래 되 었 고 여러 가지 지식 을 다 루 었 기 때문에 두 세 마디 로 설명 할 수 있 는 것 이 아니 라 인터넷 에 도 편리 한 글 이 많 으 니 구 글 을 해 보 세 요.하지만 개발 과정 에 있다 면 번 거 로 운 문 제 를 피 하 는 것 도 어렵 지 않 을 것 이다.인 코딩 과 디 코딩 이 사용 하 는 방식 이 다 르 기 때문에 인 코딩 방식 을 'utf - 8' 로 설정 하 는 것 을 권장 합 니 다. 예 를 들 어 <% @ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>。또한 웹. xml 를 설정 할 때 ActionContextCleanUp 필터 (Filter) 를 사용 합 니 다. 아래 코드 와 같 습 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2 OGNL</display-name>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
목록 1 WebContent / WEB - INF / web. xml
'\ #' 는 주로 세 가지 용도 가 있다.
OGNL 컨 텍스트 와 Action 컨 텍스트 를 방문 합 니 다. \ # ActionContext. getContext () 에 해당 합 니 다.다음 표 에는 Action Context 에서 유용 한 속성 이 몇 개 있 습 니 다. 이름
parameters 는 현재 HTTP 요청 매개 변 수 를 포함 하 는 Map \ # parameters. id [0] 역할 은 request. getParameter ("id") 에 해당 합 니 다.
request 는 현재 HttpServletRequest 의 속성 (attribute) 을 포함 하 는 Map \ # request. userName 은 request. getAttribute ("userName") 에 해당 합 니 다.
session 은 현재 HttpSession 의 속성 (attribute) 을 포함 하 는 Map \ # session. userName 은 session. getAttribute ("userName") 에 해당 합 니 다.
application 은 현재 응용 프로그램의 ServletContext 속성 (attribute) 을 포함 하 는 Map \ # application. userName 은 application. getAttribute ("userName") 에 해당 합 니 다.
attr 는 request > session > application 순서대로 속성 (attribute) 에 접근 합 니 다. \ # attr. userName 은 찾 을 때 까지 순서대로 세 범위 (scope) 에서 userName 속성 을 읽 는 것 과 같 습 니 다.
books. {? \ # this. price < 100} 와 같은 필터 와 투영 (procjecting) 집합 에 사용 합 니 다.
구조 맵, 예 를 들 어 \ # {'foo 1': 'bar 1', 'foo 2': 'bar 2'}.
다음은 액 션 코드 입 니 다.
package tutorial.action;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;
import tutorial.model.Book;
import com.opensymphony.xwork2.ActionSupport;
public class OgnlAction extends ActionSupport implements ServletRequestAware, SessionAware, ServletContextAware {
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private Map<String, String> session;
private ServletContext application;
private List<Book> books;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@SuppressWarnings("unchecked")
public void setSession(Map session) {
this.session = session;
}
public void setServletContext(ServletContext application) {
this.application = application;
}
public List<Book> getBooks() {
return books;
}
@Override
public String execute() {
request.setAttribute("userName", "Max From request");
session.put("userName", "Max From session");
application.setAttribute("userName", "Max From application");
books = new LinkedList<Book>();
books.add(new Book("978-0735619678", "Code Complete, Second Edition", 32.99));
books.add(new Book("978-0596007867", "The Art of Project Management", 35.96));
books.add(new Book("978-0201633610", "Design Patterns: Elements of Reusable Object-Oriented Software", 43.19));
books.add(new Book("978-0596527341", "Information Architecture for the World Wide Web: Designing Large-Scale Web Sites", 25.19));
books.add(new Book("978-0735605350", "Software Estimation: Demystifying the Black Art", 25.19));
return SUCCESS;
}
}
목록 2 src / tutorial / action / OgnlAction. java
이 코드 는 각각 request, session, application 범위 내 에서 "userName" 속성 을 추가 한 다음 JSP 페이지 에서 OGNL 을 사용 하여 되 찾 습 니 다. "필터 와 투영 (procjecting) 집합" 기능 을 보 여 주 는 북 대상 목록 도 만 들 었 습 니 다. 북 의 코드 는 이전 글 인 "Struts 2 에서 CRUD 구현" 에서 볼 수 있 습 니 다.
다음은 Ognl. jsp 의 코드 입 니 다. 내용 은 다음 과 같 습 니 다.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Struts OGNL Demo</title>
</head>
<body>
<h3> OGNL Action </h3>
<p>parameters: <s:property value="#parameters.userName" /></p>
<p>request.userName: <s:property value="#request.userName" /></p>
<p>session.userName: <s:property value="#session.userName" /></p>
<p>application.userName: <s:property value="#application.userName" /></p>
<p>attr.userName: <s:property value="#attr.userName" /></p>
<hr />
<h3> (projecting) </h3>
<p>Books more than $35</p>
<ul>
<s:iterator value="books.{?#this.price > 35}">
<li><s:property value="title" /> - $<s:property value="price" /></li>
</s:iterator>
</ul>
<p>The price of "Code Complete, Second Edition" is: <s:property value="books.{?#this.title=='Code Complete, Second Edition'}.{price}[0]"/></p>
<hr />
<h3> Map</h3>
<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />
<p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>
</body>
</html>
목록 3 WebContent / Ognl. jsp
위 코드 에서 주의해 야 할 것 은 "< s: property value =" books. {? \ # this. title = = "Code Complete, Second Edition"}. {price} [0] "/" 입 니 다. "books. {? \ # this. title = =" Code Complete, Second Edition "}. {price}" 가 되 돌아 오 는 값 은 집합 형식 이 므 로 "[색인]" 으로 값 을 방문 해 야 합 니 다.
마지막 으로 Struts 2 의 프로필 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="Struts2_OGNL_DEMO" extends="struts-default">
<action name="Ognl" class="tutorial.action.OgnlAction">
<result>/Ognl.jsp</result>
</action>
</package>
</struts>
목록 4 src / struts. xml
실행 프로그램 발표
"%" 기호의 용 도 는 로고 의 속성 이 문자열 형식 일 때 OGNL 표현 식 의 값 을 계산 하 는 것 입 니 다. 예 를 들 어 Ognl. jsp 에 다음 코드 를 추가 합 니 다.
% 의 용도 < / h3 >
< s: url value = "% {\ # foobar [foo 1]}" / > < / p > 목록 6% 용도 의 코드 세 션 을 보 여 줍 니 다.
페이지 새로 고침
"$" 는 두 가지 주요 용도 가 있 습 니 다.
국제 화 자원 파일 에서 OGNL 표현 식 을 참조 합 니 다. 예 를 들 어 을 참고 하 십시오.
Struts 2 프로필 에서 < action name = "AddPhoto" class = "addPhoto" > 와 같은 OGNL 표현 식 을 참조 합 니 다.
$용도 코드 세 션 보 여주 기
총결산
OGNL 은 기능 이 매우 큰 표현 식 언어 로 우리 의 개발 을 더욱 빠르게 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.