2

将多个 HTTP 参数从 servlet 传递到 EJB 的安全规范方法是什么?该应用程序是一个基于 Web 的 SMTP 客户端,它采用以下参数:

  • 密件抄送
  • 抄送
  • 学科
  • 身体

为了使模型( ) 与视图( ) 和控制器( EJB) 分开,我想避免将 an直接传递给.JSPservlet HttpServletRequest EJB

  • 我应该使用Session变量吗?
  • 我应该传递 6 个参数吗?要传递这 6 个参数,我必须在控制层中执行业务逻辑。

代码:

 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!"; 
    }
}

有什么建议么?

4

1 回答 1

3

我想避免将 HttpServletRequest 直接传递给 EJB。

很好。HttpServletRequest 属于 web 层,永远不应该传递给业务层。

我应该使用 Session 变量吗?

出于同样的原因,这不是一个好主意。Session 也属于 servlet 层。此外,在设计良好的应用程序中,这可能根本不可能;Web 组件依赖于 EJB 组件,而不是相反。在 EJB 中使用 session 将意味着颠倒这种关系。

我应该传递 6 个参数吗?要传递这 6 个参数,我必须在控制层中执行业务逻辑。

六个参数非常接近“很多”,如果不是的话。就个人而言,我认为这种情况值得引入一个新的参数对象(又名值对象,又名传输对象)来保存这些值。尤其是当你编写一个新代码时,设计一个有 6 个参数定义相同概念的方法是一种罪过——邮件。多参数方法难以阅读并且容易出现“破窗效应”——鼓励在需要扩展时添加另一个参数。

要传递这 6 个参数,我必须在控制层中执行业务逻辑。

将其视为将一种表示形式调整为另一种表示形式——这不是业务逻辑。BL 是直接受您的要求影响的,您在这里所做的只是架构。

于 2013-03-03T09:23:49.333 回答