将Java Web应用程序的web.xml参数转换为POJO

我有一个电子邮件实用程序类,该类由我的所有Intranet Web应用程序共享,该类通过电子邮件将其忘记的密码发送给员工(该类已复制到每个Webapp中).我需要给电子邮件加上适当的主题行,ReplyTo联系人点,应用程序名称等,以匹配正在调用它的应用程序.

我可以将这些参数作为参数传递,但我的方法是在登录网页的标头中包含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) {

验证输入的请求密码的userID,生成StringBuffer消息,然后调用Email Utility类.

EmailUtils.sendEMailByBadge(loginUser.getBadge(), strFrom, strReplyTo, strSubject, emailBody.toString(), strSMTP, true);

我想从包含的jsp中重构我的初始化参数,并将其放入web.xml中,但是我不确定应该在哪里读取这些值.我在POJO中尝试过

字符串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中,例如,对于Tomcat,在context.xml中;对于Jetty,在jetty-env.xml中(尽管格式不同).

上一篇:java-允许Servlet和客户端脚本读取同一文件的最佳方法是什么?


下一篇:(2003, “Can‘t connect to MySQL server on ‘localhost‘ (10061)“)解决