【发布时间】:2010-12-08 22:32:22
【问题描述】:
我有一个电子邮件实用程序类,它由我所有的 Intranet Web 应用程序共享,它通过电子邮件向员工发送忘记的密码(该类被复制到每个 Web 应用程序中)。我需要使用与调用它的应用相匹配的适当主题行、回复联系人、应用程序名称等来标记电子邮件。
我可以将这些作为参数传递,但我的方法是在登录网页的标题中包含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 消息,然后调用电子邮件实用程序类。
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”。这是最好的方法还是我错过了图片?
【问题讨论】: