摘要: OGNL介绍OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。OGNL三要素(1).expression求值表达式——首先会被解析成对象树(2).rootobject 根对象——默认的操作对象(3).contextOGNL执行环境——OGNL执行的上下文环境OGNL context是一个Map结构,ognl.OgnlContext类 阅读全文
posted @ 2012-05-20 23:43 心静欣 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 拦截器的查找顺序如果我们在多个地方配置了拦截器,那么框架会按什么样的顺序进行查找呢:(1)首先查找当前Action是否声明了拦截器,如果有则使用这个拦截器,不再继续寻找,如果没有,则执行下一步(2)其次,查找当前Action所在的包中是否声明了默认的拦截器引用,即看元素下有没有元素,如果有就使用它,不再继续寻找。如果没有,则执行下一步(3)最后,递归寻找Action所在包的父包中是否设置了默认拦截器引用,直到找到为止。注:这里的三步是覆盖的关系,即执行了(2),那么(2)(3)就不会执行了。自顶向下的优先级。一般情况下,如果我们没有在strtus.xml中对Action进行拦截器引用配置,但是 阅读全文
posted @ 2012-05-20 01:32 心静欣 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 什么是拦截器(Interceptor)拦截器是struts2框架最重要的特性之一。它可以让你在Action 方法执行前后(Result执行之后)进行一些功能处理。在前面学习Action和学习Result的时候我们就已经开始学习拦截器了,因此现在我们对如何使用它已经不陌生了。在学习Spring的时候我们会接触到一种设计思想,叫做面向切面编程(AOP)。也就是说我们将一些通用的功能组件抽取出来,我们在功能模块中不需要编写这些与逻辑功能无关的代码,然后我们通过某种方式(动态代理)将这些通用组件的功能附加到我们的功能模块上。Struts2中的拦截器就和这种模式差不多,Strtus2框架会将我们在配置文 阅读全文
posted @ 2012-05-19 20:52 心静欣 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 异常映射我们知道在action的execute方法签名中定义了可以抛出任何类型的异常。至于这个异常抛给了谁,那当然是struts2框架了,如果我们没有设置响应的策略,那么struts2也不会对异常进行处理,又直接抛给web容器了。如果我们需要Aaction在发生异常时跳转到指定的提示页面,那么我们当然可以在action中使用try..catch语句来返回不同的结果,但是Struts2为我们提供了更加方便的方式,那就是异常映射。我们只需要在配置文件中进行一些配置,就可以省去action中的try。。catch语句块。配置的方式就是在元素中使用元素,可以指定在动作方法抛出指定异常时要执行那个res 阅读全文
posted @ 2012-05-19 16:42 心静欣 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 大多数情况下我们的用例可以被分成两个部分。一是我们需要改变和查询应用程序的状态,而是需要呈现和更新应用程序的视图。在Struts2中Action管理应用程序的状态,Result Type管理视图。Rsult是什么简单的说Result就是Action方法执行完毕之后返回的一串字符串,他指示出Action执行完之后的下一个页面在哪里,具体页面的位置是我们在struts.xml中配置的,就是子元素,例如我们在前面UserAction中配置的Result: /input.jsp success.jspAction执行完之后返回的字符串就是雨上面result元素的name属性的值相对应。Result . 阅读全文
posted @ 2012-05-19 14:49 心静欣 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 调用非execute方法在前面有关Action的学习中,我们的Action中真正实现业务逻辑的只有execute方法,如果我们每个Action中都只有这么一个方法的话,那么当我们程序中需要的功能很多时,我们就不得不手动编写很多的Action类了,这显然是不合理的。前面我也说道了我们的Action类并不一定非得继承某个类或者实现某个接口,我们可以使用POJO来作为我们的Action,并且我们的Action中也并不一定非得要有execute方法,如果我们使用的不是execute方法,那么我们就需要在配置Action的是时候在action标签上使用method属性来指出我们需要使用的动作方法。那么我 阅读全文
posted @ 2012-05-18 19:30 心静欣 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 前面说道实现Action一般选择继承ActionSupport的方式,因为它提供了一些额外的功能,比如基本的数据验证和访问本地信息。基本数据验证由于ActionSupport类实现了Validateable接口,那么在该动作被触发的时候会在执行动作方法之前先执行validate方法,如果验证没有通过,那么就会返回信息输入结果页面。因此我们只需要在Action中重写validate方法就可以实现数据的验证了。public class HelloWorld extends ActionSupport { private String userName; public String ge... 阅读全文
posted @ 2012-05-17 22:10 心静欣 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 一直用chrome浏览器,没发现问题。今天用ie6,发现文件下载时文件名乱码,ie下迅雷下载文件名也是乱码。网上查了下说在ie下需要使用urlencode编码一下,我试了下header('Content-Disposition: attachment; filename='. rawurlencod... 阅读全文
posted @ 2012-05-17 15:03 心静欣 阅读(344) 评论(0) 推荐(0) 编辑
摘要: Action是什么应用程序可以完成的每一个操作都可以称之为动作。例如,显示一个登录表单是一个动作,将用户信息保存起来也是一个动作。动作类其实就是普通的java类,他们可以有属性和方法,但是需要遵循一些规则:(1)每个属性必须有一个get和一个set方法,属性命名遵循JavaBean命名规则。(2)动作类必须有一个不带任何参数的构造器。如果Action中没有定义构造器,那么编译器会自动增加一个不带参数的构造器,但是如果我们定义了一个构造器,那么我们必须保证要有一个不带参数的构造器(3) 每个动作类至少有一个方法供Struts2在执行该动作时调用。(4) 动作类并不是非得扩展某个特定的父类或是实现 阅读全文
posted @ 2012-05-17 01:25 心静欣 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 前段时间学校的下载站服务器突然挂了,数据全部丢失.....没办法,只得重新做了,原来的系统采用的木翼下载系统,功能倒是挺强大,但是使用起来麻烦的,特别是每次更新了软件都要全站生成一次,生成一次要等上几分钟。这次决定换一个系统,上网查了下,php的专门下载系统还真没几个,最后看了下决定用帝国下载系统。这个系统倒是不用每次都生成静态,用起来挺方便,后台布局也挺直观的。只是,这个模版做起来真不好受....模版全部保存在数据库中,系统自带的模版全是使用table布局,包括一些系统标签生成的html都是使用的table。官方给的资料也少的可怜,基本只有参照自带模版来改,标签支持不够好,万能标签只能在首页 阅读全文
posted @ 2012-05-16 20:15 心静欣 阅读(157) 评论(0) 推荐(0) 编辑