将多个HTTP参数从servlet传递到EJB的安全,规范方法是什么?该应用程序是基于Web的SMTP客户端,它采用以下参数:
努力将模型(EJB
)与视图(JSP
)和控制器(servlet
),我想避免将 HttpServletRequest
直接传递给 EJB
。
Session
变量吗?代码:
public String send_message(HttpServletRequest request) {
try {
Properties properties = System.getProperties();
properties.put("mail.smtp.host", SMTP_HOST);
Session session = Session.getInstance(properties, null);
String from = request.getParameter("from");
String to = request.getParameter("to");
String cc = request.getParameter("cc");
String bcc = request.getParameter("bcc");
String subject = request.getParameter("subject");
String body = request.getParameter("body");
MimeMessage message = new MimeMessage(session);
Address sender = new InternetAddress(from);
message.setFrom(sender);
Address[] toAddresses = InternetAddress.parse(to);
message.setRecipients(Message.RecipientType.TO, toAddresses);
Address[] ccAddresses = InternetAddress.parse(cc);
message.setRecipients(Message.RecipientType.CC, ccAddresses);
Address[] bccAddresses = InternetAddress.parse(bcc);
message.setRecipients(Message.RecipientType.BCC, bccAddresses);
message.setSubject(subject);
message.setText(body);
Transport.send(message);
return "Your message was sent successfully!";
} catch (AddressException AE){
return "Oops! There was an error parsing the addresses!";
} catch (SendFailedException SFE){
return "Oops! There was an error sending the message!";
} catch (MessagingException ME){
return "Oops! There was an error sending the message!";
}
}
答案 0 :(得分:3)
我想避免将HttpServletRequest直接传递给EJB。
非常好。 HttpServletRequest属于Web层,不应传递给业务层。
我应该使用Session变量吗?
出于同样的原因,这不是一个好主意。 Session也属于servlet层。此外,在精心设计的应用程序中,它可能根本不可能; Web组件依赖于EJB组件,而不是相反。在EJB中使用会话意味着扭转这种关系。
我应该传递6个参数吗?要传递6个参数,我必须在控制层中执行业务逻辑。
六个参数非常接近“很多”,如果还没有的话。就个人而言,我认为这种情况值得引入一个包含这些值的新参数对象(a.k.a。值对象,a.k.a。传输对象)。特别是当你编写一个新代码时,设计一个有6个参数来定义相同概念的方法是一种罪恶 - 邮件。多参数方法难以阅读,并且容易出现“破窗效应” - 鼓励在需要扩展时添加另一个参数。
要传递6个参数,我必须在控制层中执行业务逻辑。
将其视为将一种表示适应另一种表示 - 这不是业务逻辑。 BL是你的需求直接影响的,你在这里做的只是架构。