|
||||||||||||
|
|
| Petstore源码追踪记(3)-商业逻辑处理(一) |
| 时间:22/04/2007 作者:网络 来源:网络 |
| 小提示→点这里把文章加入您的收藏夹,方便下次查看 |
| 设置文章字体大小:[大 中 小] |
|
作者:欧宣修
图文并茂版请参考
Petstore_home(注一)\src\apps\petstore\src\docroot\WEB-INF\web.xml, 我们可以看到: <!-- Encoding Filter Declaration Start --> <filter> //1.第一个Fliter <filter-name>EncodingFilter</filter-name> <display-name>EncodingFilter</display-name> <description>no description</description> <filter-class>com.sun.j2ee.blueprints.encodingfilter.web.EncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- Encoding Filter Declaration End --> <!-- Signon Filter Declaration Start --> <filter> //2.第二个Filter <filter-name>SignOnFilter</filter-name> <display-name>SignOnFilter</display-name> <description>no description</description> <filter-class>com.sun.j2ee.blueprints.signon.web.SignOnFilter</filter-class> </filter> <!-- Signon Filter Declaration End --> <!-- Encoding Filter Mapping Start--> <filter-mapping> //第一个Filter对应 <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Encoding Filter Mapping End --> <!-- Signon Filter Mapping Start--> <filter-mapping> //第二个Filter对应 <filter-name>SignOnFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Signon Filter Mapping End --> <!-- ComponentManager Listener --> <listener> //3.第一个Listerner <listener-class>com.sun.j2ee.blueprints.petstore.controller.web.PetstoreComponentManager</listener-class> </listener> <!-- SignOn Attribute Listener --> <listener> //4.第二个Listerner <listener-class>com.sun.j2ee.blueprints.petstore.controller.web.SignOnNotifier</listener-class> </listener> Filter与Listener是Servlet2.3增加的功能,Filter可以在接受使用者的Request之后,做一些检查处理,若没问题则把使用者要求的Response丢回给使用者,反之则丢回系统预设的处理画面,最常使用的情况就是登入,在网页应用系统中有些功能是必须登入才能使用,过去的做法我们会将登入检查写在这些个别功能上,如此会造成登入检查若要修正,则必须逐支修改,造成时间浪费,运用Filter,我们可将登入检查程序与其它程序独立,日后容易维护。Listener则是增加对Context,Session生命周期的控制,例如我们能够在Session初始化时,将所需使用的资料一起产生,并将Reference存入Session,Seesion关闭时可顺便将相关资源移除,如此资源集中控管,容易维护。 Encoding Filter 它的程序代码位置在 Petstore_home\src\components\encodingfilter\src\com\sun\j2ee\blueprints\encodingfilter\web\EncodingFilter.java ,它会再读取web.xml(位置在Petstore_home\src\apps\petstore\src\docroot\WEB-INF\web.xml)中的参数,决定编码方式再将其设入Request中: web.xml <!-- Encoding Filter Declaration Start --> <filter> <filter-name>EncodingFilter</filter-name> <display-name>EncodingFilter</display-name> <description>no description</description> <filter-class>com.sun.j2ee.blueprints.encodingfilter.web.EncodingFilter </filter-class> <init-param> //设定编码方式参数 <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> EncodingFilter.java public class EncodingFilter implements Filter { private FilterConfig config = null; // default to ASCII private String targetEncoding = "ASCII"; //初始化时读取参数 public void init(FilterConfig config) throws ServletException { this.config = config; this.targetEncoding = config.getInitParameter("encoding"); } public void destroy() { config = null; targetEncoding = null; } //将编码方式参数存入reqeust,结束此Filter public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)srequest; request.setCharacterEncoding(targetEncoding); // move on to the next chain.doFilter(srequest,sresponse); } } 笔者觉得这个Filter满有用的,可以单独运用在传统JSP+JavaBeans的Web Application,在Tomcat3.2.x,预设编码是UTF-8,所以我们处理中文时,必须自行在程序中处理,在存入数据库前须将中文字编码由Unicode转成Big5;到了Tomcat3.3.x,Tomcat会从OS取得预设编码方式,所以我们不必再自行处理;到了Tomcat4.0.x之后,情况又回到与Tomcat3.2.x一样,笔者开发Web Application就碰到这个情况,历经三个版本的Tomcat,程序改过来改过去的,尽做些白工,后来笔者改运用这个Filter,就不需在存入数据库前须将中文字编码由Unicode转成Big5。 ComponentManager Listener 第二个Filter主要掌管登入,与本次主题有密切关系,为使流程顺畅,所以稍后再说明。我们来看第一个Listener,它的主要功能是作为服务连结提供者,当使用者进入本系统时,应用服务器(Application Sever)会在Session产生时会建置储存服务连结容器,并将其置入Session,待后续程序服务产生后使用。 DefaultComponentManager.java,源码在 Petstore_home\src\waf\src\controller\com\sun\j2ee\blueprints\waf\controller\web public void sessionCreated(HttpSessionEvent se) { HttpSession session = se.getSession(); //产生服务连结容器 sl = ServiceLocator.getInstance(); //将本Listener存入Session session.setAttribute(WebKeys.COMPONENT_MANAGER, this); } ServiceLacator.java,源码在 |
|
上一篇:用jb7+weblogic6.1实现客户端+无状态sessionbean+实体bean的调用
下一篇:jsp中javaBean的运用 |
| 【返回】 【顶部】 【关闭】 |
| Copyright © 2005-2010 www.594k.com All Rights Reserved. |
| 版权所有:JAVA学习网
备案序号:皖ICP备06004238号 |