如何取得Bean的class的绝对路径

如何取得Bean的class的绝对路径,第1张

由于采用了 Access 数据库,数据库文件的绝对路径是获取数据库连接时的关键参数,而本例中又同时采用了 JSF 框架,JSF 页面调用 JavaBean 中的方法时与普通 JSP 页面不同,要想将 request 对象直接传递到 JavaBean 的相关方法中来获取站点路径是比较麻烦的。前后思索想到一个笨方法,可以直接在获取连接的方法中获得路径,无需从 JSF 页面获取参数。代码如下:

public static Connection getConnection() {

  // 获得当前 JSF 上下文环境

  FacesContext context = FacesContextgetCurrentInstance();

  // 获得 FacesContext 的 Application 对象

  Application application = contextgetApplication();

  // 获得 classes 目录的绝对路径

  URL classesUrl = applicationgetClass()getResource("/");

  // 获得数据库文件的绝对路径

  String dbpath = classesUrltoString() + "//data/blogDatamdb";

  // 截去 URL 前端文件访问协议 file:// 字符串

  dbpath = dbpathsubstring(6);

  String url = "jdbc:odbc:driver={Microsoft Access Driver (mdb)};DBQ="

      + dbpath;

  Connection conn = null;

  try {

    ClassforName("sunjdbcodbcJdbcOdbcDriver");

    conn = DriverManagergetConnection(url, "", "");

  }catch(Exception ex) {

    exprintStackTrace();

  }

  return conn;

}

Struts和JSF/Tapestry都属于表现层框架 这两种分属不同性质的框架 后者是一种事件驱动型的组件模型 而Struts只是单纯的MVC模式框架 老外总是急吼吼说事件驱动型就比MVC模式框架好 何以见得 我们下面进行详细分析比较一下到底是怎么回事?首先事件是指从客户端页面(浏览器)由用户 *** 作触发的事件 Struts使用Action来接受浏览器表单提交的事件 这里使用了Command模式 每个继承Action的子类都必须实现一个方法execute 在Struts中 实际是一个表单Form对应一个Action类(或DispatchAction) 换一句话说 在Struts中实际是一个表单只能对应一个事件 Struts这种事件方式称为application event application event和Component event相比是一种粗粒度的事件 Struts重要的表单对象ActionForm是一种对象 它代表了一种应用 这个对象中至少包含几个字段 这些字段是Jsp页面表单中的input字段 因为一个表单对应一个事件 所以 当我们需要将事件粒度细化到表单中这些字段时 也就是说 一个字段对应一个事件时 单纯使用Struts就不太可能 当然通过结合JavaScript也是可以转弯实现的 而这种情况使用JSF就可以方便实现<h:inputText id= userId value= #{login userId} ><f:valueChangeListener type= logindemo UserLoginChanged /></h:inputText>#{login userId}表示从名为login的JavaBean的getUserId获得的结果 这个功能使用struts也可以实现 name= login property= userId 关键是第二行 这里表示如果userId的值改变并且确定提交后 将触发调用类UserLoginChanged的processValueChanged( )方法 JSF可以为组件提供两种事件 Value Changed和 Action 前者我们已经在上节见识过用处 后者就相当于struts中表单提交Action机制 它的JSF写法如下 <h:mandButton id= login mandName= login ><f:actionListener type= logindemo LoginActionListener /></h:mandButton>从代码可以看出 这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的 而Struts此类事件是原始的一种表单提交Submit触发机制 如果说前者比较语言化(编程语言习惯做法类似Swing编程) 后者是属于WEB化 因为它是来自Html表单 如果你起步是从Perl/PHP开始 反而容易接受Struts这种风格 基本配置 Struts和JSF都是一种框架 JSF必须需要两种包JSF核心包 JSTL包(标签库) 此外 JSF还将使用到Apache项目的一些mons包 这些Apache包只要部署在你的服务器中既可 JSF包下载地址 选择其中Reference Implementation JSTL包下载在 /downloads_taglibs standard cgi所以 从JSF的驱动包组成看 其开源基因也占据很大的比重 JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿 上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了 与Struts的驱动包一样 这些驱动包必须位于Web项目的WEB INF/lib 和Struts一样的是也必须在web xml中有如下配置 <web app><servlet><servlet name>Faces Servlet</servlet name><servlet class>javax faces webapp FacesServlet</servlet class><load on startup> </load on startup></servlet><servlet mapping><servlet name>Faces Servlet</servlet name><url pattern> faces</url pattern></servlet mapping></web app>这里和Struts的web xml配置何其相似 简直一模一样 正如Struts的struts config xml一样 JSF也有类似的faces config xml配置文件 <faces config><navigation rule><from view id>/index jsp</from view id><navigation case><from oute>login</from oute><to view id>/wele jsp</to view id></navigation case></navigation rule><managed bean><managed bean name>user</managed bean name><managed bean class>rejsf UserBean</managed bean class><managed bean scope>session</managed bean scope></managed bean></faces config>在Struts config xml中有ActionForm Action以及Jsp之间的流程关系 在faces config xml中 也有这样的流程 我们具体解释一下Navigation 在index jsp中有一个事件 <h:mandButton label= Login action= login />Action的值必须匹配form oute值 上述Navigation配置表示 如果在index jsp中有一个login事件 那么事件触发后下一个页面将是wele jspJSF有一个独立的事件发生和页面导航的流程安排 这个思路比struts要非常清晰 managed bean类似Struts的ActionForm 正如可以在struts config xml中定义ActionForm的scope一样 这里也定义了managed bean的scope为session 但是如果你只以为JSF的managed bean就这点功能就错了 JSF融入了新的Ioc模式/依赖性注射等技术 Ioc模式 对于Userbean这样一个managed bean 其代码如下 public class UserBean {private String name;private String password;// PROPERTY: namepublic String getName() { return name; }public void setName(String newValue) { name = newValue; }// PROPERTY: passwordpublic String getPassword() { return password; }public void setPassword(String newValue) { password = newValue; }}<managed bean><managed bean name>user</managed bean name><managed bean class>rejsf UserBean</managed bean class><managed bean scope>session</managed bean scope><managed property><property name>name</property name><value>me</value></managed property><managed property><property name>password</property name><value>secret</value></managed property></managed bean>faces config xml这段配置其实是将 me 赋值给name 将secret赋值给password 这是采取Ioc模式中的Setter注射方式 Backing Beans 对于一个web form 我们可以使用一个bean包含其涉及的所有组件 这个bean就称为Backing Bean Backing Bean的优点是 一个单个类可以封装相关一系列功能的数据和逻辑 说白了 就是一个Javabean里包含其他Javabean 互相调用 属于Facade模式或Adapter模式 对于一个Backing Beans来说 其中包含了几个managed bean managed bean一定是有scope的 那么这其中的几个managed beans如何配置它们的scope呢?<managed bean> <managed property><property name>visit</property name><value>#{sessionScope visit}</value></managed property>这里配置了一个Backing Beans中有一个setVisit方法 将这个visit赋值为session中的visit 这样以后在程序中我们只管访问visit对象 从中获取我们希望的数据(如用户登陆注册信息) 而visit是保存在session还是application或request只需要配置既可 UI界面 JSF和Struts一样 除了JavaBeans类之外 还有页面表现元素 都是是使用标签完成的 Struts也提供了struts faces tld标签库向JSF过渡 使用Struts标签库编程复杂页面时 一个最大问题是会大量使用logic标签 这个logic如同if语句 一旦写起来 搞的JSP页面象俄罗斯方块一样 但是使用JSF标签就简洁优美 <jia:navigatorItem name= inbox label= InBox icon= /images/inbox gif action= inbox disabled= #{!authenticationBean inboxAuthorized} />如果authenticationBean中inboxAuthorized返回是假 那么这一行标签就不用显示 多干净利索!先写到这里 我会继续对JSF深入比较下去 如果研究过Jdon框架的人 可能会发现 Jdon框架的jdonframework xml中service配置和managed bean一样都使用了依赖注射 看来对Javabean的依赖注射已经迅速地成为一种新技术象征 如果你还不了解Ioc模式 赶紧补课 lishixinzhi/Article/program/Java/ky/201311/28617

1。在新建的工程中添加jsf框架,将自动生成一webxml文件。内容如下:

<xml version="10" encoding="UTF-8"><web-app xmlns=">

以上就是关于如何取得Bean的class的绝对路径全部的内容,包括:如何取得Bean的class的绝对路径、Java框架研究——JSF与Struts的异同、jsf 的工作原理是怎样的 它有什么知识点 等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10066053.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存