2010-12-08 5 views
3

J'ai une classe d'utilitaire de messagerie partagée par toutes mes applications Web intranet qui envoie un mot de passe oublié à l'employé (la classe est copiée dans chaque application Web). J'ai besoin de marquer l'email avec la ligne d'objet appropriée, le point de contact de ReplyTo, le nom d'application, etc. qui correspond à l'application qui l'appelle.Paramètre Web.xml de l'application Web Java dans POJO

Je suis en mesure de passer ces paramètres, mais la façon dont je le fais est en incluant un initialize.jsp dans mon en-tête sur la page de connexion.

<% request.setAttribute("siteEmail", "[email protected]<domain>.com"); 
    request.setAttribute("siteName", "Commitment Report Database"); 
    request.setAttribute("sitePOCEmail", "[email protected]<domain>.com"); 
%> 

Ces paramètres de requête sont ensuite stockés dans un DTO par une action similaire contrefiches

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); 

La méthode userForm.requestPassword

public void requestPassword(STKUser loginUser, ApplicationConfig ac) { 

valide l'ID utilisateur inputed demander le mot de passe, construit le Message StringBuffer, puis appelle la classe Email Utility.

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

Je voudrais factoriser mes paramètres d'initialisation de la jsp inclus et les mettre dans le web.xml, mais je ne sais pas où je devrais être en train de lire les valeurs. J'ai essayé ceci dans le POJO

String strFrom = getServletContext().getInitParameter("siteEmail"); mais il n'y a aucun servletContext dans le POJO. J'imagine qu'il pourrait aller dans mon servlet mais mon servlet utilise une cartographie comme suit:

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); 

je prévois de passer ApplicationConfig ac au servlet et changer la signature de méthode pour STKRequestPasswordAction passer `ac ». Est-ce la meilleure approche ou est-ce que je rate l'image?

Répondre

3

Dans votre 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> 

Dans votre code Java:

// Do once 
Context env = (Context) new InitialContext().lookup("java:comp/env"); 

// Do for every entry 
String entryValue = (String) env.lookup("myEntryName"); 

En utilisant JNDI, vous pouvez lire vos paramètres partout dans votre webapp et aussi garder vos configs de votre web .xml si vous en avez besoin, dans context.xml pour Tomcat ou jetty-env.xml pour Jetty par exemple (bien que le format soit différent).

+0

merci. J'ai dû supprimer le mot-clé de retour que vous aviez, et entourer avec try/catch, mais à part ça ça fonctionne très bien – jeff

+0

@jeff Oui, il faut essayer/catch block, et merci pour la correction, j'ai enlevé le retour de ma réponse. –

Questions connexes