知识大全 Java环境变量定制应用部署

Posted

篇首语:所谓一见钟情不过见色起意,所谓日久生情不过权衡利弊。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java环境变量定制应用部署相关的知识,希望对你有一定的参考价值。

Java环境变量定制应用部署  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  有时 当我们编写J EE Web应用时 我们想要为应用部署人员提供一些灵活性 例如 或许你想要提供几个不同的应用版本 每一个版本满足特定的用户的需要 或许代码的有些部分需要主机名称和端口信息 这些只有在部署时才知道 或许 你只想在如何显示数据方面给应用部署人员一些灵活性     你可以用环境变量增加这种灵活性 环境变量是可以在组件的部署描述符文件中定义的参数 应用组件通过JNDI按名称查找环境变量 用环境变量的值定制应用的行为或表示   所有类型的应用组件都可以使用环境变量 Servlet 企业Bean JSP页面和用户tag都可以使用环境变量 环境变量必须在组件的适当部署描述符文件中定义 例如 Web组件在web xml文件中定义 企业Bean在ejb jar xml文件中定义     例如 假定你要为电子商务应用编写一个servlet 这个servlet发送email给客户 通知客户收到了一个订单 你的servlet需要授权的SMTP服务器的主机明 端口 登录名和口令 作为组件(servlet)开发者 你不必知道这些信息 只要部署者知道就行了 但是eamil功能要求这些信息 如何向servle提供这些信息呢?    一个方法是使用servlet部署描述符文件(web xml)中的环境变量 首先 为主机名 端口 登录名 口令定义环境变量 然后 编写代码通过JNDI从环境中得到这些环境变量的值 在代码中使用这些环境变量的值 部署者在部署时利用部署工具为这些环境变量填上适当的值 程序运行时提取部署者设置的这些值 使用这些值访问要访问的服务器   定义环境变量    用XML在组件的部署描述符文件中定义环境变量 如果使用部署工具(例如J EE参考实现所带的部署工具程序) 你就可以用GUI方式确定部署描述符 但是下面我们还是假定用文本编辑器手工编辑部署描述符      环境变量有四个部分   &# ; 描述 定义在scription> tag 内的一个串   &# ; 名称 定义在<env entry name> tag内的一个串   &# ; 值 定义在<env entry value> tag内的一个值   &# ; 类名 定义在<env entry type> tag内的环境变量的类型  描述是可选的文字描述 出现在部署工具的用户界面上 它告诉部署者在确定环境实体引用时做什么 换句话说 它是一个可读描述 告诉部署者如何填写其他值 它也告诉部署者这个环境变量是否是可选的     环境变量的名称是相对于JNDI上下文名 jndi:p/env 的 组件用名称查找环境变量 所有环境变量都由它们的容器在JNDI上下文中注册     环境变量的值是环境变量应取的值 格式是字符串 除了表示单个字符的类型java lang Character以外 允许作为环境变量的所有类型都有以串作为参数的构造函数 Env entry value tag包含了用于值的构造函数的串     环境变量的类型是环境变量值的类型类名 必须是下面的类型之一   l java lang Boolean  l java lang Byte  l java lang Character  l java lang Double  l java lang Float  l java lang Integer  l java lang Long  l java lang Short  l java lang String    SMTP主机例子中的环境变量可以象下面这样   <env entry>  <description>  Enter the host name for sending email  </description>  <env entry name>SMTP Host Name</env entry name>  <env entry value>  homer springfield ma us  </env entry value>  <env entry type>java lang String</env entry type>  </env entry>    <env entry>  <description>SMTP port number for email  </description>  <env entry name>SMTP Port</env entry name>  <env entry value> </env entry value>  <env entry type>java lang Integer</env entry type>  </env entry>    <env entry>  <description>  User authentication for SMTP server  </description>  <env entry name>SMTP User</env entry name>  <env entry value>bart</env entry value>  <env entry type>java lang String</env entry type>  </env entry>    <env entry>  <description>  Password for SMTP user  </description>  <env entry name>SMTP Password</env entry name>  <env entry value>D oh!</env entry value>  <env entry type>java lang String</env entry type>  </env entry>     使用环境变量  要在代码中使用环境变量很简单 用JNDI查找环境变量就行了 注意要使方法Context lookup的结果与适当的类型相配 如下所示     try   InitialContext ic = new InitialContext();  Context ctx = ic lookup( java:p/env );  String hostname =  (String)(ctx lookup( SMTP Host ));  Integer port = (Integer)(ctx lookup( SMTP Port ));  String user = (String)(ctx lookup( SMTP User ));  String password =  (String)(ctx lookup( SMTP Password ));    sendEmail(  emailText port hostname user password);   catch (NamingException nex)        环境变量与servlet初始化参数  在Web应用中 可以用servlet初始化参数代替环境变量定制servlet的行为 Servlet开发者在web xml中用init param tag定义servlet初始化参数 在servlet代码中用方法javax servlet GenericServlet getInitParameter访问servlet初始化参数 servlet初始化参数的使用范围是定义它的servlet     那么 对于具体的定制来说 如何在环境变量和servlet初始化参数之间做出选择呢?这个问题的答案依赖于定制的自然范围 就象全局变量的作用范围是程序的名称空间一样 环境变量的作用范围是JNDI名称空间 这将会导致组件之间的不必要的依赖 当定制只影响一个servlet时 servlet初始化参数是最好的选择 当定制涉及多个组件时 考虑使用环境变量      代码示例  这个技巧的代码示例有两个部分 第一部分是servlet 打印应用的所有环境变量 这个servlet的最后用Context listBindings方法列出了所有绑定在JNDI上下文java:/env中的环境变量 下面的代码片断摘选于这个servlet的源代码   public void printEnvEntries(HttpServletRequest req   HttpServletResponse res)  throws IOException ServletException     res setContentType( text/ );  PrintWriter out = res getWriter();    try   InitialContext ic = new InitialContext();    NamingEnumeration ne =  ic listBindings( java:p/env );    out println(   <HTML><HEAD><TITLE>Environment Entries</TITLE></HEAD> );  out println(   <BODY><TABLE BORDER= ><TR><TH>Entry</TH> +   <TH>value</TH></TR> );    while (ne hasMore())   Binding ncp = (Binding)ne next();  String objName = ncp getName();  Object objObj = ncp getObject();    out println( <TR><TD> + objName + </TD> );  out print(   <TD> + objObj toString() + </TD></TR> );    out println( </TABLE></BODY></HTML> );     catch (Exception e)   throw new ServletException(e);      这个方法对java:/env中的每个对象迭代 用table的形式打印出每个环境变量的名称和文字表示 试一试部署这个应用 看一看定义在部署描述符文件中的环境变量 运行示例代码 一节指导你如何部署应用     这个技巧的代码示例的第二部分是一个定制tag DateTag java 说明了如何利用环境变量使组件(本例中是定制tag)可以定制     DataTag是一个简单的tag 页面开发者可以用这个tag打印服务器的日期和时间 单独使用时( <t:date/> ) 它用标准格式打印出日期和时间 如果用tag的格式属性定义了格式 打印时就使用所定义的格式 (标准类SimpleDateFormat定义了格式语法)     部署者可以通过符号名用环境变量定义一列日期/时间格式 如果DateTag的格式属性值以$开始 那么 这个tag就查找这个属性命名的环境变量值的格式 例如 下面的环境变量就是在web xml中定义的   <env entry>  <env entry name>LongTimeDateFormat</env entry name>  <env entry value>   Date: EEEE d MMMM yyyy Time: kk:mm:ss z  </env entry value>  <env entry type>java lang String</env entry type>  </env entry>  示例JSP包含了下面的文字   The server date in Obtuse format is  <mytags:date format= $ObtuseTimeDateFormat />     运行时显示的是   The server date in Obtuse format is   : : EST     这意味着部署者可以在应用的部署描述符文件中定义一列共用日期格式 应用 cha138/Article/program/Java/Javascript/201311/25488

相关参考

知识大全 tomcat中部署java项目

  在Tomcat中部署JavaWeb应用程序有两种方式静态部署和动态部署在下文中$CATALINA_HOME指的是Tomcat根目录  一静态部署  静态部署指的是我们在服务器启动之前部署我们的程序

知识大全 关于环境变量

  JAVA_HOME我们可以发现其实这就是我们jdk的安装目录我们设置pathclasspath的时候前边都加了%JAVA_HOME%吧它代表的就是JDk的安装目录其实我们也可以在设置pathcla

知识大全 用shell和java实现自动部署

  公司用到了rackspace的cloudserver做为压力测试的服务器但是一旦启动就开始收费一个小时刀因此要求用的时候打开不用的时候关掉  但是遇到一个问题就是这样的话在上边部署应用程序和软件就

知识大全 jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做

在jsp中经常会遇到把js变量赋给java变量或者将java变量赋给js变量的情况在此将通用的处理方法小结如下java变量传给js好办vara=&#;<%=javaParam%>&

知识大全 如何使用Java网络启动部署软件

如何使用Java网络启动部署软件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java网络启动

知识大全 Java变量的赋值

Java变量的赋值  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  赋值是用等号运算符(=)进行的

知识大全 Java变量类型之间的相互转换

Java进阶:Java变量类型之间的相互转换  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们

知识大全 Java变量的自动递增和递减

Java变量的自动递增和递减  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  和C类似Java提供

知识大全 Java并发编程实践之ThreadLocal变量

Java并发编程实践之ThreadLocal变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java反射访问私有变量和私有方法

Java反射访问私有变量和私有方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  对于软