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>