麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java環(huán)境變量定制應(yīng)用部署

2019-11-18 13:12:23
字體:
供稿:網(wǎng)友

  有時,當(dāng)我們編寫J2EE Web應(yīng)用時,我們想要為應(yīng)用部署人員提供一些靈活性。例如,或許你想要提供幾個不同的應(yīng)用版本,每一個版本滿足特定的用戶的需要。或許代碼的有些部分需要主機名稱和端口信息,這些只有在部署時才知道。或許,你只想在如何顯示數(shù)據(jù)方面給應(yīng)用部署人員一些靈活性。
  
  你可以用環(huán)境變量增加這種靈活性。環(huán)境變量是可以在組件的部署描述符文件中定義的參數(shù)。應(yīng)用組件通過JNDI按名稱查找環(huán)境變量,用環(huán)境變量的值定制應(yīng)用的行為或表示。
  所有類型的應(yīng)用組件都可以使用環(huán)境變量。Servlet、企業(yè)Bean、jsp頁面和用戶tag都可以使用環(huán)境變量。環(huán)境變量必須在組件的適當(dāng)部署描述符文件中定義,例如,Web組件在web.xml文件中定義,企業(yè)Bean在ejb-jar.xml文件中定義。
  
  例如,假定你要為電子商務(wù)應(yīng)用編寫一個servlet。這個servlet發(fā)送email給客戶,通知客戶收到了一個訂單。你的servlet需要授權(quán)的SMTP服務(wù)器的主機明、端口、登錄名和口令。作為組件(servlet)開發(fā)者,你不必知道這些信息,只要部署者知道就行了。但是eamil功能要求這些信息,如何向servle提供這些信息呢?
  
  一個方法是使用servlet部署描述符文件(web.xml)中的環(huán)境變量。首先,為主機名、端口、登錄名、口令定義環(huán)境變量。然后,編寫代碼通過JNDI從環(huán)境中得到這些環(huán)境變量的值,在代碼中使用這些環(huán)境變量的值。部署者在部署時利用部署工具為這些環(huán)境變量填上適當(dāng)?shù)闹怠3绦蜻\行時提取部署者設(shè)置的這些值,使用這些值訪問要訪問的服務(wù)器。
  定義環(huán)境變量
  
  用XML在組件的部署描述符文件中定義環(huán)境變量。假如使用部署工具(例如J2EE參考實現(xiàn)所帶的部署工具程序),你就可以用GUI方式確定部署描述符。但是下面我們還是假定用文本編輯器手工編輯部署描述符。
  
  環(huán)境變量有四個部分:
  • 描述: 定義在scription> tag 內(nèi)的一個串。
  • 名稱:定義在<env-entry-name> tag內(nèi)的一個串。
  • 值:定義在<env-entry-value> tag內(nèi)的一個值。
  • 類名:定義在<env-entry-type> tag內(nèi)的環(huán)境變量的類型
  描述是可選的文字描述,出現(xiàn)在部署工具的用戶界面上。它告訴部署者在確定環(huán)境實體引用時做什么。換句話說,它是一個可讀描述,告訴部署者如何填寫其他值。它也告訴部署者這個環(huán)境變量是否是可選的。
  
  環(huán)境變量的名稱是相對于JNDI上下文名“jndi:comp/env”的,組件用名稱查找環(huán)境變量。所有環(huán)境變量都由它們的容器在JNDI上下文中注冊。
  
  環(huán)境變量的值是環(huán)境變量應(yīng)取的值,格式是字符串。除了表示單個字符的類型java.lang.Character以外,答應(yīng)作為環(huán)境變量的所有類型都有以串作為參數(shù)的構(gòu)造函數(shù)。Env-entry-value tag包含了用于值的構(gòu)造函數(shù)的串。
  
  環(huán)境變量的類型是環(huán)境變量值的類型類名。必須是下面的類型之一:
  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主機例子中的環(huán)境變量可以象下面這樣:
  <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>2101</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>
  
  使用環(huán)境變量
  要在代碼中使用環(huán)境變量很簡單,用JNDI查找環(huán)境變量就行了。注重要使方法Context.lookup的結(jié)果與適當(dāng)?shù)念愋拖嗯洹H缦滤荆?br />  
  try {
  InitialContext ic = new InitialContext();
  Context ctx = ic.lookup("java:comp/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) {
  ...
  }
  環(huán)境變量與servlet初始化參數(shù)
  在Web應(yīng)用中,可以用servlet初始化參數(shù)代替環(huán)境變量定制servlet的行為。Servlet開發(fā)者在web.xml中用init-param tag定義servlet初始化參數(shù),在servlet代碼中用方法javax.servlet.GenericServlet.getInitParameter訪問servlet初始化參數(shù)。servlet初始化參數(shù)的使用范圍是定義它的servlet。
  
  那么,對于具體的定制來說,如何在環(huán)境變量和servlet初始化參數(shù)之間做出選擇呢?這個問題的答案依靠于定制的自然范圍。就象全局變量的作用范圍是程序的名稱空間一樣,環(huán)境變量的作用范圍是JNDI名稱空間。這將會導(dǎo)致組件之間的不必要的依靠。當(dāng)定制只影響一個servlet時,servlet初始化參數(shù)是最好的選擇。當(dāng)定制涉及多個組件時,考慮使用環(huán)境變量。
  
  代碼示例
  這個技巧的代碼示例有兩個部分。第一部分是servlet,打印應(yīng)用的所有環(huán)境變量。這個servlet的最后用Context.listBindings方法列出了所有綁定在JNDI上下文java:com/env中的環(huán)境變量。下面的代碼片斷摘選于這個servlet的源代碼:
  public void printEnvEntries(HttpServletRequest req,
  HttpServletResponse res)
  throws IOException, ServletException {
  
  res.setContentType("text/Html");
  PrintWriter out = res.getWriter();
  
  try {
  InitialContext ic = new InitialContext();
  
  NamingEnumeration ne =
  ic.listBindings("java:comp/env");
  
  out.println(
  "<HTML><HEAD><TITLE>Environment Entries</TITLE></HEAD>");
  out.println(
  "<BODY><TABLE BORDER=1><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:com/env中的每個對象迭代,用table的形式打印出每個環(huán)境變量的名稱和文字表示。試一試部署這個應(yīng)用,看一看定義在部署描述符文件中的環(huán)境變量。“運行示例代碼”一節(jié)指導(dǎo)你如何部署應(yīng)用。
  
  這個技巧的代碼示例的第二部分是一個定制tag,DateTag.java。說明了如何利用環(huán)境變量使組件(本例中是定制tag)可以定制。
  
  DataTag是一個簡單的tag,頁面開發(fā)者可以用這個tag打印服務(wù)器的日期和時間。單獨使用時(“<t:date/>” ),它用標(biāo)準(zhǔn)格式打印出日期和時間。假如用tag的格式屬性定義了格式,打印時就使用所定義的格式。(標(biāo)準(zhǔn)類SimpleDateFormat定義了格式語法)。
  
  部署者可以通過符號名用環(huán)境變量定義一列日期/時間格式。假如DateTag的格式屬性值以$開始,那么,這個tag就查找這個屬性命名的環(huán)境變量值的格式。例如,下面的環(huán)境變量就是在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
  20030511-23:05:04EST.
  
  這意味著部署者可以在應(yīng)用的部署描述符文件中定義一列共用日期格式。應(yīng)用

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久精品小短片 | av在线在线| 亚洲第一成人久久网站 | 日韩视频一区二区在线观看 | 主播粉嫩国产在线精品 | 一二区成人影院电影网 | 日韩色视频 | 国产chinesehd精品91 | 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 久久精品视频12 | 午夜视频色 | 午夜视频色 | 色99久久 | 免费黄色在线 | 国产精品午夜未成人免费观看 | 欧美成人免费电影 | 九一国产精品 | 久草在线视频在线 | 欧美性精品videofree | 国产成人高清成人av片在线看 | 91精品国产综合久久男男 | 久久成人激情视频 | 72pao成人国产永久免费视频 | 国产青草网 | 欧美精品一区二区三区久久久 | 免费a级毛片永久免费 | 成人av一区二区免费播放 | 天天草天天爱 | 狠狠色成色综合网 | 失禁高潮抽搐喷水h | fc2成人免费人成在线观看播放 | 日本在线播放一区 | 国产美女一区二区在线观看 | 久草导航 | 国产精品自在线拍 | 蜜桃av网| 久久久久久久久浪潮精品 | 美女久久久久久久久 | 久久精品欧美视频 | 成人在线视频精品 | 成人国产精品色哟哟 |