struts.xml简单配置

<!-- (默认false)设置ognl表达式是否支持静态方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="ognl" namespace="/ognl" extends="struts-default">
<action name="ognl" class="com.ouc.wkp.action.OgnlAction">
<result>/ognl.jsp</result>
</action>
</package>

struts.xml

记得打开

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

package com.ouc.wkp.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; import org.apache.commons.chain.Catalog; import com.opensymphony.xwork2.ActionSupport;
import com.ouc.wkp.model.Cat;
import com.ouc.wkp.model.Dog;
import com.ouc.wkp.model.User2; //user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
//但这时候要有参数为空的构造方法
//
public class OgnlAction extends ActionSupport {
private String password;
private String username;
private User2 user;
private Cat cat;
private Map<String, Dog> dogMap = new HashMap<String, Dog>();
private Set<Dog> dogs = new HashSet<Dog>();
private List<User2> users = new ArrayList<User2>(); public Cat getCat() {
return cat;
} public void setCat(Cat cat) {
this.cat = cat;
} public User2 getUser() {
return user;
} public void setUser(User2 user) {
this.user = user;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Map<String, Dog> getDogMap() {
return dogMap;
} public void setDogMap(Map<String, Dog> dogMap) {
this.dogMap = dogMap;
} public Set<Dog> getDogs() {
return dogs;
} public void setDogs(Set<Dog> dogs) {
this.dogs = dogs;
} public List<User2> getUsers() {
return users;
} public void setUsers(List<User2> users) {
this.users = users;
} public OgnlAction() {
users.add(new User2(1));
users.add(new User2(2));
users.add(new User2(3)); dogs.add(new Dog("dog1"));
dogs.add(new Dog("dog2"));
dogs.add(new Dog("dog3")); dogMap.put("dog100", new Dog("dog100"));
dogMap.put("dog101", new Dog("dog101"));
dogMap.put("dog102", new Dog("dog102"));
} @Override
public String execute() throws Exception {
return SUCCESS;
} public String m() {
return "mmmmm";
}
}

OgnlAction.java

package com.ouc.wkp.model;
//user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
//但这时候要有参数为空的构造方法
public class User2 {
private int age=8; public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public User2(){
// System.out.println("user constructor");
} public User2(int age){
this.age=age;
} @Override
public String toString() {
return "user"+age;
}
}

User2.java

package com.ouc.wkp.model;

public class Cat {
private Dog friend; public Dog getFriend() {
return friend;
} public void setFriend(Dog friend) {
this.friend = friend;
} public String miaomiao(){
return "miaomiao";
} // public Cat(){
//
// }
//
// public Cat(Dog friend){
// this.friend=friend;
// }
//
// @Override
// public String toString() {
// return "cat"+friend;
// }
}

Cat.java

package com.ouc.wkp.model;

public class Dog {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Dog(){ } public Dog(String name){
super();
this.name=name;
} @Override
public String toString() {
return "dog"+name;
}
}

Dog.java

然后就是比较核心的ognl.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'ognl.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<s:debug></s:debug>
This is ognl.jsp
<br> 访问值栈中的action的普通属性:username=
<s:property value="username" />
<br /> 访问值栈中对象的普通属性(get set 方法)
<s:property value="user.age" />
<br /> 访问值栈中对象的普通属性(get set 方法)
<s:property value="cat.friend.name" />
<br /> 访问值栈中对象的普通方法
<s:property value="password.length()" />
<br /> 访问值栈中对象的普通方法
<s:property value="cat.miaomiao()" />
<br /> 访问静态方法:
<s:property value="@com.ouc.wkp.action.S@s()" />
<br /> 访问静态属性:
<s:property value="@com.ouc.wkp.action.S@STR" />
<br /> 访问Math类的静态方法:
<s:property value="@@max(2,3)" />
<br /> 访问普通类的构造方法:
<s:property value="new com.ouc.wkp.model.User2(10)" />
<br /> 访问List:
<s:property value="users" />
<br /> 访问List中某个元素:
<s:property value="users[1]" />
<br /> 访问List中元素某个属性的集合:
<s:property value="users.{age}" />
<br /> 访问List中元素某个属性的集合中的特定值:
<s:property value="users.{age}[0]" />
<br /> |
<s:property value="users[0].age" />
<br /> 访问Set:
<s:property value="dogs" />
<br /> 访问Set中某个元素:
<s:property value="dogs[1]" />
<br /> 访问Map:
<s:property value="dogMap" />
<br /> 访问Map中某个元素:
<s:property value="dogMap.dog101" />
<br /> |
<s:property value="dogMap['dog101']" />
<br /> |
<s:property value="dogMap[\"dog101\"]" />
<br /> 访问Map中所有的key:
<s:property value="dogMap.keys" />
<br /> 访问Map中所有的value:
<s:property value="dogMap.values" />
<br /> 访问容器的大小:
<s:property value="dogMap.size()" />
<br /> |
<s:property value="users.size" />
<br /> 投影(过滤):
<s:property value="users.{?#this.age==1}[0]" />
<br /> 投影:
<s:property value="users.{^#this.age>1}.{age}" />
<br /> 投影:
<s:property value="users.{$#this.age>1}.{age}" />
<br /> 投影:
<s:property value="users.{$#this.age>1}.{age}==null" />
<br /> []:
value stack从上往下数<s:property value="[0].username" />
</body>
</html>

ognl.jsp

输入网址

http://localhost:8081/maShiBing/ognl/ognl?password=p&username=u&user.age=9&cat.friend.name=fuck

运行结果为

ongl 表达式的更多相关文章

  1. 对于EL表达式和ONGL表达式区别的相关理解

    java程序跑起来之后,会有一个内存空间分配出来,存入用到的值,这个值的周围就是上下文空间,而九大内置对象等,都在这个值的周围放着,像这样: el 就只能获取value stack 周围 的数据,va ...

  2. Struts2笔记——ONGL表达式语言

    OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...

  3. 表达式语言之ongl表达式

    OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方 ...

  4. ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)

    在用户是否拥有某项权限的问题  是这样解决的: 用户登录之后  登录信息是保存在session域中的  通过el表达式可得到登录的对象信息  那么怎样判断用户是否拥有某项权限呢 ?如果没有上图中的判断 ...

  5. JSTL、EL、ONGL、Struts标签的区别与使用

     一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以 ...

  6. ongl与Struts标签

    一.ONGL OGNL 的全称是“Object-Graph Navigation Language”,即对象图导航语言,它是一种功能强大的开源表达式语言.使用这种表达式语言可以通过某种表达式语法存取  ...

  7. Struts2搭建及利用OGNL表达式弹出计算器

    0x01 环境搭建 1.创建Struts2应用 创建一个动态网站项目 2.配置Tomcat启动环境 3.在WebContent目录下的WEB-INF文件夹中创建web.xml,Tomcat启动时会加载 ...

  8. struts2笔记(2)

    <context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...

  9. Struts2 源码分析——DefaultActionInvocation类的执行action

    本章简言 上一章讲到关于拦截器的机制的知识点,让我们对拦截器有了一定的认识.我们也清楚的知道在执行用户action类实例之前,struts2会先去执行当前action类对应的拦截器.而关于在哪里执行a ...

随机推荐

  1. 3.java.lang.ClassNotFoundException

    指定的类不存在 这里主要考虑一下类的名称和路径是否正确即可,通常都是程序试图通过字符串来加载某个类时可能引发 异常 比如: 调用Class.forName(); 或者调用ClassLoad的finaS ...

  2. oracle导入导出exp,imp

    exp dadifilm/oracle@dg file=/tmp/dadi.dmp full=y imp u_data/321@dg1  file=/dadi_desc.dmp Import: Rel ...

  3. ldap理论属于概念缩略词

    Standalone LDAP Daemon, slapd(standalone lightweight access protocol) ldap 389 default listener port ...

  4. sql server把一个表中数据复制到另一个表

    insert into A(ID,Name,Sex,Address,DID,...) from (select ID,Name,Sex,Address, 5 DID)

  5. Unity5UGUI 官方教程学习笔记(一)Canvas

    Canvas Canvas是控制一组UI元素将被渲染 所有的UI元素必须是Canvas下的子物体 一个场景中可以拥有多个Canvas 在创建UI元素时,如果没有Canvas,将会自动创建Canvas ...

  6. npapi加载失败的几个原因

    本文只讨论加载失败的原因,不复述npapi的使用教程 1. 资源文件是否加上 MIMEType命名的id,和html中的<object>的标签是否对应 如果不相同加载必然失败: 2. 注册 ...

  7. Hibernate知识总结(一)——Hibernate原理概述

    一.Hibernate是什么: 它是一个持久化框架,它对JDBC进行了轻量级的封装,简化对数据库的操作,提高开发效率.和另一个持久化框架MyBatis一样,他们操作数据库都是通过一个session对象 ...

  8. Nanjing GDG Meetup 10月19日线下活动

     Nanjing GDG 10 月份的线下活动将在本周六 (10/19) 举办,这次会请到对所有开发者都有重要帮助的神器 GoAgent 的作者 Phus Lu 来给我们做一场分享,热烈欢迎大家报名参 ...

  9. js中递归解析xml

    xml结构: <RightMenuItems>  <Item Code="New" Name="新建" GroupCode="Edi ...

  10. Apache 开启 Https

    1. 准备所需工具: 1) apache httpd2.4 浏览 2) Win32 OpenSSL v1.0.2d 浏览 2. 安装 2.1 安装Apache2.4服务 php环境搭建 浏览 2.2 ...