我有一个电子邮件实用程序类,由我的所有Intranet Web应用程序共享,该应用程序通过电子邮件向员工发送他们忘记的密码(将该类复制到每个webapp中)。我需要使用适当的主题行,回复联系人,应用程序名称等来标记与调用它的应用程序匹配的电子邮件。
我可以将这些作为参数传递,但我这样做的方法是在登录网页的标题中加入initialize.jsp
。
<% request.setAttribute("siteEmail", "Commitment@<domain>.com");
request.setAttribute("siteName", "Commitment Report Database");
request.setAttribute("sitePOCEmail", "smith@<domain>.com");
%>
然后,这些请求参数由Struts类似的Action
存储到DTO中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,构建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
的方法签名以传递“ac”。这是最好的方法,还是我错过了这张照片?
答案 0 :(得分: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,您可以在webapp中的每个位置读取设置,如果需要,还可以在web.xml中保存配置,例如在Tomcat的context.xml或Jetty的jetty-env.xml中(尽管格式为不同)。