struts2学习(7)值栈简介与OGNL引入

一、值栈简介:

二、OGNL引入:

com.cy.action.HelloAction.java:

package com.cy.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class HelloAction extends ActionSupport{
    private static final long serialVersionUID = 1L;

    @Override
    public String execute() throws Exception {
        ActionContext actionContext = ActionContext.getContext();
        ValueStack valueStack = actionContext.getValueStack();
        valueStack.set("name", "张三(valueStack)");
        valueStack.set("age", 11);

        Map<String, Object> session = actionContext.getSession();
        session.put("name", "王五(session)");
        session.put("age", 13);

        Map<String, Object> application = actionContext.getApplication();
        application.put("name", "赵六(application)");
        application.put("age", 14);

        return SUCCESS;
    }

}

struts.xml:

<struts>

    <package name="manage" namespace="/" extends="struts-default">
        <action name="hello" class="com.cy.action.HelloAction">
            <result name="success">success.jsp</result>
        </action>

    </package>

</struts>

success.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>
<%
    request.setAttribute("name", "李四(request)");
    request.setAttribute("age", 12);

    pageContext.setAttribute("name", "小沛(page)");
    pageContext.setAttribute("age", "18");
%>
</head>
<body>
    获取狭义上的值栈数据:<s:property value="name"/>
    <s:property value="age"/><br>
    请求参数:<s:property value="#parameters.name"/>
    <s:property value="#parameters.age"/><br>
    request:<s:property value="#request.name"/>
    <s:property value="#request.age"/><br>
    session:<s:property value="#session.name"/>
    <s:property value="#session.age"/><br>
    application:<s:property value="#application.name"/>
    <s:property value="#application.age"/><br>
    attr取值:<s:property value="#attr.name"/>
    <s:property value="#attr.age"/><br>
</body>
</html>

测试结果:

三、OGNL访问复杂对象:

四、OGNL访问静态属性和静态方法:

com.cy.model.Student.java:

package com.cy.model;

public class Student {
    private String name;
    private int age;

    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

com.cy.common.MyStatic.java:静态属性和静态方法:

package com.cy.common;

public class MyStatic {
    public static final String str = "好好学习";

    public static String print(){
        return "天天向上";
    }
}

com.cy.action.HelloAction.java中存入javaBean、List、Map:

package com.cy.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.cy.model.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class HelloAction extends ActionSupport{
    private static final long serialVersionUID = 1L;

    private Student student;
    private List<Student> students;
    private Map<String,Student> studentMap;

    public Map<String, Student> getStudentMap() {
        return studentMap;
    }

    public void setStudentMap(Map<String, Student> studentMap) {
        this.studentMap = studentMap;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    @Override
    public String execute() throws Exception {
        ActionContext actionContext = ActionContext.getContext();
        ValueStack valueStack = actionContext.getValueStack();
        valueStack.set("name", "张三(valueStack)");
        valueStack.set("age", 11);

        Map<String, Object> session = actionContext.getSession();
        session.put("name", "王五(session)");
        session.put("age", 13);

        Map<String, Object> application = actionContext.getApplication();
        application.put("name", "赵六(application)");
        application.put("age", 14);

        student = new Student("小八", 15);

        students=new ArrayList<Student>();
        students.add(new Student("老九",13));
        students.add(new Student("老十",14));

        studentMap=new HashMap<String,Student>();
        studentMap.put("goodStudent", new Student("学霸",20));
        studentMap.put("badStudent", new Student("学渣",19));

        return SUCCESS;
    }

}

struts.xml配置,开启ognl允许访问静态方法:

<struts>
    <!-- 允许OGNL访问静态方法 -->
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

    <package name="manage" namespace="/" extends="struts-default">
        <action name="hello" class="com.cy.action.HelloAction">
            <result name="success">success.jsp</result>
        </action>

    </package>

</struts>

success.jsp,通过ognl来取值:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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访问javaBean对象:<s:property value="student.name"/>
    <s:property value="student.age"/><br>
    ognl访问List集合:<s:property value="students[0].name"/>
    <s:property value="students[0].age"/>
    <s:property value="students[1].name"/>
    <s:property value="students[1].age"/><br/>
    ognl访问Map:<s:property value="studentMap[‘goodStudent‘].name"/>
    <s:property value="studentMap[‘goodStudent‘].age"/>
    <s:property value="studentMap[‘badStudent‘].name"/>
    <s:property value="studentMap[‘badStudent‘].age"/><br/>

    ognl访问静态属性:<s:property value="@[email protected]"/><br>
    <!-- 访问静态方法,有些封装好的Util工具,转换等,就可以直接调用了 -->
    ognl访问静态方法:<s:property value="@[email protected]()"/>
</body>
</html>

测试:

---------

时间: 2024-10-10 07:22:54

struts2学习(7)值栈简介与OGNL引入的相关文章

关于Struts2中的值栈与OGNL表达式

1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语言. OGNL相对其它表达式语言具有下面几大优势: 1.支持对象方法调用,如xxx.doSomeSpecial(): 2.支持类静态的方法调用和值访问,表达式的格式: @[类全名(包括包路径)]@[方法名 |  值名],例如: @[email prot

框架 day29 Struts2-上传,下载,OGNL与Struts2的结合(值栈与ActionContext),Struts2标签

文件上传 1.1回顾 *浏览器端: <formmethod="post" enctyp="multipart/form-data"> <inputtype="file" name="image"> <inputtype="submit"> *服务器端: 手动方式 第三方:commons-fileupload  核心类ServletFileUpload 1.2介绍 *str

Struts2 中的值栈的理解

通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求道服务器端 action时,就有个堆栈,如果action在服务器端进行跳转,所有action共用一个堆栈,当需要保存在action中的数据时,首先从栈顶开始 搜索,若找到相同的属性名(与要获得的数据的属性名相同)时,即将值取出,但这种情况可能出现找到的值不是我们想要的值,那么解决此问题需要用TOP语法 和N语法来进行解决. 当在客服端进行跳转时,当有请求提交到服务器

Struts2学习之路(六)—— OGNL表达式

OGNL全称为Object-Graph Navigation Language,可译为对象图导航语言.此处介绍的OGNL表达式内容,仅限于在struts2标签中应用,形式如下: <s:property value="xxx" /> 以下为列举的一些应用形式: 1.访问值栈中action的普通属性: <s:property value="username" /> 2.访问值栈中对象的属性(setter getter方法): <s:prop

struts2中的值栈对象ValueStack

ValueStack, 即值栈对象. 值栈对象: 是整个struts数据存储的核心,或者叫中转站. 用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:  然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面. (key: struts.valueStack):     开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象. (ActionContext是给开发者用的,

struts2 ValueStack(值栈)解析

Struts2一个重要点就是值栈. ValueStack,是用来存储一些在各个action,或者说是通过s标签.el表达式等给前台Jsp等页面展示的东西. ValueStack是一个接口,其内部接口非常简单: 1 /* 2 * Copyright 2002-2007,2009 The Apache Software Foundation. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5

Struts2中的值栈

一 什么是值栈 值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值. 每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在一个值栈对象 值栈对象的声明周期与Action的生命周期(第一次访问action的时候被创建, 当action中方法返回值时被销毁)一致. 二 Action中值栈对象的获取方法 1. 通过ActionContext对象获取 ActionContext context = ActionContext.

struts2学习笔记之一:基本简介

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个Servlet,在MVC设计模式中,Struts2作为控制器来建立模型与视图的数据交互(所有的访问都会被控制器操作控制) Struts2是Struts1的下一代产品,但是它们之间差别很大.Struts2是在WebWork和struts1的基础上进行整合出来的框架,更倾向于WebWork,所以WebWork可以平滑的升级到Struts2. Struts2采用拦截器的机制来处理用户的请求,使得业务逻辑控制器与ServletAP

Struts2学习笔记01 之 简介及配置

一.Struts简介 * 是轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层.运用ASOP的思想,使用拦截器来扩展业务控制器 二.使用步骤: 1.引入Sturts2的相关JAR包 2.配置前端控制器 3.创建struts.xml 5.编写业务控制器Action 6.编写JSP页面 7.配置struts.xml