清华it javaee教学ppt8

上传人:第*** 文档编号:49750328 上传时间:2018-08-02 格式:PPT 页数:27 大小:984KB
返回 下载 相关 举报
清华it javaee教学ppt8_第1页
第1页 / 共27页
清华it javaee教学ppt8_第2页
第2页 / 共27页
清华it javaee教学ppt8_第3页
第3页 / 共27页
清华it javaee教学ppt8_第4页
第4页 / 共27页
清华it javaee教学ppt8_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《清华it javaee教学ppt8》由会员分享,可在线阅读,更多相关《清华it javaee教学ppt8(27页珍藏版)》请在金锄头文库上搜索。

1、第八章Struts实现文件上传下载及Struts2.0的介绍 课程目标课程目标qStruts实现文件的上传 qStruts实现文件的下载 qStruts2.0介绍 q开发Struts2.0的第一个应用程序 qStruts2.0的标签讲解 q实现基于网络的文件上传与下载 q创建Struts2.0的应用程序 体验项目 程序实现的功能:通过使用Struts的标签创建上传文件的页 面控件,并且Struts提供了FormFile接口,这样在Action中就可以像操作本 地文件一样操作客户端所传递的文件信息了。该程序利用Struts的这些功能 实现了文件的上传和下载功能。 程序运行的过程如下所示:(1)访

2、问上传文件页面,点击“浏览”按钮,选择需要上传的文件,如图 8-1所示: 图8-1 选择需要上传的文件 (2)选择文件后,点击“上传”按钮,文件将成功上传至服务器端,并返回 给客户所上传的文件名及文件大小。 图7-2 中文页面 Struts实现文件上传与下载功能 实现文件上传 Struts的标签可以创建上传文件的页面控件,它的实现代码如下:标签必须嵌套在中才有效,而且必须注意以下几点: (1)标签的property属性是必须的,而且属性值必须与 ActionForm bean中的属性名一致。 (2)标签必须将“method”属性设置为“post”。 (3)标签的编码类型“enctype”属性必

3、须设置为 “multipart/form-data”。 对于文件的上传功能,Struts提供了FormFile接口。Struts在处理客户 端请求的时候,可以直接将客户端提交的文件信息转化为FormFile对象的实 现类,这样在Action中就可以像操作本地文件一样操作客户端所传递的文件 信息了。 实现文件下载 在本章体验项目中,实现文件上传功能后,我们又实现了文件的下载 功能。在JSP页面中,我们可以嵌入java代码段实现显示服务器端某个文件 夹下所有的文件。获取可以下载的文件信息后,我们就可以给每个文件挂 上超链接,并将文件信息传递给Action处理,以下是该功能的实现代码: “ +myf

4、ilei.getName()+“); %Action获得文件信息后,需要进行一系列的处理,其中我们需要关注的是 如何解决下载文件名的中文乱码问题。以下是实现文件下载的Action类的源 代码(部分): /进行文件下载操作 BufferedInputStream br = new BufferedInputStream(new FileInputStream(file); byte buf = new byte8192; int length = 0; OutputStream out = response.getOutputStream(); while (length = br.read(b

5、uf) 0) out.write(buf,0,length); out.close();Struts2.0介绍 初步认识Struts2.0 在Struts官方网站上,是这样来描述Struts2.0的:Apache Struts 2即是 之前大家所熟知的WebWork 2。在经历了几年的各自发展后,WebWork和 Struts社区决定合二为一,也即是Struts 2.0。Struts作为MVC的Web框架,自推出以来不断受到开发者的追捧,并得 到了用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点: MVC 2模型的使用。 功能齐全的标签库(Tag Library)。 开放源

6、代码 。Struts自身也有不少的缺点: 需要编写的代码过多,容易引起“类爆炸”。 单元测试困难。这些缺点随着Web的发展越来越明显。这就促生了Struts 2.0,它的诞生 能很好的解决上述问题。 开发第一个Struts2.0应用程序 1配置web.xml创建一个Web应用目录,将Struts2.0的类包文件拷贝至应用的lib目录下 。对于Struts1.x版本中的web.xml,我们需要配置ActionServlet,在这里并非 如此,而是需要配置Struts2.0的FilterDispatcher。我们可以将web.xml进行如 下所示的配置: struts2 org.apache.st

7、ruts2.dispatcher.FilterDispatcherstruts2/*SayHello.jsp2编写Action类public class HelloWorld extends ActionSupport private String message; public String getMessage() return message; public void setMessage(String message) this.message = message; public String execute() message = “Hello,“ + message + “!“;

8、return SUCCESS; Action类是Struts的一个重要组件,在Struts2.0中也不例外,但它相对 与以往的版本有很大的改变。它继承自com.opensymphony.xwork2. ActionSupport类,execute()方法中也已经不是那四个我们熟悉的参数了。 在execute()方法中,直接返回的是“SUCCESS”,而“SUCCESS”在该类中 ,并未定义,可想而知,它肯定是在该类的父类中定义的,表示程序正确执 行的返回结果。以下代码是“SUCCESS”的定义的源码: public abstract interface Action / Fields publ

9、ic static final String SUCCESS = “success“; public static final String NONE = “none“; public static final String ERROR = “error“; public static final String INPUT = “input“; public static final String LOGIN = “login“; / Methods String execute() throws Exception; 3配置struts.xml Struts1.x版本默认的配置文件是“str

10、uts-config.xml”,而Struts2.0默认的配 置文件是“struts.xml”。“struts.xml”相对于“struts-config.xml”的配置,有了 很大的改变。以下代码是示例程序的“struts.xml”: /HelloWorld.jsp“struts.xml”位于WEB-INFclasses目录下,其中元素的name属 性相当于Struts1.x的path属性,class仍指向所引用的类文件。元素 配置了返回给用户的视图。当有资源提交给该Action处理后,如果程序得到 正确执行,此处将返回给掉用的界面即HelloWorld.jsp。 4编写视图页面接下来我们来

11、编写两个视图页面,在第一个“SayHello.jsp”页面中,运用 Struts2.0的标签,用于接收用户输入的一个字符串,参考代码如下: Say “Hello“ to: Message: 当“SayHello.jsp”提交数据给Action处理之后,将返回“HelloWorld.jsp” 页面给用户。在“HelloWorld.jsp”页面中将显示用户所提交的数据:5运行程序(1)启动服务器之后,首先访问“SayHello.jsp”页面 (2)在文本框中输入随意字符串,此处我们输入了“World”,然后点击 “Submit”按钮提交数据。此时程序将显示处理结果,如图8-7所示: 图8-7 显示

12、结果 常用的 Struts2.0标签介绍 描述:执行基本的条件流转。 参数: test:是必需的,类型为Boolean,用于决定标签里内容是否显示 的表达式,注意else标签没有这个参数。 id:不是必需的,类型为Object/String,用来标识元素的id。在UI 和表单中为HTML的id属性。 1非UI标签 (1)if、elseif和else 简单示例代码:Maxs file here Scotts file hereOthers file here 描述:用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator)。 参数: status:不

13、是必需的,类型为String。如果设置此参数,一个 IteratorStatus的实例将会压入每个遍历的堆栈。 value:不是必需的,类型为Object/String。用于要遍历的可枚举的( iteratable)数据源,或者将放入新列表(List)的对象。 id:不是必需的,类型为Object/String。用来标识元素的id。在UI和 表单中为HTML的id属性。 (2)iterator 简单示例代码: / list.add(“Max”); request.setAttribute(“names“,list); /描述:加载资源包到值堆栈。它可以允许text标签访问任何资源包的信息, 而

14、不只当前action相关联的资源包。 参数: value:是必需的,类型为Object/String,表示资源包的类路径。 Id:不是必需的,类型为Object/String,用来标识元素的id。(3)i18n 简单示例代码:描述:包含一个servlet的输出(servlet或jsp的页面)。 参数: value:是必需的,类型为String,用于要包含的jsp或servlet。 id:不是必需的,类型为Object/String,用来标识元素的id。(4)include 简单示例代码:Interator PageMaxi18n描述:为其他标签提供参数,比如include标签和bean标签。参

15、数的name 属性是可选的 。 参数: name:不是必需的,String类型,表示参数名。 value:不是必需的,String类型,表示value表达式。 id:不是必需的,Object/String类型,用来标识元素的id。(5)param 提供value有两种方式,通过value属性或者标签中间的text,不同之处 我们看一下例子: blue (A)中参数值会以String的格式放入statck. (B)该值会以java.lang.Object的格式放入statck. 描述:set标签赋予变量一个特定范围内的值。当希望给一个变量赋一个 复杂的表达式,每次访问该变量而不是复杂的表达式时使

16、用。其在两种 情况下非常有用:复杂的表达式很耗时(性能提升)或者很难理解(代码可 读性提高)。 参数: name:是必需的,类型为String,表示变量名字。 scope:不是必需的,类型为String,表示变量作用域,可以为 application、session、request、page或action。 value:不是必需的,类型为Object/String,代表将会赋给变量的值 。 id:不是必需的,类型为Object/String,用来标识元素的id。 (6)set 描述:支持国际化信息的标签。国际化信息必须放在一个和当前action同 名的resource bundle中,如果没有找到相应message,tag body将被当作默 认message,如果没有tag body,message的name会被作为默认message。 参数: name:是必需的,类

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号