2010-12-08 54 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