`
yangzb
  • 浏览: 3502473 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

web开发的瑞士军刀 javawebparts

    博客分类:
  • Java
阅读更多

引言:最近在看一个开源的聊天室AjaxChat 时看到一个被引用的包:javawebparts,处于好奇去看了一下,突然发现这么好的一个常用web组件不去用实在是太可惜了,下面逐一介绍,详细文档大家可以去官方文档看看,最好看它的Demo,很直观。

javawebparts的口号是:不用重新发明轮子 !

header1.gif

对这点我是严重支持啊,在我的身边看到N多所谓的牛人来到项目组作的第一件事就是把以前的项目推倒,重新实现自己的所谓一套先进的东西,靠,你有多先进啊,你的自己"方言"一边自我欣赏,一边还让别人接受,再来一个人又把这个推倒,循环。。。。无语.

所以,用开源吧 ,是不是绕的太远了? :) 让我们言归正传吧.

一。管理你的web配置文件信息

web的配置文件是我们经常要用到的,配置信息我们可以分为两大类,一类是最简单的"平板"型的,比如:

For an XML config file like this:

<!---->< config >
< firstName > Frank </ firstName >
</ config >



The following bean could be used:

<!---->public   class  MyConfigBean {
private   static  String firstName;
public   void  setFirstName(String inFirstName) {
firstName 
=  inFirstName;
}
public  String getFirstName() {
return  firstName;
}
}

在应用中你不用去自己解析xml了,javawebparts已经帮你做好了,你只要getFirstName()就可以了,是不是很方便?

你所要做的工作就是在web.xml中引用一个listener,配置如下:

 

<!---->< context-param >
< param-name > configFile </ param-name >
< param-value > /WEB-INF/app_config.xml <  /param-value ></ context-param >
< context-param >
< param-name > rootElement </ param-name >
< param-value > config </ param-value >   </ context-param >
< context-param >
< param-name > configClass </ param-name >
< param-value > javawebparts.sampleapp. SampleAppConfigBean </ param-value >
</ context-param >
< context-param >
< param-name > AjaxPartsTaglibConfig </ param-name >
< param-value > /WEB-INF/ajax_config.xml </ param-value >
</ context-param >

< listener >
< listener-class > javawebparts.listener. AppConfigContextListener </ listener-class >
</ listener >

 

这种平板型结构的数据这样就已经OK了,还有一种是复杂一点的,有层次结构,比如在Bean中可能还有collection,需要自己实现一下,也 不复杂直接调用apache的Digester就可以了(实际上在javawebparts到处都有Digester的影子),需要了解的请参看 用Digester解析xml到bean

二。缓存页面

比如,我想缓存所有的gif图片,但是jpg的不缓存,web.xml中配置如下:

 

<!---->< filter >
< filter-name > CacheControlFilter </ filter-name >
< filter-class > javawebparts.filter. CacheControlFilter </ filter-class >
< init-param >
< param-name > pathSpec </ param-name >
< param-value > include </ param-value >
</ init-param >
< init-param >
< param-name > pathList </ param-name >
< param-value > */header1.gif, *.jpg </ param-value >
</ init-param >
</ filter >

< filter-mapping >
< filter-name > CacheControlFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

 

它的后台实现机制很简单,内部部分代码如下:

 

<!---->((HttpServletResponse)response).setHeader( " Pragma " " No-cache " );
((HttpServletResponse)response).setHeader(
" Cache-Control " ,
" no-cache,no-store,max-age=0 " );
((HttpServletResponse)response).setDateHeader(
" Expires " 1 );

 

三。图片压缩


是不是对gzip压缩很亲切? 对的,就是传说中可以压缩图片减少网络传输体积的玩意,现在你只要在web.xml中增加以下内容就可以轻松实现了:

 

<!---->< filter >
< filter-name > CompressionFilter </ filter-name >
< filter-class > javawebparts.filter. CompressionFilter </ filter-class >
< init-param >
< param-name > pathSpec </ param-name >
< param-value > include </ param-value >
</ init-param >
< init-param >
< param-name > pathList </ param-name >
< param-value > */bigimage2.gif </  param-value >
</ init-param >
< init-param >
< param-name > compressType </ param-name >
< param-value > gzip_first </ param-value >
</ init-param >
</ filter >

< filter-mapping >
< filter-name > CompressionFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

 

上面的配置表示只对bigimage2.gif的文件进行压缩,其他不用,pathSpec的属性有两种include,exclude,意思已经 很明确了,相反地意思,而pathList得内部实现也是用正则表达式实现的,支持*等用法.这些内部实现你觉得复杂的话就不用管它了,反正人家已经给你 实现好了,你只要说"给我压缩'美女与野兽.JPG'"就可以了

四.控制只在设定的时间范围内访问应用

比如说只允许在工作时间内可以访问应用,其他时间禁止访问,虽然不是很普遍不过这种需求还是有的,如果自己实现还是比较麻烦的,我们用现成的,配置如下:(怎么都是配置阿?对,全部是配置就可以了,难道不好吗?太爽了啊,乖乖龙地动)

 

<!---->< filter >
< filter-name > AppAvailabilityFilter </ filter-name >
< filter-class > javawebparts.filter. AppAvailabilityFilter </ filter-class >
< init-param >
< param-name > pathSpec </ param-name >
< param-value > include </ param-value >
</ init-param >
< init-param >
< param-name > pathList </ param-name >
< param-value > */AAFTestTarget.jsp  </ param-value >
</ init-param >
< init-param >
< param-name > monday </ param-name >
< param-value > 0600-2359 </ param-value >
</ init-param >
< init-param >
< param-name > tuesday </ param-name >
< param-value > 0600-2359 </ param-value >
</ init-param >
< init-param >
< param-name > wednesday </ param-name >
< param-value > 0600-2359 </ param-value >
</ init-param >
< init-param >
< param-name > thursday </ param-name >
< param-value > 0600-2359 </ param-value >
</ init-param >
< init-param >
< param-name > friday </ param-name >
< param-value > 0600-2359 </ param-value >
</ init-param >
< init-param >
< param-name > saturday </ param-name >
< param-value > 0600-2359 </ param-value >
</ init-param >
< init-param >
< param-name > sunday </ param-name >
< param-value > 0600-2359 </ param-value >
</ init-param >
< init-param >
< param-name > redirectTo </ param-name >
< param-value > AAFReject.jsp <  /param-value >
</ init-param >
< init-param >
< param-name > bypassCheckClass <  /param-name >
< param-value > javawebparts.sampleapp. AAFBypassCheck </ param-value >
</ init-param >
</ filter >

< filter-mapping >
< filter-name > AppAvailabilityFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

 

上面的配置很明确了吧,表示在访问AAFTestTarget.jsp 文件的时候必须在设定的时间内,其他则无限制,很清楚了哦.

五。统一重定向

redirect或者forward大家都再熟悉不过了,不过这个是基于配置的,不用你写代码,比如,你希望在访问某个目录的时候自动重订向到其他文件,或者直接转到其他网站比如google.com,配置如下:

 

<!---->< filter >
< filter-name > URLRedirectFilter </ filter-name >
< filter-class > javawebparts.filter.URLRedirectFilter </  filter-class >
< init-param >
< param-name > configFile </ param-name >
< param-value > /WEB-INF/redirect_config.xml  </ param-value >
</ filter >

< filter-mapping >
< filter-name > URLRedirectFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

 

其中redirect_config.xml配置如下:

 

<!---->< config >
< redirect  from ="*/app/redirect_test/*"  to ="http://www.google.com"   />
< forward  from ="*/app/forward/test.htm"  to ="/index.jsp"   />
</ config >

 

很直观吧?凡是访问/app/redirect_test下的所有应用都重订向到google,太简单了,我就不多说了.

 

六.估算每个请求所花费的时间

这个对性能调整是很有好处的,性能的调整的前提是你了解你的系统的瓶颈在什么地方,更具体的说是你的应用哪些地方花费的资源较多,一个是监控sql 的执行情况,这里推荐jdbmonitor,大家可以去看看,另一种就是本文所说的查看每个请求的执行时间,他会告诉你本请求花费了多少秒,很直观了.

配置如下:

 

<!---->< filter >
< filter-name > ElapsedTimeFilter </ filter-name >
< filter-class > javawebparts.filter.ElapsedTimeFilter </  filter-class >
< init-param >
< param-name > pathSpec </ param-name >
< param-value > include </ param-value >
</ init-param >
< init-param >
< param-name > pathList </ param-name >
< param-value > * </ param-value >
</ init-param >
</ filter >

< filter-mapping >
< filter-name > ElapsedTimeFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

 

上面的一个include ,一个pathList的*就代表了所有的应用都过滤,反之,你想暂时取消这个功能就直接把include换成exclude就行了

应用在启动后你直接观察后台日志就可以了,就这么就OK了,还要你做什么呢? 没有.

七.监控session的会话

经常碰到这样的一个情况,用户在登陆系统一段时间后session实效,但是他接着点击里面的连接,结果报异常,因为session里已经取不到数 据了,常常是空指针错误,在每一个页面里都进行这种低级问题的判断是很烦人的,现在我们有新的方式可以一次性解决所有的问题,还是一段简单的配置:

 

<!---->< filter >
< filter-name > SessionInactivityFilter <  /filter-name >
< filter-class > javawebparts.filter. SessionInactivityFilter </ filter-class >
< init-param >
< param-name > forwardTo </ param-name >
< param-value > /login.jsp <  /param-value >
</ init-param >
</ filter >

< filter-mapping >
< filter-name > SessionInactivityFilter <  /filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

 

表示会话失效后直接重定向到登陆界面,让用户重新登陆.

八.控制访问应用的IP

出于安全考虑,过滤某些IP能或不能访问,配置如下:

 

<!---->< filter >
< filter-name > IPAccessControlFilter </ filter-name >
< filter-class > javawebparts.filter. IPAccessControlFilter </ filter-class >
< init-param >
< param-name > pathSpec </ param-name >
< param-value > include </ param-value >
</ init-param >
< init-param >
< param-name > pathList </ param-name >
< param-value > */IACTestTarget.jsp </  param-value >
</ init-param >
< init-param >
< param-name > addressSpec </ param-name >
< param-value > include </ param-value >
</ init-param >
< init-param >
< param-name > addressList </ param-name >
< param-value > localhost </ param-value >
</ init-param >
< init-param >
< param-name > forwardTo </ param-name >
< param-value > /IACReject.jsp </ param-value >   </ init-param >
</ filter >

< filter-mapping >
< filter-name > IPAccessControlFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

 

以上的配置效果就是只允许是从服务器上访问应用的来源(太苛刻了吧? :))

九.随机显示文字

比如每日一语,随机广告,很实用的,配置如下:

 

<!---->< servlet >
< servlet-name > TextReturnerServlet </ servlet-name >
< servlet-class > javawebparts.servlet. TextReturnerServlet </ servlet-class >
< init-param >
< param-name > order </ param-name >
< param-value > random </ param-value >
</ init-param >
< init-param >
< param-name > itemsFile </ param-name >
< param-value > /WEB-INF/text_returner_items.xml  </ param-value >
</ init-param >
</ servlet >

< servlet-mapping >
< servlet-name > TextReturnerServlet </ servlet-name >
< url-
分享到:
评论

相关推荐

    Delphi+Web前端开发教程基于TMS+WEB+Core框架.pdf

    **Delphi Web前端开发教程——基于TMS WEB Core框架** Delphi Web前端开发教程是针对想要使用TMS WEB Core框架创建Web应用程序的开发者,无论你是初学者还是高级开发者,本教程都提供了丰富的学习资源。TMS WEB ...

    ASP.NET Web开发学习实录光盘

    韩啸、王瑞敬、刘健南编著的《ASP.NET Web开发学习实录(附光盘)》重点围绕Web开发,结合精选教学视频,全程推演ASENET 3.5应用开发的整个过程,引导读者深刻理解和掌握以ASP.NET从事Web应用开发所需要的基本知识和...

    Web开发敏捷之道-应用Rails进行敏捷Web开发(第3版).pdf

    《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》:Ruby on Rails是一个全套的MVC web框架,它能帮你开发高质量又美观的web应用,而且开发速度快得出乎你想象。你只须集中精力于应用程序本身,Rails就会帮你...

    python web开发实录源代码

    Python Web开发是现代互联网应用构建的重要技术之一,它利用Python语言的强大功能和丰富的库资源,结合Web框架,如Django、Flask等,快速构建高效、可扩展的Web应用程序。"Python Web开发实录源代码"是针对这一主题...

    Python Web开发,高清PDF文字版,带书签

    《Python Web开发》这本书是为那些想要学习如何使用Python语言构建Web应用的初学者和开发者设计的。Python作为一门易学且功能强大的编程语言,在Web开发领域有着广泛的应用。本书内容详细,涵盖了一系列用于Web开发...

    Flask Web应用开发实战.pdf

    《Flask Web应用开发实战》是一本专注于使用Python的轻量级Web框架Flask进行Web应用开发的专业书籍。Flask以其简洁、灵活的特性,在Python Web开发领域深受开发者喜爱。这本书详细介绍了如何利用Flask构建功能完备的...

    PHP和MySQL Web开发(原书第4版)带书签

    前段时间学习PHP 下了个PHP和MySQL Web开发(原书第4版)高清版,有将近200M,PDF文档不过没有书签,花了一天的时间将书签添加上去了,精确到了三级目录。 我没有权限上传200M的文件,所以放到百度空间了,下载后是...

    Python Web开发实战 董伟明

    因此,我将基于提供的标题《Python Web开发实战 董伟明》生成关于Python Web开发实战的相关知识点。 Python是一门广泛应用于Web开发的高级编程语言,其简洁的语法和强大的社区支持使得Python成为许多开发者构建Web...

    java web开发技术大全1 pdf

    由于Java Web开发技术大全pdf文件太大120多M,上传资源要求在20M以内,所以大家必须要把Java Web开发技术大全.z01,Java Web开发技术大全.z02,Java Web开发技术大全.z03,Java Web开发技术大全.z04,Java Web开发...

    Java web开发技术教程课件—Java Web 开发工具.pdf

    Java web开发技术教程课件—Java Web 开发工具.pdfJava web开发技术教程课件—Java Web 开发工具.pdfJava web开发技术教程课件—Java Web 开发工具.pdfJava web开发技术教程课件—Java Web 开发工具.pdfJava web开发...

    delphi Web 开发 - Web Xone

    Delphi Web 开发是利用Embarcadero Delphi这一强大的集成开发环境(IDE)进行Web应用程序构建的过程。Web Xone是Delphi中的一个框架或工具集,专为开发者提供了构建高性能、可扩展的Web应用程序的能力。它允许程序员...

    Tomcat与Java Web开发技术详解 孙卫琴 源码

    《Tomcat与Java Web开发技术详解(第2版)》结合最新的Tomcat 6版本,详细介绍了开发Java Web应用的各种技术。主要内容包括:Tomcat和Java Web开发的基础知识、Java Web开发的高级技术、在Java Web应用中运用第三方...

    Django Web开发指南.pdf

    Django Web开发指南 电子书 !

    阿里web前端开发手册.pdf

    "阿里web前端开发手册" 阿里web前端开发手册是一份详细的前端开发规范,涵盖了项目命名、目录命名、JS、CSS、SCSS、HTML、PNG 文件命名等多个方面的命名规范。下面是本手册中的一些重要知识点: 1. 命名规范: 在...

    图灵书籍(Python+Web开发:测试驱动方法.pdf+代码)

    本书手把手教你从头开始开发一个真正的Web应用,并且展示使用Python做测试驱动开发(TDD)的优势。你将学到如何在开发应用的每一个部分之前先编写和运行测试,然后再编写最少量的代码让测试通过。也就是说,你将学会...

    Tomcat与Java Web开发技术详解(第2版).pdf

    《Tomcat与Java Web开发技术详解(第2版)》是一本深入探讨Java Web应用程序部署和运行环境的权威指南。本书主要围绕Apache Tomcat服务器展开,涵盖了从基础概念到高级特性的全方位讲解,旨在帮助读者掌握Java Web...

    JAVA web开发技术教程源码-张娜主编

    JAVA web开发技术教程源码 张娜主编 供同学们参考使用。

    大华网络摄像机WEB 二次开发包

    大华网络摄像机的WEB二次开发包是一款专为开发者设计的工具,旨在帮助用户通过Web接口自定义和扩展大华网络摄像机的功能。这个开发包包含两种版本的SDK(Software Development Kit),确保开发者可以根据自己的需求...

    常用web开发工具 SQL数据库文件.zip

    常用web开发工具 SQL数据库文件.zip常用web开发工具 SQL数据库文件.zip常用web开发工具 SQL数据库文件.zip常用web开发工具 SQL数据库文件.zip常用web开发工具 SQL数据库文件.zip常用web开发工具 SQL数据库文件.zip...

    Web前端开发职业技能等级标准.pdf

    标准的核心内容,来源于社会对Web前端开发职业活动质量的要求,是衡量从业者(包括正在接受教育与培训的准从业者)胜任Web前端开发工作的基本尺度和规范,能够反映当下时期内Web前端开发职业教育的人才培养质量规格。

Global site tag (gtag.js) - Google Analytics