摘要:
Struts 2模拟进度条的原理 对于一些需要较长时间才能完成的任务,在Web开发中,会由HTTP协议会因为超时而断开而面临许多风险,这是在桌面开发不曾遇到的。Struts 2提供的execAndWait拦截器就是为了处理和应付这种情况而设计的。注意,该拦截器不在"defaultStack"中,所以必须在使用它的动作里声明它,并且必须放在拦截器栈的最后一个。 使用了该拦截器后,动作依然正常执行,只是该拦截器会分配一个后台线程处理动作的运行,并在动作完成之前把用户带到一个"等待"页面。,该页面每隔一段时间刷新一次,直到那个后台线程执行完毕为止。如果用户随后 阅读全文
摘要:
Struts 2标签库里的debug标签以及Struts 2提供的Debugging拦截器大大简化了Web应用程序的调试工作,Profiling拦截器可以分析应用程序中的性能瓶颈。使用debug标签获取调试信息debug标签的用途是显示ValueStack栈和其他对象的内容,它非常易用,只需要在需要调试的页面插入如下语句:<s:debug></s:debug>示例:index.jsp<body> <s:debug></s:debug></body>在浏览器中输入:http://localhost:8081/DebugAnd 阅读全文
摘要:
用户重复提交表单在某些场合将会造成非常严重的后果。例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次。因此,重复提交表单会对你的系统带来逻辑影响,必须采取一些措施防止这类情况的发生。 用户重复提交同一个HTML表单的原因有: 一、快速多次点击了提交按钮;二、提交表单后按下浏览器的刷新按钮。设置Struts 2的预防表单重复提交的功能 Struts 2已经内置了能够防止用户重复提交同一个HTML表单的功能。它的工作原理:让服务器生成一个唯一标记,并在服务器和表单里各保存一份这个标记的副本。此后,在用... 阅读全文
摘要:
安全性是Web应用程序开发工作中最关键的问题之一。在基于servlet的应用程序里,保护应用程序资源的办法有两种:一是对应用程序进行配置(web.xml),二是使用Java代码硬编码到程序中。前一种方法使用配置文件,该方法很灵活,这是因为通过使用配置文件,无需改写任何代码就可以改变安全策略,是一种常见的手段。而Struts 2是基于servlet技术的,所以Struts 2的安全策略也可以使用配置文件进行灵活的配置 配置安全策略时,有两个概念需要清楚的区分 ,用户和角色,简单的说用户为使用计算机的人,可以是个人或组织。角色是一个抽象的概念,泛指职务或者权限。例如,张三,李四,王五三个人... 阅读全文
摘要:
要配置Struts 2,首先先要有Struts 2的Jar包,可以去Struts的官网下载(http://struts.apache.org/),这里有3个GA版本可以选择下载,我选择的是最新的2.2.3.1版本。若你的硬盘空间比较大,建议下载struts-2.2.3.1-all.zip版本的,因为里面包含了Struts 2给我们的示例(非常有用)和许多文档。下载struts-2.2.3.1-all.zip完毕后,将其解压到一个文件夹下,解压后的样子:apps文件夹下,有struts 2提供给我们的示例,可以直接运行,在这些示例里面有大量我们需要的配置信息(特别对配置信息不熟悉的朋友)。doc 阅读全文
摘要:
从服务器发送一个文件到浏览器需要以下几个步骤把HTTP响应里的ContentType标头设置为被下载文件的内容类型。ContentType标头的作用是表明数据包里的数据是什么类型,它由一个多媒体类型和一个子类型标识符组成(可以去http://www.iana.org/assignments/media-types/index.html 处查看所有标准内容类型)。若你不愿意查看内容类型,或者是你想让浏览器总是提示一个文件下载对话框,则只需要把它设置为Application/Octet-stream(不区分大小写)。在HTTP响应里增加一个名为 Content-Disposition的标头并把它设 阅读全文
摘要:
使用HTML表单上传文件的准备工作HTML表单默认值:<form action="" enctype="application/x-www-form-urlencoded" method="get"> ...</form>要使用HTML表单上传文件,需要将HTML表单的enctype属性设置为"multipart/form-data",还需要将表单的method属性设置为"post"<form action="" enctype="mu 阅读全文
摘要:
什么是Struts2拦截器? 从软件构架上来说,拦截器是实现了面向方面编程的组件。它将影响了多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现功能的高度内聚,确保了业务对象的整洁和纯度。 从Java代码上来说,它就是一个普度的Java对象,它只需要实现一个名为Interceptor的接口。为什么要使用拦截器? 拦截器消除了动作组件中的横切任务(cross-cutting task)。例如,日志记录是一个典型的横切关注。以前,我们可能需要为每个动作组件准备一些记录日志的代码。虽然这样看上去也没什么错误,但是一个不可以忽视的事实是——这些用于记录日志的代码并不是动作组... 阅读全文