Struts2+Spring+mybatis
OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言,使页面更简洁;
支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能;
Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势:
支持对象方法调用,如xxx.doSomeSpecial();
支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(price*discount),这个表达式会返回80;
访问OGNL上下文(OGNL context)和ActionContext;
操作集合对象。
可以直接new一个对象
值栈:valueStack
Struts用于共享数据的数据结构
作用:EL与valueStack的配合可以从控制页面传递数值,针对某个请求的上下文对象,可以保存到值栈中
结构:contents:保存数值(Action属性)。栈结构
Context:存储相关对象.Map结构
访问方式:contents:OGNL/EL表达式自顶向下查询数据,匹配成功后马上返回
Context:#key value
生命周期:当请求进入服务器的filter,创建valueStack对象,请求处理后,valueStack对象被销毁。
1.在pom.xml下导入依赖架包
2.配置web.xml
<!--配置spring监听器用于初始化spring容器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-*.xml</param-value></context-param><!-- struts2的主控制器的配置 --><filter><filter-name>mvc</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>mvc</filter-name><url-pattern>/*</url-pattern></filter-mapping>
3.配置spring-struts.xml
<context:component-scan base-package="XXXXXX"/>
4.配置spring-mybatis.xml
<!--定义数据源 --><bean id="ds" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"><property name="url" value="jdbc:mysql:///XXXX?useUnicode=true&characterEncoding=UTF-8"/><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="username" value="root"/><property name="password" value="XXXXXX"/></bean><!--配置sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="ds"/><property name="mapperLocations" value="classpath:mapper/*.xml"/></bean><!--扫描指定路径下的接口 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="XXXXX"/></bean>
5.创建Person实体类
/*** */
package com.zhiyou100.entity;import java.io.Serializable;/*** @author Administrator**/
public class Person implements Serializable {/*** */private static final long serialVersionUID = 1L;private Integer id;private String pname;private String message;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getPname() {return pname;}public void setPname(String pname) {this.pname = pname;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Person() {super();// TODO Auto-generated constructor stub}public Person(Integer id, String pname, String message) {super();this.id = id;this.pname = pname;this.message = message;}}
6.创建StackAction.java
/*** */
package XXXXXXX;import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
import com.zhiyou100.entity.Person;/*** @author Administrator**/
@Controller
@Scope("prototype")
public class StackAction {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String get() {
// 获取请求的上下文ActionContext context = ActionContext.getContext();
// 获取值栈ValueStack stack = context.getValueStack();message = "demo";Person person = new Person();person.setPname("Tom");person.setMessage("Hello World");stack.push(person);context.getSession().put("loginName", "Jack");return "success";}
}
7.配置struts.xml
<package name="test" namespace="/test" extends="struts-default"><action name="demo" class="stackAction" method="get"><result name="success">/WEB-INF/msg.jsp</result></action></package>
8.创建前端msg.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!--引入struts提供的标签库 -->
<%@ 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>值栈ValueStack</title>
</head>
<body style="font-size: 30px;"><h1>ValueStack</h1><!--OGNL表达式获取数值 --><s:property value="message"/><br><s:property value="[1].message"/><br><s:property value="#session.loginName"/><br><!--EL表达式 -->${message }<br>${loginName }<br><!--输出此valueStack中的数据 --><s:debug></s:debug>
</body>
</html>