栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JSP以编程方式呈现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSP以编程方式呈现

我需要以编程方式呈现JSP页面。

到底有什么功能要求?您显然在寻找错误方向的解决方案。这是什么,您认为这是解决方案的问题/要求?我们可能会提出更好的建议。

例如,您是否仅需要其 输出 ?如果是这样,那么

java.net.URLConnection
就足够了。

编辑 :您编辑了问题:

我想在编译之前以某种方式更改源JSP(精确地将两个JSP合并在一起),因此我需要一种直接使用JSP编译器从InputStream(或Reader)编译JSP结果的方法。

OK,这是一个 有点 更加清晰。但是您需要什么呢?这些JSP实际代表什么?最终结果应用于什么?

例如,您是否只想将一个JSP包含在另一个JSP中?例如

head.jsp
main.jsp
?中包含a
?如果是这样,那么
<jsp:include>
就足够了。或更糟糕的是,它们是否包含原始Java代码以及您想重用的某些特定代码?如果是这样,那么您应该使用普通的Java类,并在必要时使用taglib。

编辑2 :如您所评论:

但是现在我们需要一种方法来使用这些JSP页面(这些存储在内存中)作为用户请求的所有JSP页面的布局

只需将JSP文件存储在webapp的webcontent内的磁盘文件系统上(

ServletContext#getRealPath()
这里可能会抢救),然后将请求转发到您自己的主JSP文件,其中包括使用以下两个JSP文件:

<jsp:include page="${page1}" /><jsp:include page="${page2}" />

编辑3 :我创建了一个SSCCE来证明其工作原理。

package mypackage;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)        throws ServletException, IOException    {        File root = new File(getServletContext().getRealPath("/"));        String main = "<jsp:include page="${page1}" /><jsp:include page="${page2}" />";        write(main, new File(root, "main.jsp"));        String page1 = "<p>We are in ${data1}";        write(page1, new File(root, "page1.jsp"));        request.setAttribute("page1", "page1.jsp");        request.setAttribute("data1", "first jsp");        String page2 = "<p>We are in ${data2}";        write(page2, new File(root, "page2.jsp"));        request.setAttribute("page2", "page2.jsp");        request.setAttribute("data2", "second jsp");        request.getRequestDispatcher("main.jsp").forward(request, response);    }    private static void write(String content, File file) throws IOException {        BufferedWriter writer = null;        try { writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); writer.write(content);        } finally { if (writer != null) try { writer.close(); } catch (IOException ignore) {}        }    }}

在http:// localhost:8080 / playground /
test
(或您使用的任何主机/上下文名称)上执行它,您将看到

We are in first jspWe are in second jsp

为了提高效率,我将缓存每个资源,并利用它

File#exists()
来检查特定页面是否已保存在磁盘上。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405961.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号