2010-12-08 45 views
3

我有一個電子郵件實用程序類,它是由我的所有內部網Web應用程序共享的,這些應用程序通過電子郵件將員工忘記的密碼(以及該類被複制到每個Web應用程序中)。我需要用適當的主題行,回覆聯繫人,應用程序名稱等來標記與調用它的應用程序相匹配的電子郵件。Java Web應用程序web.xml參數到POJO

我能夠將這些參數作爲參數傳遞,但我的做法是在登錄網頁的頁眉中包含initialize.jsp

<% request.setAttribute("siteEmail", "[email protected]<domain>.com"); 
    request.setAttribute("siteName", "Commitment Report Database"); 
    request.setAttribute("sitePOCEmail", "[email protected]<domain>.com"); 
%> 

這些請求參數然後由一個Struts類似動作

public class STKRequestPasswordAction implements ControllerAction { 
public STKRequestPasswordAction() {} 

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

ApplicationConfig ac = new ApplicationConfig(); 
ac.setAppEmail(request.getAttribute("siteEmail").toString()); 
ac.setAppName(request.getAttribute("siteName").toString()); 
ac.setPocEmail(request.getAttribute("sitePOCEmail").toString()); 
request.setAttribute("ac", ac); 

userForm.requestPassword(LoginUser, ac); 

的userForm.requestPassword方法

public void requestPassword(STKUser loginUser, ApplicationConfig ac) { 

驗證在輸入的用戶ID,請求密碼存儲到DTO,構建StringBuffer消息,然後調用Email Utility類。

EmailUtils.sendEMailByBadge(loginUser.getBadge(), strFrom, strReplyTo, strSubject, emailBody.toString(), strSMTP, true); 

我想修改我的初始化參數了包括JSP,並把它們放到web.xml中,但我不知道在那裏我應該讀值。我在POJO中試過這個

String strFrom = getServletContext().getInitParameter("siteEmail"); 但是在POJO中沒有servletContext。我會想象它可以去在我的servlet,但我的servlet使用的映射如下:

actionMap.put(null, new STKLoginSubmitAction()); 
actionMap.put("chkpass", new STKLoginSubmitAction()); 
actionMap.put("sqlReset", new STKRequestPasswordAction()); 
String op = request.getParameter("method"); 
ControllerAction action = (ControllerAction) actionMap.get(op); 

我打算移動ApplicationConfig ac到servlet,改變方法簽名STKRequestPasswordAction通過'交流」。這是最好的方法還是我錯過了圖片?

回答

3

在你的web.xml:

<env-entry> 
    <env-entry-name>myEntryName</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>myEntryValue</env-entry-value> 
</env-entry> 

在你的Java代碼:

// Do once 
Context env = (Context) new InitialContext().lookup("java:comp/env"); 

// Do for every entry 
String entryValue = (String) env.lookup("myEntryName"); 

使用JNDI,你可以在你的web應用程序的每一個地方閱讀您的設置,並保持你的configs你的網站的.xml(如果需要的話),在Tomcat的context.xml或Jetty的jetty-env.xml中(儘管格式不同)。

+0

謝謝。我不得不刪除返回關鍵字,並用try/catch包圍,但除此之外,它正在工作很大 – jeff 2010-12-09 19:18:46