原文地址:点击前往
1 什么是valuestack称为值栈,struts提供的共享数据的数据结构
2 为什么要使用valuestack 从控制器向浏览器传递数据
存储与请求相关的对象信息(session/application)
3 valuestack对象的生命周期 请求进入到服务器端后,在内存中就会传创建一个valuestack对象;当请求处理结束以后,valuestack对象就会被清除
4 如何访问valuestack中的数据 利用ognl表达式获取
利用el表达式获取
5 在valuestack中存储数据的区域划分 contents (栈结构) 利用ognl或者el来获取数据
context (map结构) 利用 #key 来获取数据
7 案例:从控制器向浏览器传值,展示valuestack区域7.1 导包
1 <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 "> 2 <modelversion>4.0.0</modelversion> 3 <groupid>cn.xiangxu</groupid> 4 <artifactid>ssh03</artifactid> 5 <version>0.0.1-snapshot</version> 6 <packaging>war</packaging> 7 <dependencies> 8 <dependency> 9 <groupid>org.apache.struts</groupid>10 <artifactid>struts2-core</artifactid>11 <version>2.3.8</version>12 </dependency>13 <dependency>14 <groupid>org.apache.struts</groupid>15 <artifactid>struts2-spring-plugin</artifactid>16 <version>2.3.8</version>17 </dependency>18 <dependency>19 <groupid>org.apache.struts</groupid>20 <artifactid>struts2-json-plugin</artifactid>21 <version>2.3.8</version>22 </dependency>23 </dependencies>24 </project>
pom.xml
7.2 配置文件7.2.1 spring_context.xml配置注解扫描
1 <?xml version="1.0" encoding="utf-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" 5 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" 7 xmlns:jpa="http://www.springframework.org/schema/data/jpa" 8 xsi:schemalocation=" 9 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd10 http://www.springframework.org/schema/context/spring-context-3.0.xsd11 http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd12 http://www.springframework.org/schema/jee/spring-jee-3.0.xsd13 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd14 http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd15 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd16 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd17 http://www.springframework.org/schema/util/spring-util-3.0.xsd">18 19 <!-- 配置组件扫描 -->20 <context:component-scan base-package="cn.xiangxu" />21 22 </beans>
spring_context.xml
7.2.2 struts.xml配置访问路径、访问网名、action处理类
1 <?xml version="1.0" encoding="utf-8"?> 2 3 <!doctype struts public 4 "-//apache software foundation//dtd struts configuration 2.3//en" 5 "http://struts.apache.org/dtds/struts-2.3.dtd"> 6 7 <struts> 8 9 <!-- 测试struts整合spring时用 -->10 <package name="test" namespace="/test" extends="json-default">11 <action name="demo">12 <result>13 /web-inf/jsp/msg.jsp14 </result>15 </action>16 </package>17 18 <package name="vs" namespace="/vs" extends="json-default">19 <action name="valuestack" class="valuestackaction" method="valuestacemethod">20 <result name="success">21 /web-inf/jsp/valuestack.jsp22 </result>23 </action>24 </package>25 26 </struts>27 28
struts.xml
7.2.3 web.xml配置spring监听器
配置spring配置文件位置
配置主控制器
1 <?xml version="1.0" encoding="utf-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee " version="2.5"> 3 <display-name>ssh03</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file>10 <welcome-file>default.jsp</welcome-file>11 </welcome-file-list>12 13 <!-- 配置spring监听14 目的:容器启动时自动加载一些东西到缓存中 -->15 <listener>16 <listener-class>org.springframework.web.context.contextloaderlistener</listener-class>17 </listener>18 19 <!-- 配置spring配置文件的位置 -->20 <context-param>21 <param-name>contextconfiglocation</param-name>22 <param-value>classpath:spring_*.xml</param-value>23 </context-param>24 25 <!-- 配置主控制器和过滤条件 -->26 <filter>27 <filter-name>mvc</filter-name>28 <filter-class>org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter</filter-class>29 </filter>30 <filter-mapping>31 <filter-name>mvc</filter-name>32 <url-pattern>/*</url-pattern>33 </filter-mapping>34 35 </web-app>
web.xml
7.3 编写action处理类 1 package cn.xiangxu.action; 2 3 import org.springframework.context.annotation.scope; 4 import org.springframework.stereotype.controller; 5 6 import com.opensymphony.xwork2.actioncontext; 7 import com.opensymphony.xwork2.util.valuestack; 8 9 import cn.xiangxu.entity.person;10 11 @controller12 @scope(prototype)13 public class valuestackaction {14 15 private string message;16 17 public string valuestacemethod() {18 system.out.println(跟valuestack相关的action类);19 20 message = 我是控制类中的属性message;21 22 // 利用工厂方法来获取session对象时就使用下面两行代码23 actioncontext context = actioncontext.getcontext();24 context.getsession().put(loginname, warrior); // 向session中插入数据25 26 context.getsession().put(password, 123456); // 向session中插入数据27 28 // 利用上下文对象来获取valuestack对象29 valuestack valuestack = context.getvaluestack();30 31 person person = new person();32 person.setid(333);33 person.setname(fury);34 person.setmessage(hello fury);35 valuestack.push(person); // 将数据插入到对象栈中36 37 return success;38 }39 40 public string getmessage() {41 return message;42 }43 44 public void setmessage(string message) {45 this.message = message;46 }47 48 }
valuestackaction.java
在控制类中需要用到的实体类
1 package cn.xiangxu.entity; 2 3 import java.io.serializable; 4 5 public class person implements serializable { 6 7 private static final long serialversionuid = -7221161390673280278l; 8 private string id; 9 private string name;10 private string message;11 public person() {12 super();13 // todo auto-generated constructor stub14 }15 public person(string id, string name, string message) {16 super();17 this.id = id;18 this.name = name;19 this.message = message;20 }21 @override22 public int hashcode() {23 final int prime = 31;24 int result = 1;25 result = prime * result + ((id == null) ? 0 : id.hashcode());26 return result;27 }28 @override29 public boolean equals(object obj) {30 if (this == obj)31 return true;32 if (obj == null)33 return false;34 if (getclass() != obj.getclass())35 return false;36 person other = (person) obj;37 if (id == null) {38 if (other.id != null)39 return false;40 } else if (!id.equals(other.id))41 return false;42 return true;43 }44 public string getid() {45 return id;46 }47 public void setid(string id) {48 this.id = id;49 }50 public string getname() {51 return name;52 }53 public void setname(string name) {54 this.name = name;55 }56 public string getmessage() {57 return message;58 }59 public void setmessage(string message) {60 this.message = message;61 }62 @override63 public string tostring() {64 return person [id= + id + , name= + name + , message= + message + ];65 }66 67 68 }
person.java
7.4 编写jsp页面7.4.1 利用el表达式访问valuestack中的数据的格式${变量名}
7.4.2 利用ognl表达式访问valuestack中的数据的格式<s:property value="变量名"/>
<s:property value="#session.变量名"/>
注意:为什么访问sesseion中的数据时需要在前面加 #session. 是因为....【自己百度去,或者参见本博客顶端的连接;三少能力有限,讲不清楚】
注意:在读取栈结构中的数据时是从栈顶开始读的,如果有两个变量的名字相同,那么读取到的只会是相对前面的那个变量的值
1 <%@ page language="java" contenttype="text/html; charset=utf-8" 2 pageencoding="utf-8"%> 3 4 <!-- 引入struts2标签库 --> 5 <%@ taglib prefix="s" uri="/struts-tags" %> 6 7 <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> 8 <html> 9 <head>10 <meta http-equiv="content-type" content="text/html; charset=utf-8">11 <title>insert title here</title>12 </head>13 <body>14 <h2>跟valuestack有关的页面</h2>15 <hr /><hr />16 17 <h2>利用el表达式从valuesstack中获取数据</h2>18 <h3>${message }</h3>19 <hr />20 <h3>${loginname }</h3>21 <hr />22 <h3>${password }</h3>23 <hr /><hr />24 25 <h2>利用ognl表达式获取valuestack中的数据</h2>26 <h3><s:property value="message"/></h3>27 <hr />28 <h3><s:property value="#session.loginname"/></h3>29 <hr />30 <h3><s:property value="#session.password"/></h3>31 32 <hr /><hr />33 34 <s:debug></s:debug>35 </body>36 </html>
valuestack.jsp
7.5 项目结构图
以上就是struts2框架简介及用法介绍的详细内容。