实验十二 Struts 2的标签与综合开发
Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。
如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。
我的E-MAIL:Max.M.Yuan@。
在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。
分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。
1.非UI标志o if、elseif和else描述:执行基本的条件流转。
参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。
在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。
Struts2的综合应用

第八章Struts2的综合应用目标进一步熟悉Struts2的各个技术要点能自己动手完成一个Struts2的简单应用8.1 使用MYSQL 建立一张数据库表这里我们使用图形界面的sql 工具SQLyog 生成数据库表。
图8.1如图所示,我们在脚本区域就是红色方框所在的位置输入我们的Sql 语句,接着在红圈的位置按下“>>”,我们就能生成我们想要的表。
图8.2如图所示我们在test 数据库下生成了一张表user,在下面的红色方框中我们可以很清生成的表user楚的看到有3个字段,其中主键为“id ”,还有2个字段为“username ”,“password ”。
8.2 建立项目总框架为了使业务逻辑和控制分离,我们使用了MVC 的设计模式。
框架图如下:图8.3相应的我们把项目的架构先搭建好,如图所示图8.4 在我用红圈标出的地方,我们可以看到有3个文件夹web,model,dao ,我们把action 放在web 下,把数据模型放在model 下,把和数据库交互的类放在dao 下,这样做层次清晰,可以使编码工作变得有据可循。
下图为例子。
图8.5接着我们可以看到这里有个以“I”开头的文件,他是干什么用的呢,其实他是一个接口,对接口编程可以使我们的代码更为健壮。
下面的章节我们会详细解释这种技术。
8.3 实施项目编码在我们搭好的框架中我们将会一步一步的实现一个用户管理系统。
主要的作用是对数据库表user进行增删改查。
首先我们要建立数据库的连接,以及数据库表模型。
接着我们建立对数据库的连接逻辑变化的时候只需改实现类的方法,而不必去管其他调用的地方。
第2步就是建立jsp页面,先看我们页面。
图8.5我们的userList.jsp如下图8.6在视图层建立完毕之后,我们需要建立几个action来控制跳转和转业务逻辑的实现。
在web目录下我们建立了user.action。
代码如下:IUserDAO类型的一个实例,但是真正的类别却是UserDAO,应此dao.delete()调用的就是UserDAO下的方法。
Struts2标签应用和介绍

由于标签太多难做目录索引,如果你觉得有目录索引更好,请到/p/myjdemo/downloads/list 下载CHM版本的Struts2标签详解,谢谢。
a标签创建一个HTML超链接,等价于HTML 的<a href=""....示范代码:<s:a href="login.action">登陆</s:a>action使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。
如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。
action标签的属性:id:可选属性,该属性将会作为该Action的引用IDname:必填属性,指定该标签调用哪个Actionnamespace:可选,指定该标签调用的Action所在的namespace. executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。
默认是false,即不包含ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。
下面是本示例应用中的Action类,包含连个处理逻辑。
代码如下public class TagAction extednds ActionSupport{//封装用户请求参数的author属性private String author;//author的get和set的方法,省略……public String execute() throws Exception{return "done";}public String login() throws Exception{ServletActionContext.getRequest().setAttribute("author",getAuthor()); return "done";}}上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。
第14章_Struts 2的标签库 试验设计与数据处理教案(第二版)课件

学习表单标签
• 了解表单标签的通用属性 • 掌握表单标签的name和value属性 • 掌握与表单相关的标签——form、submit和reset标签 • 生成多个复选框标签 • 实现组合单行文本框和下拉列表框标签 • 实现组合文本框和日期、时间选择框标签 • 实现生成级联列表框标签 • 实现添加CSS和JavaScript标签 • 实现生成可交互的两个列表框标签
1-9
性格决定命运, 专注成就人生
cjgong
1-6
学习表单标签
• 实现生成列表框标签 • 实现生成下拉列表框选项组标签 • 实现生成多个单选框标签 • 实现防止多次提交表单标签 • 实现生成高级列表框列表 • 了解其他的表单标签
1-7
学习非表单标签
• 实现显示字段错误信息标签 • 实现显示动作错误和动作消息标签 • 调用模板标签
1-8
小结
本章介绍了Struts 2的主要标签,这些标签包括控 制标签、数据标签、表单标签和非表单标签。虽然在本 章按不同的类别介绍这些标签,但实际上Struts 2并未 对这些标签进行分类,所有的Struts 2标签都被放在了 一个s标签库中。Struts 2标签比Struts 1.x中的标签支 持更多的表达式,如EL、OGNL、Lamdba表达式等。 OGNL和Lamdba表达式可以直接在Struts 2标签中使 用,但EL表达式自从Struts 2.0.10版本开始,默认情 况就将其关闭了,要想在Struts 2标签中使用EL表达式 ,就需要在struts-tags.tld文件中单独打开某个标签的 EL支持,也就是将该EL的<rtexprvalue>标签值设为 true。
Struts 2的标签库
系列十四:关于Struts 2的高级知识——标签库
Struts2全部实验报告

实验时间2015年11月6日19:00时至22:00时学时数 4 1.实验名称实验一:熟悉Struts2核心文件2.实验目的(1)熟悉Struts2的配置文件web.xml和struts.xml。
(2)熟悉如何书写用户定义的控制器。
(3)深刻理解DMI和通配符的使用。
(4)学会struts2接收参数的方法。
3.实验内容(1)将如下页面中登陆和注册的action配置用通配符实现。
(2)理解局部结果和全局结果,学会在struts.xml 中配置全局结果。
(3)实现增加书籍信息的业务处理。
(4)修改管理员登陆后的页面并新写页面addBook.jsp,使得点击添加书籍信息后呈现下面的页面4.实验原理或流程图要求:➢管理员登录后跳到管理员登陆成功的页面➢普通用户登录后跳到普通用户登陆成功的页面➢注册后跳到注册成功的页面➢登录时用户名密码输入错跳到出错页➢注册和登录时用户名,密码没有输入时跳到登陆注册页,并在登陆注册页上显示校验失败的相关提示。
要求如下:➢当输入书名,作者和定价后,要求使用属性驱动、模型驱动或今天新学的接收参数的方法进行参数接收。
➢使用集合模拟数据库。
➢理解chain结果类型,使得增加书籍后马上能将新增书籍的信息显示出来。
呈现出如下的页面:(注意:此处需要学会读取struts2中ValueStack中的内容)5.实验过程或源代码6.实验结论及心得通过本此实验,知道了Action配置采用通配符的方式该如何编写,也会了动态调用Action里面的方法,懂得了全局结果的配置,也会使用了接受参数的方法。
项目名称/login.jsp,查看运行结果。
(3)使用内置校验器进行校验项目3:用户注册验证。
步骤1:register.jsp文件步骤2:Register.java文件步骤3:新建 Register-register-validation.xml文件步骤4:struts.xml文件步骤5:运行程序,URL地址栏中输入http://主机名:端口名称/项目名称/register.jsp,查看运行结果。
struts2标签详解[1]
![struts2标签详解[1]](https://img.taocdn.com/s3/m/4432e174f46527d3240ce0e5.png)
要在jsp中使用Struts2的标志,先要指明标志的引入。
通过jsp的代码的顶部加入以下的代码:<%@taglib prefix="s" uri="/struts-tags" %>If elseif else描述:执行基本的条件流转。
参数:例子:<s:set name="age" value="61"/><s:if test="${age > 60}">老年人</s:if><s:elseif test="${age > 35}">中年人</s:elseif><s:elseif test="${age > 15}" id="wawa">青年人</s:elseif><s:else>少年</s:else><s:set name="name" value="<%="'"+request.getParameter("name")+"'"%>"/><%System.out.println(request.getParameter("name"));%><s:if test="#name=='zhaosoft'">zhaosoft here</s:if><s:elseif test="#name=='zxl'">zxl here</s:elseif><s:else>other is here</s:else>Iterator(迭代)描述:用于遍历集合(java.util.Collection)或枚举值(java.util.iterator) 参数I18n(国际化操作)描述:加载资源包到值堆栈。
STRUTS2实验报告
STRUTS2实验报告1. 系统分析与设计 1.1 系统功能描述本系统是个非常简单的注册、登录系统。
本系统的实现是基于struts2、spring、hibernate三个框架,系统功能单一,业务逻辑简单。
当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。
当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。
系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。
系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。
故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。
当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。
除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。
1.2 系统功能流程1.3 数据库设计相关的映射文件:<hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/><propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping> 一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关系。
Struts2页面开发中常用标签使用说明
Struts2页面开发中常用标签使用说明2008-07-30 22:561. Struts2页面开发中常用标签使用说明1.1.往action里传值的使用方式:<input name="userName" type="text" class="input6" size="15"> a. userName属性需要在访问的action中提供相应的属性,并有SET/GET 方法。
b. 可以不在访问的action中提供相应的属性,用request.getParameter(“userName”);1.2.显示标签 property 用于输出指定值:<s:property value=" userName "/> 当action返回到指定页面是,可以通过该标签显示action中的属性信息。
(注 userName必须在action 中存在,并有GET方法)。
1.3.往对象中传值<s:textfield> 用于从页面往action中的对象内传值:<s:text name="user. userName " id="username"/>该标签可以在页面中向action中的实体对象内直接传值。
(注:在action中要存在user对象,并有SET/GET方法。
)1.4.判断<s:if> </s:if> 用于在页面中判断指定数据<s:if test="userName == admin">…. </s:if><s:else>…. </s:else>该标签用于对指定的数据进行判断,但指定的数据必须在action中存在。
1.5.迭代<s:iterator>用于将List、Map、ArrayList等集合进行循环遍历<s:iterator value="userList" id="user" status="u"><s:property value="userName"/></a></s:iterator>该标签用于将userList集合中的元素进行循环,用过property进行显示集合中的指定元素值。
Struts2开发总结.doc
Struts2开发总结Struts2项目开发总结(注Struts2版本Struts2.1.6,数据库Oracle9i)所须架包commons-logging-1.0.4.jar、commons-fileupload-1.2.1.jar 、freemarker-2.3.13.jar ognl-2.6.11.jar、struts2-core-2.1.6.jar 、xwork-2.1.2.jar 1、若在前台页面使用orgl表达式必须定义使用{requestScope.count}来获取session中的值2、在jsp页面中显示action中的数据,不需要点击链接到action再返回页面中显示数据第一步,写一个action类第二步配置struts.xml 文件,如/sort1.jsp /error.jsp 第三步在sort1.jsp中遍历action 方法为sort5list的结果集“ 第四步在index.jsp中调用action 为sort5list的方法3、Struts2超链接传参方式第一种“ 第二种Newsquerynew 最新文章第三种直接使用即可注意Struts2超链接标签中的href属性是必选参数,否则在项目整合中可能会出现不明的标签异常。
4、使用Struts2标签循环遍历结果集“ 其中内嵌html 语言,除了value属性外,还有可选属性id“ “ status“status“,value属性是必选的5、格式化日期显示方法或者,只需要改变即可必须定义Body体中引用6、Struts2下拉菜单的使用属性注解name是给Struts2标签取名字,这个也是提交到action并保存到对应的数据库中的字段名所必须得参数;list是下拉选项数值;listKey是选项列表所对应的id,listValue是选项列表每个字段的名称;theme是自定义下拉框格式,headerkey是首选项的主键id,headerValue是首选项的字段名7、Struts2.1.6使用日期控件需要导入包struts2-dojo-plugin-2.1.6.jar 在head体中加入在body体中引用属性注解name是给标签取名,type为date日期类型,displayFormat格式化显示日期,value是获取时间值,value“{ today }“是获取当前系统时间8、Struts2中form提交表单格式在form中加入theme“simple“属性,就不会受Struts2定义格式的影响9、使用属性驱动取值在action中将要输出的属性生成get和set方法,并将返回值定义为返回对象,如private String ntitle;//标题private String ncontent;//内容private String ntime;//时间private String username;//发布人News newsns.queryNnewsdetailsql2nid;//返回一个对象public String getNtitle { return ntitle; } public void setNtitleString ntitle { this.ntitle ntitle; } public String getNcontent { return ncontent; } public void setNcontentString ncontent { this.ncontent ncontent; } public String getNtime { return ntime; } public void setNtimeString ntime { this.ntime ntime; } public String getUsername { return username; } public void setUsernameString username { ername username; } 由action直接跳转到要显示这些属性详细内容的页面在jsp 中直接使用标签取出即可使用模型驱动查改新建action查询文章类型import javax.servlet..opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.txxw.cms.news.model.Ctype; import com.txxw.cms.news.model.CtypeService; /** * author fejd E-maillzd_niit_ * version 创建时间May 22, 2009 14321 PM * 功能实现文章类型修改内容查询*/ public class CtypeeditAction extends ActionSupport implements ModelDriven { private Ctype ctypenew Ctype;//将封装数据的ctype实现get和set方法Override public String execute throws Exception { // TODO Auto-generated method stub] HttpServletRequest requestServletActionContext.getRequest; int ct_idInteger.parseIntrequest.getParameter“ct_id“.replace“,“, ““;//通过选择复选框来实现单个文章类型修改CtypeService csnew CtypeService; Ctype ctypecs.editctypesqlct_id; this.setCtypectype; return “success“; } public Object getModel { // TODO Auto-generated method stub return null; } public Ctype getCtype { return ctype; } public void setCtypeCtype ctype { this.ctype ctype; } } Editctypesql方法如下public Ctype editctypesqlint ct_id throws IOException{ dbconnew DBConnection; condbcon.getCon; Ctype ctynull; List ctylistnewArrayList; try { pstacon.prepareStatementthis.getEditCtypesqlct_id; psta.setInt1, ct_id; rspsta.executeQuery; whilers.next { ctynew Ctype; cty.setCt_idrs.get Int“ct_id“; cty.setCt_namers.getString“ct_name“;cty.setCt_sidrs.getString“ct_sid“; //数据类型Clob转换String 类型START// try { oracle.sql.CLOB cloboracle.sql.CLOBrs.getClob“ct_introduction“;//数据库中存文本的CLOB型字段名String ct_introductionclob.getSubStringlong1,intclob.length;//subStrin g是截取字符串(从1截到length)ifclobnull||ct_introductionnull||ct_introduction““{ return null; } cty.setCt_introductionct_introduction;System.out.printlnct_introduction; }//try catchException e{ logger.debug“数据类型Clob转换String类型出现异常“; “数据类型Clob转换String类型出现异常“;e.printStackTrace; } //数据类型Clob转换String类型END// cty.setCt_imagers.getString“ct_image“; ctylist.addcty; } } catch SQLException e { // TODO Auto-generated catch block e.printStackTrace; } return cty; } public String getEditCtypesqlint ct_id { this.editCtypesql“select *from system.ctype where ct_id“; return editCtypesql; } public voidsetEditCtypesqlString editCtypesql { this.editCtypesql editCtypesql; } 注明上述方法中涉及到Oracle数据类型Clob 转换成String类型问题在jsp中使用即可取出ctype中的数据。
Struts2 开发详解
Struts2 开发过程
在 Struts.xml 配置包
<package name="itclass" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itclass.action.HelloWorldAction"> <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> 框架中使用包来管理Action,包的作用和 中的类包是非常类似的, 在struts2框架中使用包来管理 框架中使用包来管理 ,包的作用和java中的类包是非常类似的,它主要用 中的类包是非常类似的 于管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的 于管理一组业务功能相关的 。在实际应用中,我们应该把一组业务功能相关的Action 放在同一个包下。 放在同一个包下。 配置包时必须指定name属性,如果其他包要继承该包,必须通过该属性进行引用。 属性, 配置包时必须指定 属性 如果其他包要继承该包,必须通过该属性进行引用。 包的namespace属性用于定义该包的命名空间。该属性可以不配置,对本例而言,如果不 属性用于定义该包的命名空间。 包的 属性用于定义该包的命名空间 该属性可以不配置,对本例而言, 指定该属性,默认的命名空间为“”(空字符串) 指定该属性,默认的命名空间为 (空字符串)。 通常每个包都应该继承struts-default包, struts-default包是由 包 包是由struts内置的,它定义了 内置的, 通常每个包都应该继承 包是由 内置的 struts2内部的众多拦截器和 内部的众多拦截器和Result类型。Struts2很多核心的功能都是通过这些内置的拦截 类型。 内部的众多拦截器和 类型 很多核心的功能都是通过这些内置的拦截 器实现的。 从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截 器实现的。如:从请求中把请求参数封装到 、 器实现的。当包继承了struts-default包才能使用 包才能使用struts2提供的这些功能。 struts-default 提供的这些功能。 器实现的。当包继承了 包才能使用 提供的这些功能 包是在struts2-core-2.x.x.jar文件中的 文件中的struts-default.xml中定义。 struts-default.xml也是 中定义。 包是在 文件中的 中定义 也是 Struts2默认配置文件。 Struts2每次都会自动加载 struts-default.xml文件。 默认配置文件。 文件。 默认配置文件 每次都会自动加载 文件 包还可以通过abstract=“true”定义为抽象包,抽象包中不能包含 定义为抽象包,抽象包中不能包含action。 包还可以通过 定义为抽象包 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《J2EE企业级软件开发》实验十二
Struts 2的标签与综合开发
学号:___________________ 姓名:____________________
实验目的:
1,掌握Struts2的基本原理和开发步骤
2,熟悉Struts2开发中的常见问题的解决方法
3,综合应用Struts 2技术开发应用系统
实验内容和步骤:
1,在MyEclipse 中创建web工程(假设工程名为ssh12)。
2,按照以前实验的方法配置Struts2的基础环境。
3,开发模拟学生信息管理与登记系统,主要有以下要求:
1)系统包含5个主要jsp页面,学生基本信息录入、学生详细信息录入,学生头像上传、学生列表信息查看、学生详细信息查看。
(如下为学生基本信息录入示例页面,用到的js控件及页面模板可下载)
2)创建如下的JavaBean(getter和setter方法略),并设置页面对应属性,在Action类的execute()创建对象进行测试。
JavaBean类Student Action类中的execute()和upload()
3)在struts.xml中合理规划和配置action属性和result类型,以便页面合理跳转,例如:
4)对学生基本信息录入、学生详细信息录入的信息进行校验。
作业和思考题:
(回答完毕以下问题,请将本文件作为实验报告,上传到教师指定目录。
为防止上传文件重名而覆盖,建议命名为“学号+姓名.doc”)
1,Struts 2的综合开发中,你遇到了哪些问题,是如何解决的?根据你的开发实践,Struts 2与传统Servlet开发相比在哪些地方提高了开发效率效率的?2,将生成成功的工程打包,保存为“姓名+学号.rar”文件,上传到实验指定目录。