Struts2+Spring+mybatis(OGNL+EL)

110 篇文章 0 订阅
95 篇文章 0 订阅

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&amp;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>

9.测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值