Struts2 ognl表达式

一、实验目的

1. 掌握OGNL表达式的语法结构

2. 掌握OGNL表达式获取Action中的相关值的方法。

3. 理解投影的含义。

二、实验内容

        创建业务控制类OgnlAction,测试基本属性、基本方法、类对象、静态属性、静态方法、List列表、

Set集合、Map映射等各种类型参数采用OGNL表达式获取的办法。

三、实验步骤及代码

1、创建一些javaBean

a、User类 属性int age,带参构造方法

package com.tj.struts.bean;

public class User {
	private int age;
	public User(){
		
	}
	/**
	 * @param age
	 */
	public User(int age) {
		this.age = age;
	}
	/**
	 * @return the age
	 */
	public int getAge() {
		return age;
	}

	/**
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "User"+age;
	}
	
	

}

b、Dog类 属性 String  name 带参构造方法

package com.tj.struts.bean;

public class Dog {
	private String name ;

	
	
	/**
	 * 
	 */
	public Dog() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param name
	 */
	public Dog(String name) {
		this.name = name;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Dog"+name;
	}
}


c、Cat类  属性Dog类对象 friend 成员方法miaomiao

package com.tj.struts.bean;

public class Cat {
	private Dog friend;
	public Cat(){
		
	}

	/**
	 * @param friend
	 */
	public Cat(Dog friend) {
		this.friend = friend;
	}

	/**
	 * @return the friend
	 */
	public Dog getFriend() {
		return friend;
	}

	/**
	 * @param friend the friend to set
	 */
	public void setFriend(Dog friend) {
		this.friend = friend;
	}
	
	public String miaomiao(){
		return "miaomiaoMethod";
	}
	@Override
	public String toString() {
		return "Cat"+friend ;
	}
}


d、静态内容类S  静态属性STR  静态方法s()

package com.tj.struts.bean;

public class S {
	public static String STC="static String ";
	public static String s(){
		return STC+"static mathod";
	}
}
2、创建业务控制类

a、包含基本属性username、password

b、类成员User作为属性

c、类成员Cat(Cat的属性为Dog对象)作为属性

d、保存User对象的列表users(存储三个对象1,2,3)

e、保存dog对象的集合dogs(存储三个对象dog1,dog2,dog3)

f、保存dog键值对的映射dogMap(存储三组数据dog100:Dog(100) dog101: Dog(101) dog102:Dog(102))

g、包含基本方法m(返回字符串actionMethod)

package com.tj.struts.contoller;

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 com.opensymphony.xwork2.ActionSupport;
import com.tj.struts.bean.Cat;
import com.tj.struts.bean.Dog;
import com.tj.struts.bean.User;

public class OgnlAction extends ActionSupport{
	private String username;
	private String password;
	private Cat cat;
	private User user;
	private List<User> users=new ArrayList<User>();
	private Set<Dog> dogs=new HashSet<Dog>();
	private Map<String ,Dog> dogmap=new HashMap<String,Dog>();
	/**
	 * @return the username
	 */
	public String getUsername() {
		return username;
	}
	/**
	 * @param username the username to set
	 */
	public void setUsername(String username) {
		this.username = username;
	}
	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}
	/**
	 * @param password the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}
	/**
	 * @return the cat
	 */
	public Cat getcat() {
		return cat;
	}
	/**
	 * @param cat the cat to set
	 */
	public void setcat(Cat cat) {
		this.cat = cat;
	}
	/**
	 * @return the user
	 */
	public User getUser() {
		return user;
	}
	/**
	 * @param user the user to set
	 */
	public void setUser(User user) {
		this.user = user;
	}
	/**
	 * @return the users
	 */
	public List<User> getUsers() {
		return users;
	}
	/**
	 * @param users the users to set
	 */
	public void setUsers(List<User> users) {
		this.users = users;
	}
	/**
	 * @return the dogs
	 */
	public Set<Dog> getDogs() {
		return dogs;
	}
	/**
	 * @param dogs the dogs to set
	 */
	public void setDogs(Set<Dog> dogs) {
		this.dogs = dogs;
	}
	/**
	 * @return the dogmap
	 */
	public Map<String, Dog> getDogmap() {
		return dogmap;
	}
	/**
	 * @param dogmap the dogmap to set
	 */
	public void setDogmap(Map<String, Dog> dogmap) {
		this.dogmap = dogmap;
	}
	
	public String m(){
		return "actionMethod";
	}
	public OgnlAction(){
		username="ognltester";
		password="123456789";
		user=new User();
		cat=new Cat(new Dog("dog0"));
		users.add(new User(1));
		users.add(new User(2));
		users.add(new User(3));
		dogs.add(new Dog("dog1"));
		dogs.add(new Dog("dog2"));
		dogs.add(new Dog("dog3"));
		dogmap.put("dog1200", new Dog("dog1200"));
		dogmap.put("dog1201", new Dog("dog1201"));
		dogmap.put("dog1202", new Dog("dog1202"));
		
	}
	
}

3、配置

a、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_2_5.xsd" version="2.5">
  <display-name></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.ng.filter.StrutsPrepareAndExecuteFilter
  	</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
b、struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="OGNL" class="com.tj.struts.contoller.OgnlAction">
			<result>/Ognltest.jsp</result>
		</action>
	</package>
	<!-- 允许调用静态方法 -->
	<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
</struts>    

4、测试

a、index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
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 'index.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>
  		<a href="OGNL">ognltest</a>
  </body>
</html>

b、Ognltest.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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 'Ognltest.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>
  <%@taglib uri="/struts-tags" prefix="s" %>
  <body >
  <center>
   	这是ognl测试界面
   	<br><br>
   	 1、访问值栈中action的普通属性:<br>
   	 username= <s:property value="username"/><br>
   	 2、访问值栈中的对象的普通属性:<br>
   	 user.age=<s:property value="user.age"/><br>
   	 user.age=<s:property value="user['age']"/><br>
   	 user.age=<s:property value="user[\"age\"]"/><br>
   	 3、访问值栈中对象的普通属性:<br>
   	 <s:property value="cat.friend.name"/><br>
   	 4、访问值栈中对象的普通方法:<br>
   	 password长度=<s:property value="password.length()"/><br>
   	 5、访问值栈中对象的普通方法:<br>
   	 <s:property value="cat.miaomiao()"/><br>
   	 6、访问action中的普通方法:<br>
   	 <s:property value="m()"/><br>
   	 7、访问静态方法:(*)<br>
   	 <s:property value="@com.tj.struts.bean.S@s()"/><br>
   	 8、访问静态属性:<br>
   	 <s:property value="@com.tj.struts.bean.S@STC"/><br>
   	 9、访问Math类的静态方法:<br>
   	 <s:property value="@@max(5,10)"/><br>
   	 10、访问普通类的构造方法:<br>
   	 <s:property value="new com.tj.struts.bean.User(10)"/><br>
   	 11、访问list:<br>
   	 <s:property value="users"/><br>
   	 12、访问list中的某个元素:<br>
   	 <s:property value="users[1]"/><br>
   	 13、访问list元素中某个属性的集合:<br>
   	 <s:property value="users.{age}"/><br>
   	 14、访问list元素中某个属性的集合的特定值:<br>
   	 <s:property value="users.{age}[0]"/><br>
   	 15、访问Set:<br>
   	 <s:property value="dogs"/><br>
   	 16、访问Set中的某个元素:<br>
   	 <s:property value="dogs[0]"/><br>
   	 17、访问Map:<br>
   	 <s:property value="dogmap"/><br>
   	 18、访问Map中的某个元素:<br>
   	 <s:property value="dogmap.dog1202"/><br>
   	 19、访问Map中所有的Key:<br>
   	 <s:property value="dogmap.keys"/><br>
   	 20、访问Map中所有的value:<br>
   	 <s:property value="dogmap.values"/><br>
   	 21、访问容器的大小:<br>
   	 <s:property value="dogmap.size()"/><br>
   	 22、投影:users集合中年龄为1的第一个元素<br>
   	 <s:property value="users.{?#this.age==1}[0]"/><br>
   	 23、投影:users集合中年龄大于1的user的年龄的集合<br>
   	 <s:property value="users.{?#this.age>1}.{age}"/><br>
   	 24、投影:users集合中年龄》1的user集合的最后一个user的age<br>
   	 <s:property value="users.{$#this.age>1}.{age}"/><br>
   	 25、投影:判断users集合中年龄>1的user集合的最后一个user的age是否为空<br>
   	 <s:property value="users.{$#this.age>1}.{age}==null"/><br>
   	 26、根对象:“[0]代表值栈”<br>
   	 <s:property value="[0].password"/><br>
   
   	
   </center>

   
  </body>
</html>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值