Java Struts2-如何将JSP页面的结果作为action类中的字符串获取(对于电子邮件)

Java Struts2-如何将JSP页面的结果作为action类中的字符串获取(对于电子邮件),java,html,jsp,struts2,velocity,Java,Html,Jsp,Struts2,Velocity,我想同时完成这两件事 我在Struts2中有一个常规jsp页面。 xx/yy/zz/email.jsp <html> <head> </head> <body> <s:property value="email"/> </body> </html> 现在,我想进行另一个操作,它将xx/yy/zz/myEmail.action页面的结果作为电子邮件发送 public class MyEmailAction

我想同时完成这两件事

我在Struts2中有一个常规jsp页面。 xx/yy/zz/email.jsp

<html>
<head>
</head>
<body>
    <s:property value="email"/>
</body>
</html>
现在,我想进行另一个操作,它将xx/yy/zz/myEmail.action页面的结果作为电子邮件发送

public class MyEmailAction {
    private String email;
    public String execute(){
        this.email = 'abc@xyz.com''
    }

    public String send() {
        this.email = 'abc@xyz.com''
        Map mapping;
        //put this.email into the mapping
        String result = getResultOfJSP('../../../xx/yy/zz/email.jsp', mapping);
        Email.send('me@me.com', 'you@you.com', 'My Subject', result);
    }
    //setter and getter for 'email'
    ......
}
所以问题是:如何将呈现的JSP结果作为字符串获取

我之所以希望这样做,显然是因为我想在一个地方(email.jsp)管理这个模板

我知道我可以使用另一个velocity(vm)页面,该页面的html与jsp完全相同,但可以使用velocity标记。但是,每当我需要对这个模板进行更改时,我必须在两个地方都进行更改

我想我也可以使用URL来获取结果,但我不喜欢使用这种方式,因为这是对服务器的另一个请求


谢谢

我在使用邮件servlet时遇到了这个问题。请使用此命令以字符串形式获取jsp的结果:

HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response) {
private final StringWriter sw = new StringWriter();

@Override
public PrintWriter getWriter() throws IOException {
    return new PrintWriter(sw);
}

@Override
public String toString() {
    return sw.toString();
}
};
request.getRequestDispatcher("email.jsp").include(request,
    responseWrapper);
String result = responseWrapper.toString();
将电子邮件设置为提供html内容:

Email.send('me@me.com', 'you@you.com', 'My Subject', result);

<>这不是你的问题的答案,但是我建议你考虑使用模板引擎来编写你的电子邮件,比如速度或果冻

通过这种方式,您可以将模板组合为HTML或XML,并将逻辑可能检索到的任何相关数据(甚至某些逻辑集成在自己的模板语言中,例如if-then-else或while循环结构)注入其中

在最坏的情况下,呈现完整的JSP完全是必要的,您可以在上面修改一些东西


您可以从MyEmailAction执行此方法,但会向其传递一个被黑客攻击的ServletResponse。这将是由您实现ServletResponse编写的某个类。。。但是通过tearrayoutputstream将结果写入一些
。在页面呈现之后(在您的伪ServletResponse上),您可以从那里检索它(实际上使用servlet容器作为您自己的模板引擎)

实际上,izzipod5的答案看起来是实现我所说内容的完美方法:)
Email.send('me@me.com', 'you@you.com', 'My Subject', result);