SSH 案例学习总结(二)

来源:互联网 发布:网络摄像头ip地址扫描 编辑:程序博客网 时间:2024/05/21 04:41

在 移动/复制页( MoveOrCopyPageAction )中,主要用到串行化技术( 即深复制 ),将页面进行复制或移动。在同一个调查之间是页面的移动,不同的调查之间是复制页面。串行化是对对象而言,而不是类,将不需要串行化的字段用 transient 声明,需要串行化的类需要实现 Serializable 接口。在移动/复制页面列表界面,列出所有调查以及调查所对的页面,然后每个页面都有“之前”和“之后”的链接,表示放到这个页面之前还是之后。在移动页面时,根据pos的值判断是“之前”还是“之后”,然后重新设置各页面的排序顺序。在复制页面时,由于在不同的调查之间,因此要强行初始化页面上的问题集合,避免懒加载让复制后的页面上没有问题。Serializable deeplyCopy(Serializable src) 方法主要利用对象的输入和输出流将对象进行写操作。复制过后,要注意保持页面和目标调查的关联关系。

在图表输出( ChartOutputAction ) 中,主要通过struts2 整合 JFreeChart ,将回答问题的人数、某个选项选择的人数等统计结果用 饼图、柱状图、折线图等图表样式进行展示。主要运用了 JFreeChart 的渲染效果。在struts2中,这个处理图表输出的方法必须命名为 getChart(),这个方法必须 return chart,在 struts.xml 文件中,<result> 标签的 type 属性必须为 chart,即可将图表输出。

在收集调查( CollectionSurveyAction ) 中,主要运用 poi 技术的 HSSFXxx 格式对数据 进行 excel 展示,第一行显示各问题的标题,下面分别是各问题的答案,最后,先将 HSSFWorkbook 以 ByteArrayOutputStream 流的形式写出,然后以ByteArrayInputStream(baos.toByteArray()) 的形式返回,处理这个过程的方法名为 InputStream getXxx(),在 struts.xml 文件中,<result> 标签的type属性设置为“ stream”,如下:

<result name="success" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="inputName">xxx</param>

        <param name="bufferSize">1024</param>
</result>

在权限管理中( RightAction )中,权限的计算方法在前面已经详细讲过,这里不再赘述。为每个链接的 url 添加权限的过程为:在 CatchUrlInterceptor 拦截器中,得到 ActionProxy 代理对象得到 action的名称和命名空间,得到每个action的url ( 类似于 SurveyAction_newSurvey 这种样式),为没有赋权的url追加权限。这里只是将权限赋给了各个action的url。

在角色管理( RoleAction )中,主要负责将 权限赋给角色,这里面维护了角色所拥有的权限的id数组以及角色没有的权限的集合。主要运用了sql语句的 in 和 not in 查询角色拥有和没有的权限,然后调用角色的setRights 方法,为角色赋权。

在用户赋权( UserAuthorizeAction )中,主要负责将角色赋给用户,这里主要维护用户拥有的角色的id数组和用户没有的角色的集合。主要运用了sql语句的 in 和 not in 查询用户拥有和没有的角色,然后调用用户的setRoles 方法,为用户赋予角色。

在日志管理( LogAction )中,利用 aop 的环绕通知机制,新建了一个Logger类,这个类是个切面,负责为需要加日志的方法执行前后都加上日志记录,考虑到日志的记录非常多,因此又引入了分表的技术,将每个月的日志记录分别对应到不同月的日志表中。这里利用了spring的任务调度机制,创建石英任务,定时生成日志表。我对这一点还不太了解,因此还要去进一步学习里面的技术,有兴趣的同学可以自己去看。

------------------------------

这是我做的第一个ssh框架整合的案例,虽然勉强敲完了大部分代码,但是有很多地方都没能真正的理解,比如用到的调度机制,还有页面的处理技巧、各种控件的命名技巧、页面和后台action 之间的数据传递等,我都还比较模糊,这次只是大致的了解了ssh框架的强大功能,包括struts2的拦截器机制、hibernate的懒加载处理机制、spring的监听器机制,都还要深入的去了解和掌握,我以前只是系统的学了这些框架的大致用法,真正做一个整合案例的时候,感到无从下手,这次也进一步加深了对sql语句查询的认识,接触到了子查询、聚合查询、外链、查询排序、用现有的表去创建其他字段相同的表(like 关键字)等sql语句的用法,也总结了不少有用的知识,希望在今后的学习中,能够熟练的去掌握这些技术。比如知道了在struts2的ModelDriven拦截器之前会先执行Prepare拦截器,因此可以在prepareXxx

方法中先加入一些处理的逻辑等。知道了在struts.xml 文件中可以配置上传文件的大小、扩展名、文件类型等参数,能够让modelDriven 刷新栈顶 model( modelDriven.refreshModelBeforeResult 这个属性 ) ,知道了解决懒加载异常可以使用spring 的 openSessionInViewFilter(只要在渲染页面的时候就打开 session),知道了struts2 标签中可以调用后台action中的函数,如 <s:if test="photoExists()"以及错误提示消息的国际化等。还有很多内容等我去深入的学习,开发之路才刚刚开始!

0 0
原创粉丝点击