当前位置: 代码迷 >> 综合 >> Struts2+Spring+mybatis(OGNL+EL)
  详细解决方案

Struts2+Spring+mybatis(OGNL+EL)

热度:55   发布时间:2023-12-25 20:48:08.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.测试结果

  相关解决方案