Java 从servlet安全地向EJB传递参数?

Java 从servlet安全地向EJB传递参数?,java,ejb,parameter-passing,Java,Ejb,Parameter Passing,将多个HTTP参数从servlet传递到EJB的安全规范方法是什么?该应用程序是一个基于web的SMTP客户端,它采用以下参数: 从 到 密件抄送 抄送 主题 身体 为了将模型(EJB)与视图(JSP)和控制器(servlet)分开,我想避免将一个HttpServletRequest直接传递给EJB 我应该使用会话变量吗 我应该传递6个参数吗?要传递这6个参数,我必须在控制层中执行业务逻辑 代码: 有什么建议吗? 我希望避免将HttpServletRequest直接传递给EJB 很好。H

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

  • 密件抄送
  • 抄送
  • 主题
  • 身体
为了将模型(
EJB
)与视图(
JSP
)和控制器(
servlet
)分开,我想避免将一个
HttpServletRequest
直接传递给
EJB

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

有什么建议吗? 我希望避免将HttpServletRequest直接传递给EJB

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

我应该使用会话变量吗

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

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

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

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


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

我不想破坏性,但是如果你正在学习JSP,你应该认为这是一个贬低的技术,有利于JSF过渡到现代技术不是一个选择,不幸的是,所以,我应该创建一个POJO来解析HTTPServletRequest?还是应该在servlet中解析HTTPServletRequest?创建一个POJO或一个辅助EJB来解析6个参数似乎也太过分了;如果它很复杂,我可能会创建一个transformer类来实现这一点。我的意思是创建一个POJO将六个参数从servlet传递到EJB,而不是解析它们(请在google上搜索“transfer object”或“value object”EJB设计模式)。
 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!"; 
    }
}