【问题标题】:Java web application web.xml parameter into POJOJava Web 应用程序 web.xml 参数转换为 POJO
【发布时间】: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”。这是最好的方法还是我错过了图片?

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我不得不删除您拥有的 return 关键字,并用 try/catch 包围,但除此之外它工作得很好
    • @jeff 是的,它需要 try/catch 块,感谢您的纠正,我从答案中删除了 return。
    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多