Java web 应用程序 web.xml 参数到 POJO

标签 java jsp servlets

我有一个电子邮件实用程序类,由我的所有 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 消息,然后调用 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”。这是最好的方法还是我错过了图片?

最佳答案

在你的 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 应用程序的每个位置读取您的设置,如果需要,还可以将配置保存在 web.xml 之外,例如在 context.xml 中用于 Tomcat 或 jetty-env.xml 中用于 Jetty(尽管格式是不同)。

关于Java web 应用程序 web.xml 参数到 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4393052/

相关文章:

来自 Github 的 ANTLR4 和 C# 目标的 Java 语法

java - 使用 startDate 和 endDate 按月分组

java - 将 SQL 结果转换为超链接(Java Servlet)

java Servlet代理不下载某些pdf文件

java - 当用户访问网站时以编程方式编译java类

java - 如何返回具有两位小数的 double ?

java - 带有 HTMLUnitDriver 的 Selenium 3.0.x

javascript - 如何在javascript中禁用bootstrap duallistbox

javascript - 如何将 &lt;script&gt; 中的数组从 JSP 页面传递到 Servlet

html - 如何在html中显示彩色线条?