`
jdluojing
  • 浏览: 16530 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论
文章列表
今天写一个登录页面,其中输入用户名和密码的div我使用了margin:0 auto的css来使它居中。结果在chrome和firefox下面显示正常,在ie6下这个margin属性失效。查看了页面和css,没法发现哪里有问题(页面比较简单)。新建一个html,将body体中的代码拷过去,ie中显示正常。看来不是css的问题,经过比对发现不同的地方在DOCTYPE。 将jsp中的doctype修改一下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 修改为: < ...
概述 验证码也是我们在web应用中经常要用到的功能。基本思路就是,我们在服务端动态的生一成张图片,然后将它输出到客户端。图片上包含一些字符信息,我们将这些字符信息事先保存在session中,那么客户端在看到图片之后,将图片上的字符输出到表单中,然后将表单提交。我们接收到表单数据之后,对表单中提交的验证码与session中保存的验证码进行比对,如果相同,那么验证通过。否则,验证失败!采取一些处理。 验证码的主要作用就是用在用户登录上,能有效的防止客户端多次发送登录请求来暴力破解。由于验证码信息是以图片的形式呈现的,因此要想通过程序来识别这些字符还是不太容易的。当然验证码也不是绝对安全的,但是相 ...
概述 有些时候,我们在想某个网页提交了信息之后,由于某些原因,我们会重复点击提交,或者刷新页面,或者是在提交页面呈现之后点击后退按钮,从而导致这些表单数据被重复提交。在大多数情况下我们是不希望这种情况发生的,我们不可能强迫使用者不这么做,那么我们就只能自己想办法来尽量避免这些情况了。 下面我们来看一个例子: public class HelloServlet extends HttpServlet { private int i = 0; @Override protected void doPost(HttpServletRequest req, HttpServletRes ...
前面我们刚刚学完文件上传,那么我们就接着来看和文件上传相对应的文件下载吧。对于文件上传而言,文件下载实现起来要简单的多。通常我们可以直接将一个超链接的地址指向我们想要给用户下载的资源即可。但是如果这些资源是浏览器能够解析的文件类型,比如html文件等,那么浏览器将不会提示用户下载这些文件了,而是会直接在浏览器中打开。这样做还有一个问题,那就是我们的资源文件的地址就直接暴露给用户了,它可以在其他的页面中被轻易的引用,这往往让我们觉得不太安全。那么就需要通过某种手段来告诉浏览器,让它提示用户下载我们的资源文件,并且将这些资源文件的真实地址隐藏起来。 使用Jsp/Servlet实现文件下载 首先我 ...
使用jsp/Servlet实现文件上传 在我们的web应用中,文件上传是一项非常常见的功能。以前我学习php的时候也用php写过文件上传,不过php中实现起来比较方便,只需要从全局变量$_FILES中获取到上传文件的临时存放路径等信息,再把它拷贝到目标地址并重命名就可以了。在Java中要实现文件上传要稍微复杂一点。我们需要通过request的getInputStream方法来获取到相关的输入流,然后在从输入流中读取文件内容,悲剧的就是在输入流中加入了一些信息,比如文件名之类的。所以我们要想从输入流中获取到纯正的文件内容,还需要我们做一些处理。 比如我们有一个文本文件,里面只有一句话:hell ...
概述 国际化(Internationalization),通途的讲,就是让软件实现对多种语言的支持。可以通过简单的设置就可以从一种语言切换到另一种语言。用的最多的地方就是在应用程序的界面表示上。我们经常接触到一些软件,他们支持多种语言,并且可以随用户的切换。比如我们常用的eclipse就是。通常在实现多语言支持时尽量保持亮点: (1)不给软件开发带来过多的额外负担。 (2)实现语言切换或者添加新语言支持不需要修改已经完工的软件(代码) Struts2也提供了对国际化的支持,它的国际化功能建立在Java自带的国际化的基础之上,并且对它做了更好的扩展,使得我们在Struts2中使用国际化功能 ...
自定义验证器 我们已经看到了,只要实现了Validator接口的类都可以作为验证器。我们看一下Validator接口的源码: public interface Validator<T> { void setDefaultMessage(String message); String getDefaultMessage(); String getMessage(Object object); void setMessageKey(String key); String getMessageKey(); void setMessageParamet ...
验证器概述 一个健壮的Web应用程序必须确保用户输入是合法的。比如在注册用户的时候,将用处注册信息保存到数据库之前一般我们会判断用户输入的密码长度是否过短,或者用户的email地址格式是否正确。Strut2提供了一些内建 ...
null引用处理 我们知道,我们在Action中定义属性时并没有对他们进行初始化,那么也就是Struts2在对请求参数进行类型转换时,我们的Action属性可能还是null。那么框架会自动将这些null的属性实例化一个默认的对象(在学习Parameters拦截器时已经看过源代码了): (1)如果我们的属性声明为List(Collection)类型,那么默认会给他实例化一个ArrayList对象 (2)如果我们的属性声明为Map类型,那么默认会给他实例化一个HashMap对象 (3)如果我们的属性是一个简单的JavaBean,并且含有一个没有参数的构造器,那么Struts2会通过Objec ...
类型转换概述 把请求参数映射到动作属性的工作是由Parameters拦截器来负责,它是defaultStack拦截器栈中的医院。我们知道,所有的请求参数都是String类型,但是动作的属性却并不都是String类型,那么肯定需要通过某种方式来实现String类型和其他数据类型之间的转换。前面我刚刚学习了OGNL,我们知道通过OGNL能够在拦截器和视图中操作我们的Action成员属性,我们也知道将请求参数映射到Action属性的工作是由Parameters拦截器来实现,那么我们可以推测Struts2正是通过这二者的结合来完成数据类型的转换的。如果我们查看Struts2的源代码,我们就会发现Str ...
OGNL介绍 OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 OGNL三要素 (1).expression求值表达式——首先会被解析成对象树 (2).rootobject 根对象——默认的操作对象 (3).contextOGNL执行环境——OGNL执行的上下文环境 OGNL context是一个Map结构,ognl.O ...
拦截器的查找顺序 如果我们在多个地方配置了拦截器,那么框架会按什么样的顺序进行查找呢: (1)首先查找当前Action是否声明了拦截器,如果有则使用这个拦截器,不再继续寻找,如果没有,则执行下一步 (2)其次,查找当前Action所在的包中是否声明了默认的拦截器引用,即看<package>元素下有没有<default-intercptor-ref>元素,如果有就使用它,不再继续寻找。如果没有,则执行下一步 (3)最后,递归寻找Action所在包的父包中是否设置了默认拦截器引用,直到找到为止。 注:这里的三步是覆盖的关系,即执行了(2),那么(2)(3)就不会执行 ...
什么是拦截器(Interceptor) 拦截器是struts2框架最重要的特性之一。它可以让你在Action 方法执行前后(Result执行之后)进行一些功能处理。在前面学习Action和学习Result的时候我们就已经开始学习拦截器了,因此现在我们对如何使用它已经不陌生了。 在学习Spring的时候我们会接触到一种设计思想,叫做面向切面编程(AOP)。也就是说我们将一些通用的功能组件抽取出来,我们在功能模块中不需要编写这些与逻辑功能无关的代码,然后我们通过某种方式(动态代理)将这些通用组件的功能附加到我们的功能模块上。Struts2中的拦截器就和这种模式差不多,Strtus2框架会将我们在 ...
异常映射我们知道在action的execute方法签名中定义了可以抛出任何类型的异常。至于这个异常抛给了谁,那当然是struts2框架了,如果我们没有设置响应的策略,那么struts2也不会对异常进行处理,又直接抛给web容器了。 如果我们需要Aaction在发生异常时跳转到指定的提示页面,那么我们当然可以在action中使用try..catch语句来返回不同的结果,但是Struts2为我们提供了更加方便的方式,那就是异常映射。我们只需要在配置文件中进行一些配置,就可以省去action中的try。。catch语句块。配置的方式就是在<action>元素中使用<exceptio ...
大多数情况下我们的用例可以被分成两个部分。一是我们需要改变和查询应用程序的状态,而是需要呈现和更新应用程序的视图。在Struts2中Action管理应用程序的状态,Result Type管理视图。 Rsult是什么 简单的说Result就是Action方法执行完毕之后返回的一串字符串,他指示出Action执行完之后的下一个页面在哪里,具体页面的位置是我们在struts.xml中配置的,就是<result>子元素,例如我们在前面UserAction中配置的Result: <actionname="*User"class="action.User ...
Global site tag (gtag.js) - Google Analytics