admin管理员组文章数量:1794759
JavaWeb笔记之SSH(Struts2框架)
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 开发环境的构建下载Sturts 2 库文件 地址: struts.apache/downloads.html 将相关的库文件添加到WEB-INF\\lib 目录下:
在web.xml中添加过滤器
constant 元素:用来定义常量或覆盖default.properties文件中定义的常量。 package 元素:用来把动作组织成不同的包(package)。 action 元素:用来定义一个动作。 result 元素:用来指定结果类型,即定义在动作完成后将控制权转到哪里。
1.3 Struts 2 应用的开发步骤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)
表达式 表达式是整个OGNL的核心,OGNL会根据表达式去对象中取值。所有OGNL操作都是针对表达式解析后进行的。它表明了此次OGNL操作要"做什么"。表达式就是一个带有语法含义的字符串,这个字符串规定了操作的类型和操作的内容。OGNL支持大量的表达式语法,不仅支持这种"链式"对象访问路径,还支持在表达式中进行简单的计算
根对象 实际上OGNL的取值还需要一个上下文环境。设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作"在哪里进行"。上下文环境Context是一个Map类型的对象,在表达式中访问Context中对象,需要使用"#“号加上对象名称,即”#对象名称"的形式
上下文环境 实际上OGNL的取值还需要一个上下文环境,设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作"在哪里进行"。上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用"#“号加上对象名称,即”#对象名称"的形式
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 </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</s:param>--参数username=www.yiidian给test.jsp页面 </s:include> 3.2.7 传递参数标签:用来为其他标签提供参数,所以一般是嵌套在其它标签的内部,name属性用来指定参数名称,value(可选)属性用来指定参数值。
<s:param name="username" value="www.yiidian" />--这种方式的参数值会以String格式放入stack <s:param name="username">www.yiidian</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</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框架) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686826041a107405.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论