struts学习(五)—ognl和值栈

    xiaoxiao2021-03-25  102

    1.ognl概念

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。

    2.ognl与struts

    OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言,使页面更简洁; 支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能; Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 支持对象方法调用,如xxx.doSomeSpecial(); 支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format(‘foo %s’, ‘bar’)或@tutorial.MyConstant@APP_NAME; 支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(price*discount),这个表达式会返回80; 访问OGNL上下文(OGNL context)和ActionContext; 操作集合对象。 可以直接new一个对象

    3.值栈

    概念:

    struts2中提供的一种存储机制,类似于域对象,叫值栈,可以存值和取值。 (1)在action中可以把数据放到值栈里面,然后在页面中取到值栈数据。

    servlet与action的区别

    (1)servlet:默认在第一次访问时创建,创建一次,单实例对象 (2)action:每次访问时,都会创建action对象,多实例对象。

    使用方法:

    (1)值栈存储位置

    每个action对象里面都会有一个值栈对象(只有一个值栈对象)。

    (2)值栈中存值的方式

    action类:

    package action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.util.ValueStack; public class UserAction extends ActionSupport { private String name; public String getName() { return name; } @Override public String execute() throws Exception { ActionContext context = ActionContext.getContext(); ValueStack stack1 = context.getValueStack(); //值栈中存值的方式,有以下三种方法 //1. stack1.set("username", "lv"); //2. stack1.push("abcd"); //3.一般用下面这种方法,在action中定义变量,并生成该变量的get方法,减小空间利用 name = "aba"; return "success"; } }

    struts.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="demo1" extends="struts-default" namespace="/"> <action name="user" class="action.UserAction"> <result name="success">/ognl.jsp</result> </action> </package> </struts>

    ognl.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- ognl引入标签库 --> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 使用ognl+struts2标签实现计算字符串长度 value属性值:ognl表达式 --> <s:property value="'haha'.length()"/> <s:debug></s:debug> </body> </html>
    转载请注明原文地址: https://ju.6miu.com/read-21589.html

    最新回复(0)