Параметр веб-приложения Java web.xml в POJO - PullRequest
3 голосов
/ 09 декабря 2010

У меня есть класс утилиты электронной почты, который используется всеми моими веб-приложениями в интрасети, который отправляет сотруднику по электронной почте забытый пароль (ну, класс копируется в каждое веб-приложение) Мне нужно пометить электронное письмо соответствующей строкой темы, точкой контакта 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 '. Это лучший подход или я скучаю по картинке?

1 Ответ

3 голосов
/ 09 декабря 2010

В вашем 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.xml, например в context.xml для Tomcat или jetty-env.xml для Jetty (хотя формат отличается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...