Struts2框架

  • 一、Struts 2 框架简述
    • 1.1 Struts 2 框架的组成
    • 1.2 Struts 2 开发环境的构建
    • 1.3 Struts 2 应用的开发步骤
  • 二、OGNL
    • 2.1 简介
    • 2.2 作用
    • 2.3 要素(表达式、根对象、上下文环境)
    • 2.4 用法
  • 三、Struts2 常用标签
    • 3.1 逻辑控制类标签
      • 3.1.1 条件标签:
      • 3.1.2 迭代标签:
      • 3.1.3 组合标签:
      • 3.1.4 分割标签:
      • 3.1.5 合并标签:
      • 3.1.6 排序标签:
      • 3.1.7 子集标签:
    • 3.2 数据输出类
      • 3.2.1 链接标签:
      • 3.2.2 action标签:
      • 3.2.3 JavaBean标签:
      • 3.2.4 日期标签:
      • 3.2.5 引用资源文件标签:
      • 3.2.6 包含页面标签:
      • 3.2.7 传递参数标签:
      • 3.2.8 值栈标签:
      • 3.2.9 变量赋值标签:
      • 3.2.10 国际化标签:
      • 3.2.11 链接标签:
      • 3.2.12 属性标签:
    • 3.3 HTML表单类标签
      • 3.3.1 s:form标签
      • 3.3.2 s:textfield和s:textarea标签
      • 3.3.3 s:password标签
      • 3.3.4 s:radio标签
      • 3.3.5 s:reset标签
      • 3.3.6 s:submit标签
      • 3.3.7 s:checkboxlist标签
      • 3.3.8 s:select标签
      • 3.3.9 s:optgroup标签
      • 3.3.10 s:file标签
      • 3.3.11 s:hidden标签
    • 3.4 HTML非表单类标签
      • 3.4.1 错误标签:
      • 3.4.2 消息标签:
      • 3.4.3 字段错误标签:
      • 3.4.4 DIV标签:

先简单介绍一下SSH框架
SSH是struts+spring+hibernate的一个集成框架,是目前比较流行的一种web应用程序开源框架。

集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,来帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。具体实现是用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的Dao(Data Access Object)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理。

一、Struts 2 框架简述

Struts2框架是用来替代servlet和jsp, 他的功能就是访问服务器的请求。

1.1 Struts 2 框架的组成

Struts 2框架实现了MVC模式。其中,模型(Model)表示业务和数据库代码,视图(View)表示页面设计代码,控制器(Cotroller)表示导航代码。所以这些使Struts 2 成为构建Java Web 应用的基本框架。

  • 控制器:控制器由核心过滤器StrutsPrepareAndExecuteFilter、若干拦截器和Action组件实现。
  • 模型:通常由JSP页面实现,也可以由Velocity Template、FreeMarker或其他表示层技术实现。
  • 配置文件:Struts 2框架提供了一个名为struts.xml 配置文件,使用它来配置应用程序中的组件。
  • Struts 2 标签:Struts 2 提供了一个功能强大的标签库,该库提供了大量标签,使用这些标签可以简化JSP页面的开发。

Struts 2 的MVC架构:

在控制器组件、业务逻辑组件以及视图组件之间没有代码上的联系,它们之间的关系都是在配置文件struts.xml 中声明的,这就保证了Web应用程序的可移植性和可维护性。

1.2 Struts 2 开发环境的构建

  1. 下载Sturts 2 库文件
    地址:
    http://struts.apache.org/downloads.html
    将相关的库文件添加到WEB-INF\lib 目录下:

  2. 在web.xml中添加过滤器

<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
  1. 创建 struts.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><constant name="struts.devMode" value="true" /><package name="basicstruts2" extends = "struts-default" namespace="/"><action name="index"><result>/index.jsp</result></action></package>
</struts>

constant 元素:用来定义常量或覆盖default.properties文件中定义的常量。
package 元素:用来把动作组织成不同的包(package)。
action 元素:用来定义一个动作。
result 元素:用来指定结果类型,即定义在动作完成后将控制权转到哪里。

1.3 Struts 2 应用的开发步骤

  1. 创建Action动作类
  2. 创建视图页面
  3. 修改struts.xml配置文件

二、OGNL

2.1 简介

OGNL(Object-Graph Navigation Language)的全称是对象图导航语言,它是一种功能强大的开源表达式语言,比EL(只能从域或内置对象中)表达式更强大,使用这种表达式语言,可以通过某种表达式语法,OGNL可以存取Java任意对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换。如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。

Struts2的默认表达式语言就是OGNL

2.2 作用

1.支持对象方法调用 objName.methodName()

2.支持类静态方法调用和值访问 @java.lang.String@format(‘name’,‘mark’)

3.支持赋值操作和表达式串联 price=100,calculatePrice()

4.支持访问OGNL上下文(OGNL context)和ActionContext

5.支持操作集合对象

2.3 要素(表达式、根对象、上下文环境)

OGNL的操作实际上就是围绕着OGNL结构的三个要素而进行的,分别是表达式(Expresssion)、根对象(Root Object)、上下文环境(Context)

  1. 表达式
    表达式是整个OGNL的核心,OGNL会根据表达式去对象中取值。所有OGNL操作都是针对表达式解析后进行的。它表明了此次OGNL操作要"做什么"。表达式就是一个带有语法含义的字符串,这个字符串规定了操作的类型和操作的内容。OGNL支持大量的表达式语法,不仅支持这种"链式"对象访问路径,还支持在表达式中进行简单的计算

  2. 根对象
    实际上OGNL的取值还需要一个上下文环境。设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作"在哪里进行"。上下文环境Context是一个Map类型的对象,在表达式中访问Context中对象,需要使用"#“号加上对象名称,即”#对象名称"的形式

  3. 上下文环境
    实际上OGNL的取值还需要一个上下文环境,设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作"在哪里进行"。上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用"#“号加上对象名称,即”#对象名称"的形式

2.4 用法

  1. 访问对象的方法
    public void testOGNL(){//获得上下文环境ContextOgnlContext context = new OgnlContext();//获得根对象RootObject root = context .getRoot();//执行表达式Object obj = Ognl.getValue("'helloWorld'.length()",context ,root);}
  1. 访问对象的静态方法
    public void testOGNL(){//获得上下文环境ContextOgnlContext context = new OgnlContext();//获得根对象RootObject root = context .getRoot();//执行表达式 @类名@方法名Object obj = Ognl.getValue("@java.lang.Math@random()",context ,root);}​
  1. 获取Root中数据(不需要加#)
    public void testOGNL(){//获得上下文环境ContextOgnlContext context = new OgnlContext();//向root传入Java对象context.setRoot(new User("mark", 15));//获得根对象RootObject root = context .getRoot();//执行表达式 获取对象中属性值Object username = Ognl.getValue("username",context ,root);Object age = Ognl.getValue("age",context ,root);}
  1. 获取Context中的数据(需要加#)
    public void testOGNL(){//获得上下文环境ContextOgnlContext context = new OgnlContext();//获得根对象RootObject root = context .getRoot();//向Context传入值context.put("username","mark");//执行表达式 获取Context中属性值Object username = Ognl.getValue("#username",context ,root);}

三、Struts2 常用标签

Struts2有一个标签库,里面预定义了非常多的标签供我们开发者使用,首先在页面使用以下代码引入标签库:

<%@ taglib prefix="s" uri="/struts-tags"%>

Struts2的标签一共分为四大类

3.1 逻辑控制类标签

3.1.1 条件标签:

用于执行基本的条件流转

<c:if>拥有一个test属性,其表达式的值用来决定标签里的内容是否显示。

<s:if test="#request.username=='eric'">一点教程网
</s:if>
<s:elseif test="#request.username=='jack'">www.yiidian.com
</s:elseif>
<s:else>欢迎一起学习IT技术
<s:/else>

3.1.2 迭代标签:

用于遍历集合或者枚举值类型的对象。

value属性表示集合或枚举对象,status属性表示当前循环的对象,在循环体内部可以引用该对象的属性。

<s:iterator value="userList" status="user">姓名:<s:property value="user.userName" />年龄:<s:property value="user.age" />
</s:iterator>

3.1.3 组合标签:

用于将多个枚举值对象进行叠加,形成一个新的枚举值列表,如将3个列表对象进行了组合,形成新的列表对象。

<s:append var="newIteratorList"><s:param value="%{myList1}" /><s:param value="%{myList2}" /><s:param value="%{myList3}" />
</s:append>

3.1.4 分割标签:

用于将一个字符串进行分割,产生一个枚举值列表,下面的代码将分割成三个字符串,然后输出。

<s:generator val="%{'aaa,bbb,ccc'}"><s:iterator><s:property /></s:iterator>
</s:generator>

3.1.5 合并标签:

用于将多个枚举值按照数组的索引位置进行合并。

<s:merge var="newMergeList"><s:param value="%{mylist1}">--假设mylist1列表中有a,b,c三个元素<s:param value="%{mylist2}">--假设mylist2列表中有1,2,3三个元素
</s:merge>

合并后新的列表的元素及其顺序为:a,1,b,2,c,3

可以使用以下代码输入

<s:iterator value="%{#newMergeList}"><s:property />
</s:iterator>

3.1.6 排序标签:

用于对一组枚举值进行排序,属性comparator指向一个继承java.util.Comparator的比较器,该比较器可以是对action页面中的一个比较器变量,source指定要排序的列表对象。

<s:sort comparator="myComparator" source="myList"><s:iterator><s:property value="..."/></s:iterator>
</s:sort>

3.1.7 子集标签:

用于取得一个枚举列表的子集。

source用于指定检索的列表对象,start用于指定起始检索的索引位置,count用于指定检索的结果输数量,decider属性必须是一个org.apache.struts2.util.SubsetIteratorFilter.Decider类的子类实例,用以指定检索的条件。例如在Action中提供了以下方法用来取得一个Decider对象:

public Decider getDecider(){return new Decider(){public boolean decide(Object element) throws Exception{int i=((Integer)element).intValue();return (((i%2)==0)?true:false);}};
}

然后引用该对象筛选子集:

<s:subset source="myList" decider="decider">
</s:subset>

或者不使用Decider对象:

<s:subset source="myList" count="13" start="3">
</s:subset>

3.2 数据输出类

数据输出标签用以输出页面中的元素、属性、隐含变量等,即包括静态文本的输出,也包括Struts2集成的各种变量的输出。

3.2.1 链接标签:

用于创建一个<a>标签,errorText用于显示错误信息,priInvokeJS表示该链接执行时的JavaScript提示函数href表示跳转地址。

<s:a errorText="删除错误" preInvokeJS="confirm('确认删除?')" href="test.jsp"><img src="/image/delete.gif" />
</s:a>

3.2.2 action标签:

可以直接调用action类中的函数,前提是该action类在Struts.xml中有定义,name属性用于指向映射文件中配置的action函数,excuteResult是否执行结果集的跳转。

<s:action name="LoginAction" executeResult="true" />--表示执行LoginAction的默认处理方法execute()
<s:action name="LoginAction!login" executeResult="true" />--表示执行LoginAction的处理方法login()

3.2.3 JavaBean标签:

用于创建一个JavaBean对象,name表示JavaBean类全名,var表示变量的实例名,并可以包含<s:param>设置实例化输入参数。

<s:bean name="xxx,xxx,xxx" var="xxx"><s:param name="name" value="hzd" />--为该JavaBean的构造方法传递参数
</s:bean>

3.2.4 日期标签:

用以输出一个格式化的日期对象,name表示要输出的对象,format表示输出的日期格式。

<s:date name="user.birthday" format="dd/MM/yyyy" />
<s:date name="user.birthday" format="%{getText('some.i18n.key')}" />
<s:date name="user.birthday" />--默认格式

3.2.5 引用资源文件标签:

用于加载资源包到值栈,它可以允许<s:text>标签访问任何资源包的信息,而不只是当前action相关联的资源包。name属性用以指定资源包的类路径。

<s:i18n name="com.yiidian.ApplilcationMessages"><s:text name="HelloWord" />
</s:i18n>

3.2.6 包含页面标签:

用来包含一个Servlet的输出(Servlet或JSP页面),使用value属性指定包含页名称,可以使用。

<s:include value="/test.jsp"><s:param name="username">www.yiidian.com</s:param>--参数username=www.yiidian.com给test.jsp页面
</s:include>

3.2.7 传递参数标签:

用来为其他标签提供参数,所以一般是嵌套在其它标签的内部,name属性用来指定参数名称,value(可选)属性用来指定参数值。

<s:param name="username" value="www.yiidian.com" />--这种方式的参数值会以String格式放入stack
<s:param name="username">www.yiidian.com</s:param>--这种方式的参数值会以Object的格式放入stack

3.2.8 值栈标签:

用以加入一个值到值栈中。

<s:push value="user"><s:property value="name" />--为user指定name属性<s:property value="age" />--为user指定age属性
</s:push>

3.2.9 变量赋值标签:

赋予变量一个特定范围内的值,name属性表示变量的名字,scope表示变量的作用域(application.session.request.page.action),value变量的值。

<s:set>

3.2.10 国际化标签:

用于输出国际化信息,name属性指定国际化资源文件中消息文本的key,可以与<s:i18n>标签结合使用

<s:text name="HelloWord" />--它会按照一定的顺序查找资源文件,直到找到定义HellowWord标签的资源文件为止

3.2.11 链接标签:

用于创建一个URL链接,并可以通过<s:param>标签提供request参数。

<s:url id="url" value="/test.jsp"><s:param name="username">www.yiidian.com</s:param>
</s:url>

3.2.12 属性标签:

用以输出value属性的值,并拥有一个default属性,在value对象不存在时显示。escape属性为true,来输出原始的HTML文本。

<s:property value="getText('some.key')">

3.3 HTML表单类标签

3.3.1 s:form标签

<s:form> 标签用于呈现 HTML 语言中的表单元素

3.3.2 s:textfield和s:textarea标签

<s:textfield> 和 <s:textarea> 标签的作用比较相似,都用于创建文本框,其主要区别在于 <s:textfield> 创建的是单行文本框,而 <s:textarea> 创建的是多行文本框。二者的使用也比较简单,一般只需要指定其 label 和 name 属性即可。两个标签的用法如下所示。

<s:textfield label="用户名" name="username"/>
<s:textarea label="描述" name="description"/>

在上述两个用法中,name 属性用于指定单行/多行文本框的名称,在 Action 中,通过 name 属性即可获取单行/多行文本框的值。
此外,<textarea> 标签还可以通过 value 属性指定单行/多行文本框的当前值,通过 cols 和 rows 属性分别指定多行文本框的列数和行数。

3.3.3 s:password标签

<s:password> 标签用于创建一个密码输入框,它可以生成 HTML 中的 <input type="password"/> 标签。
需要注意的是,Struts2 的 <s:password> 标签与 HTML 的 标签也略有不同:<input type="password"/> 标签只要设置 value 属性就可以将 value 的属性值作为默认显示值;而 Struts2 的 <s:password> 标签除了要设置 value 属性值以外,还要设置 showPassword 属性值为 true。

3.3.4 s:radio标签

<s:radio> 标签用于创建单选按钮,生成 HTML 中的 <input type="radio"/> 标签

3.3.5 s:reset标签

<s:reset> 标签用于创建一个重置按钮,会生成 HTML 中的 <input type="reset"/> 标签,该标签的使用比较简单,其常用属性为 name 和 value。

3.3.6 s:submit标签

<s:submit> 标签主要用于产生 HTML 中的提交按钮,该表单元素中,可以指定提交时的 Action 对应的方法。该标签通常与 <s:form> 标签一起使用。

3.3.7 s:checkboxlist标签

<s:checkboxlist> 标签用于一次性创建多个复选框,用户可以选择创建零到多个复选框,它可以产生一组<input type="checkbox"/>标签。

3.3.8 s:select标签

<s:select> 标签用于创建一个下拉列表框,它会生成 HTML 中的 <select> 标签。

3.3.9 s:optgroup标签

<s:optgroup> 标签用于生成选项组,通常作为 <s:select> 标签的子标签使用。由于在一个下拉列表框中可以包含多个选项组,所以 <s:select> 标签也能够包含多个 <s:optgroup> 标签。

3.3.10 s:file标签

<s:file> 标签用于创建一个文件选择框,它会生成 HTML 中的 <input type="file"/> 标签。

3.3.11 s:hidden标签

<s:hidden> 标签用于创建隐藏表单元素,它会生成 HTML 中的隐藏域标签 <input type="hidden"/>

3.4 HTML非表单类标签

主要用来输出各种错误和消息。

3.4.1 错误标签:

用以输出Action错误信息

<s:actionerror />

3.4.2 消息标签:

用以输出Action普通消息

<s:atcionmessage />

3.4.3 字段错误标签:

用以输出Action校验中某一个字段的错误信息或所有字段的错误信息

<s:fielderror />--输出所有字段的错误信息
<s:fielderror><s:param>username</s:param>--输出字段username的错误信息<s:param>password</s:param>--输出字段password的错误信息
<s:fielderror>

3.4.4 DIV标签:

用以输出一个<div>标签

JavaWeb笔记之SSH(Struts2框架)相关推荐

  1. Spring笔记 整合SSM[Struts2框架] 万神小栈

    一 spring概述 1.1 web项目开发中的耦合度问题 微信小程序搜索 万神小栈 更多资源等你发现! 如果文章对你有帮助别忘了点赞加关注喔~ 在servlet中需要调用service中的方法,则需 ...

  2. Javaweb笔记之初识EasyUi框架

    EasyUi 一. 官方介绍 二. 使用方法 一. 官方介绍 easyui是一种基于jQuery的用户界面插件集合. easyui为创建现代化,互动,JavaScript应用程序,提供必要的功能. 使 ...

  3. java ee ssh三大框架知识点_详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)...

    详解JAVAEE--SSH三大框架整合(spring+struts2+hibernate) 发布时间:2020-09-17 13:34:05 来源:脚本之家 阅读:64 作者:kent鹏 一.整合原理 ...

  4. Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目[Java通用框架源码及开发视频教程]

    Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目 功能简介: A.代码生成器(开发利器) 生成Java各层次的类和JSP等文件,提高开发效率 B.阿里巴巴 ...

  5. Struts2框架学习笔记_Struts2入门

    文章为学习struts的笔记,可供读者参考,有不足之处还望之指出. 参考: POJO与JavaBean的区别 Velocity Velocity官网 FreeMarker XSLT struts2 学 ...

  6. Struts2框架--学习笔记(下):OGNL表达式、值栈操作、拦截器、struts2标签、文件上传

    一.OGNL概述:OGNL是一种表达式 (1)在struts2中操作值栈数据. (2)一般把ognl在struts2中操作,和struts2标签一起使用操作值栈. (3)ognl不是strut2的一部 ...

  7. Struts2框架--学习笔记(上):搭建struts2工程、struts2基本概念、struts2对页面数据的操作

    概述: Struts2框架应用于javaee三层框架中的web层.是在Struts1和webwork基础上发张的一个全新的框架. 一.搭建一个最基本的struts2工程步骤: 1.导入基本的jar包依 ...

  8. Struts2 框架笔记主要对跳转路径,挎包跳转,拦截器进行应用,定义成员变量,收取客户端参数等详细说明

    MVC概述 1)MVC是一种编程思想,人为的将 web系统分为三个层次. 2)MVC好处:解耦合,提高系统的可维护型和可拓展性. M-model:数据模型层 (DAO service entity) ...

  9. SSH:Struts2框架(总结)

    摘要 Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架.不过有一点大家需要注意的是:尽管Struts2和Struts1在名字上的差别不是很大,但 ...

最新文章

  1. Android保存图片到数据库,从数据库取图片的方法
  2. dede使用方法----如何调用最新文章,最热文章,友情链接
  3. xml中1字节的UTF-8序列的字节1无效([字符编码]Invalid byte 1 of 1-byte UTF-8 sequence终极解决方案)
  4. ubuntu12.04编译android4.0源代码Deug2
  5. 多项式加法c语言数组解,急!!!!c语言:求n次多项式的加法和乘法
  6. Maven3.2创建webapp项目过程中问题以及解决方案
  7. 教你玩转CSS的所有字体,走过路过不要错过!!!
  8. 这是一场数学、数学、数学的盛会
  9. 数据结构笔记(二十一)--二叉树的遍历
  10. JDBC操作数据库的基本步骤:
  11. bootstracp实现树形列表_用 Python 实现一个网页下载工具
  12. 清除计算机用户缓存,如何在Windows 7中清除内存缓存,释放电脑空间?
  13. Axure RP从入门到精通(二十)鼠标指针函数
  14. ps小技巧:修改图标颜色
  15. item的介绍与使用-2.0
  16. 网站QQ客服直接临时会话
  17. unlink php 实例,PHP unlink()用法及代碼示例
  18. adb检测不到模拟器的解决方法
  19. [人生故事] -- 花朵静悄悄地开放
  20. 给 Java 程序猿们推荐一些值得一看的好书

热门文章

  1. 为什么多迪技术人员都喜欢用python写爬虫?
  2. 数字签名和验签的详细过程
  3. 前端简单实现开心网注册
  4. 计算机毕业设计Java大学生宿舍信息管理系统(源码+系统+mysql数据库+lw文档
  5. C语言 | 学习使用递增运算符
  6. 切换浅色和暗夜模式的vue组件 darkmode-switch-btn
  7. Kubernetes入门教程 --- 使用二进制安装
  8. Ventuz5学习笔记
  9. Python数据分析必知必会——TGI指数
  10. 【MyBatis】各种查询功能