web.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <!-- 启动struts2框架 -->
    <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>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

UserEntity 实体层

package com.tjitcast.model;
import java.util.Date;

public class UserEntity {
	public Integer id;
	public String name;
	public Double score;
	public Boolean gender;
	public Date date;
	public UserEntity(){
	}
	public UserEntity(Integer id, String name, Double score, Boolean gender,
			Date date) {
		this.id = id;
		this.name = name;
		this.score = score;
		this.gender = gender;
		this.date = date;
	}
	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the score
	 */
	public Double getScore() {
		return score;
	}
	/**
	 * @param score the score to set
	 */
	public void setScore(Double score) {
		this.score = score;
	}
	/**
	 * @return the gender
	 */
	public Boolean getGender() {
		return gender;
	}
	/**
	 * @param gender the gender to set
	 */
	public void setGender(Boolean gender) {
		this.gender = gender;
	}
	/**
	 * @return the date
	 */
	public Date getDate() {
		return date;
	}
	/**
	 * @param date the date to set
	 */
	public void setDate(Date date) {
		this.date = date;
	}
	public String info(){
		return "该方法是JavaBean中的普通方法";
	}
}

 

OgnlAction 控制器

package com.tjitcast.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.tjitcast.model.UserEntity;

public class OgnlAction extends ActionSupport{
	private String loginName;
	private int age;
	private UserEntity user;
	private List<String> list1;
	private Set<String> set1;
	private Map<String,String> map;
	private List<UserEntity> listUser;
	/* (non-Javadoc)
	 * @see com.opensymphony.xwork2.ActionSupport#execute()
	 */
	@Override
	public String execute() throws Exception {
		this.loginName="张三";
		this.age=25;
		user=new UserEntity(100, "李四", 88.56, true, new Date());
		list1=new ArrayList<String>();
		list1.add("apple");
		list1.add("baner");
		list1.add("ccccc");
		set1=new LinkedHashSet<String>(list1);
		map=new HashMap<String,String>();
		map.put("a","javaSE");
		map.put("b", "javaEE");
		map.put("c", "javaME");
		listUser=new ArrayList<UserEntity>();
		listUser.add(new UserEntity(1001,"王五1",85.25,true,new Date()));
		listUser.add(new UserEntity(1002,"王五2",82.25,true,new Date()));
		listUser.add(new UserEntity(1003,"王五3",90.25,true,new Date()));
		
		ActionContext context=ActionContext.getContext();
		context.put("req","req中的数据");
		context.getSession().put("session1", "session中的数据");
		context.getApplication().put("app", "application中的数据");
		
		ServletActionContext.getRequest().setAttribute("req2", "servlet中request中的数据");
		ServletActionContext.getRequest().getSession().setAttribute("session2", "Servlet中session中的数据");
		ServletActionContext.getServletContext().setAttribute("app2", "Servet的Application");
		
		return "ognl";
	}
	public String display(String name){
		return name+"这是Action中的普通方法!!!";
	}
	/**
	 * @return the loginName
	 */
	public String getLoginName() {
		return loginName;
	}
	/**
	 * @param loginName the loginName to set
	 */
	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}
	/**
	 * @return the age
	 */
	public int getAge() {
		return age;
	}
	/**
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}
	/**
	 * @return the user
	 */
	public UserEntity getUser() {
		return user;
	}
	/**
	 * @param user the user to set
	 */
	public void setUser(UserEntity user) {
		this.user = user;
	}
	/**
	 * @return the list1
	 */
	public List<String> getList1() {
		return list1;
	}
	/**
	 * @param list1 the list1 to set
	 */
	public void setList1(List<String> list1) {
		this.list1 = list1;
	}
	/**
	 * @return the set1
	 */
	public Set<String> getSet1() {
		return set1;
	}
	/**
	 * @param set1 the set1 to set
	 */
	public void setSet1(Set<String> set1) {
		this.set1 = set1;
	}
	/**
	 * @return the map
	 */
	public Map<String, String> getMap() {
		return map;
	}
	/**
	 * @param map the map to set
	 */
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	/**
	 * @return the listUser
	 */
	public List<UserEntity> getListUser() {
		return listUser;
	}
	/**
	 * @param listUser the listUser to set
	 */
	public void setListUser(List<UserEntity> listUser) {
		this.listUser = listUser;
	}
}

 

 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>
	<!-- 配置后缀名称 -->
	<constant name="struts.action.extension" value="action,todo,go,aa,cc"></constant>
	<!-- 配置是否自动加载struts.xml文件 -->
	<constant name="struts.configuration.xml.reload" value="true"></constant>
	<!-- 是否显示更多的调试信息 -->
	<constant name="struts.devMode" value="true"></constant>
	<!-- 设置action标签的name属性支持/斜杠 -->
	<constant name="struts.enable.SlashesInActionNames" value="false"></constant>
	<!-- 支持动态方法的调用 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	<!-- 支持ONGL静态方法的调用 -->
	<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
	
	<package name="myPackage" namespace="/" extends="struts-default">
		<action name="ognl" class="com.tjitcast.action.OgnlAction">
			<result name="ognl">/ognl.jsp</result>
			<result name="fail">/fail.jsp</result>
		</action>
		
	
	</package>
</struts>

 

 index.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>
<title>Struts2中 OGNL 的应用示例</title>
</head>
<body>
	<a href="ognl.action">Struts2 OGNL</a>
</body>
</html>

 

 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>
    <title>OGNL 示例页面</title>
  </head>
  <body>
   OGNL访问Action中的普通属性:<s:property value="loginName"/> <s:property value="age"/><br/>
   OGNL访问JavaBean中的属性:<s:property value="user.name"/><br/>
   OGNL访问List集合对象:<s:property value="list1[2]"/><br/>
   OGNL访问Set集合对象:<s:property value="set1.toArray()[0]"/><br/>
   OGNL访问Map集合对象:<s:property value="map['b']"/> <s:property value="map.keys.toArray()[0]"/>=<s:property value="map.values.toArray()[0]"/><br/>
   OGNL访问List集合中的自定义对象:
   <s:property value="listUser[0].name"/><br/>
   OGNL访问JavaBean中的方法:<s:property value="user.info()"/><br/>
   OGNL访问Action中的方法:<s:property value="display('张三')"/><br/>
   OGNL访问静态的常量PI:<s:property value="@java.lang.Math@PI"/><br/>
   OGNL访问静态的方法:<s:property value="@@abs(100)"/><br/>
   OGNL访问构造方法:<s:property value="new java.util.Date()"/>
   <s:date name="new java.util.Date()" format="yyyy-MM-dd"/><br/>
   OGNL访问ActionContext中的数据
   	request:<s:property value="#request.req"/><br/>
   	session:<s:property value="#session.session1"/><br/>
   application:<s:property value="#application.app"/><br/>
   
   OGNL访问ServletActionContext中的数据
   request:<s:property value="#request.req2"/><br/>
   session:<s:property value="#session.session2"/><br/>
   application:<s:property value="#application.app2"/>
    attr:<s:property value="#attr.app2"/>
    <br/>
    OGNL的投影查询
    查询出listUser集合中所有的用户名:
    <s:property value="listUser.{name}"/><br/>
  查询出listUser集合中所有分数大于80的用户名:
  <s:property value="listUser.{?#this.score>80}.{name}"/><br/>
 查询出listUser集合中所有分数大于80且性别为true的用户名:
 <s:property value="listUser.{?#this.score>80 && #this.gender==true}.{name}"/><br/>
 查询出listUser集合中所有分数大于8080且性别为true的第一个用户名:
 <s:property value="listUser.{^#this.score>80 && #this.gender==true}.{name}"/><br/>
  查询出listUser集合中所有分数大于8080且性别为true的最后一个用户名:
    <s:property value="listUser.{$#this.score>80 && #this.gender==true}.{name}"/><br/>
  </body>
</html>

 

 效果图:

Struts2 ognl_User