У меня есть класс утилиты электронной почты, который используется всеми моими веб-приложениями в интрасети, который отправляет сотруднику по электронной почте забытый пароль (ну, класс копируется в каждое веб-приложение) Мне нужно пометить электронное письмо соответствующей строкой темы, точкой контакта ReplyTo, именем приложения и т. Д., Которое соответствует приложению, которое его вызывает.
Я могу передать их как параметры, но способ, которым я это делаю, - это включить initialize.jsp
в мой заголовок на странице входа в систему.
<% request.setAttribute("siteEmail", "Commitment@<domain>.com");
request.setAttribute("siteName", "Commitment Report Database");
request.setAttribute("sitePOCEmail", "smith@<domain>.com");
%>
Эти параметры запроса затем сохраняются в DTO с помощью действия, аналогичного 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) {
проверяет введенный идентификатор пользователя, запрашивающий пароль, создает сообщение 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. Я бы предположил, что это может войти в мой сервлет, но мой сервлет использует отображение следующим образом:
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
в сервлет и изменить сигнатуру метода, чтобы STKRequestPasswordAction
передавал `ac '. Это лучший подход или я скучаю по картинке?