Java SpringMVC:JSP模板在执行后获取文本

Java SpringMVC:JSP模板在执行后获取文本,java,spring,jsp,spring-mvc,templates,Java,Spring,Jsp,Spring Mvc,Templates,我需要进行一个特定的服务调用,并且需要传递一个字符串对象作为一个HTML参数。此HTML将由该服务呈现(此服务发送电子邮件,此HTML将作为电子邮件正文) 到目前为止,我一直在使用JSP文件进行所有模板制作。所有呈现HTML页面并将其返回给用户的视图 我不知道如何执行JSP文件,填写所有信息,然后将其转换为文本。这是我第一次使用SpringMVC 编辑: 这里的相关问题在'09'已经过时了我将重点讨论将jsp转换为文本的部分。 有一些关于使用jsp作为模板引擎的评论,但我的建议是模板不可知论 其

我需要进行一个特定的服务调用,并且需要传递一个字符串对象作为一个HTML参数。此HTML将由该服务呈现(此服务发送电子邮件,此HTML将作为电子邮件正文)

到目前为止,我一直在使用JSP文件进行所有模板制作。所有呈现HTML页面并将其返回给用户的视图

我不知道如何执行JSP文件,填写所有信息,然后将其转换为文本。这是我第一次使用SpringMVC

编辑:
这里的相关问题在'09'已经过时了

我将重点讨论将jsp转换为文本的部分。
有一些关于使用jsp作为模板引擎的评论,但我的建议是模板不可知论

其想法是模拟浏览器调用,即提交我们希望其结果通过电子邮件发送的表单,并确保我们可以通过浏览器正确访问此页面。
我假设这里的post请求更改很容易获得

public class MailServiceHelper {
    public String getJsp(String url, Map<String,String> form, HttpServletRequest request) {
        //we can figure out the base url from the request
        String baseUrl =""; 
        HttpClient client = new HttpClient();
        PostMethod method = new PostMethod(baseUrl+"/"+url);
        for (String formElement : form.keySet()) {
            method.setParameter(formElement, form.get(formElement));    
        }

        try {

            int statusCode = client.executeMethod(method);
            if (statusCode >= HttpStatus.SC_OK && statusCode < HttpStatus.SC_MULTIPLE_CHOICES) {
                byte[] responseBody = method.getResponseBody();     
                return new String(responseBody,StandardCharsets.UTF_8);
            }else{
                throw new RuntimeException("Failed to read jsp, server returened with status code: "+statusCode);
            }
        } catch (Exception e) {
            throw new RuntimeException("Failed to read jsp",e);
        }finally{
            method.releaseConnection();
        }
    }
公共类MailServiceHelper{
公共字符串getJsp(字符串url、映射表单、HttpServletRequest){
//我们可以从请求中找出基本url
字符串baseUrl=“”;
HttpClient=新的HttpClient();
PostMethod方法=新的PostMethod(baseUrl+“/”+url);
for(字符串formElement:form.keySet()){
setParameter(formElement,form.get(formElement));
}
试一试{
int statusCode=client.executeMethod(方法);
if(statusCode>=HttpStatus.SC\u确定&&statusCode
您可能需要对您的客户端进行身份验证,这也是受支持的。
我在示例中使用的是httpclient 3.1,请参见;切换到较新的客户端应该很容易。

通过电子邮件发送HTML,请参见以下答案:
建议使用内部样式表,以便电子邮件客户端正确呈现html。

您的场景实际上类似于不依赖servlet容器的模板引擎。此外,您使用的堆栈将推送作为首选对象


如果您担心采用新技术,您应该知道已经有一个和一个项目精确地展示了电子邮件模板场景,因此,如果您在控制器中,或者如果您可以访问请求,您可以使用
request.forward()
带有模拟响应,该响应收集写入的输出,当转发返回时,您将获得它并继续处理

final RequestDispatcher rd = request.getRequestDispatcher("myJsp.jsp");
final MockHttpServletResponse r = new MockHttpServletResponse();
rd.forward(request, r);
final String s = r.getContentAsString();


如果JSP需要的参数不在您的请求中,那么您还需要为请求创建一个模拟或过滤器。

可能重复的底线:使用一个更好的模板引擎,它不依赖于servlet容器,有很多。@kryger我读了这个问题,但并不真正理解它。您的意思是说我不能执行吗JSP,然后将其转换为文本?如果我理解这一点,您可以使用Javascript函数在呈现信息后获取HTML内容。有
document.head
获取HTML的head和
document.body
获取HTML的body。您可以创建一个函数,在加载页面时执行。请参阅使用不同的模板库y类似于Thymeleaf,并在处理程序中呈现HTML。