如何将jsp从javacode插入到另一个jsp中

Kla*_*lam 2 java jsp

我正在研究遗留代码,所以请不要开始"你为什么这样做",我知道这是一个糟糕的实现,所以让我们跳过它.

在高层次我有一个JSP

<html:form action="/myAction" method="POST" onsubmit="beforeSubmit()">
...
        <table class="dialog">
            <% render.myhtml(out); %>
        </table>
...
</html>
Run Code Online (Sandbox Code Playgroud)

render.myhtml(out)在java代码中如下(我试过jsp:include和@include:

public void myhtml(Writer w) throws IOException {
....
        String include = "<jsp:include page=" +"\"" +myobject.getPage() +"\"" + " />";
      //String include = "<%@ include file=" +"\"" +myobject.getPage() +"\"" + " %>";
        println(w, include);
...
}
Run Code Online (Sandbox Code Playgroud)

但是当我打开页面时,我看不到包含..源代码显示它正在打印包含标签但没有评估它:

<table class="dialog">
    ...
    <jsp:include page="/path/test.jsp" />
</table>
Run Code Online (Sandbox Code Playgroud)

所以在我看来,这个插入是在包含物被评估之后发生的.所以问题是......我能做些什么来使这个工作?我已经考虑过将JSP作为字符串读取并传递它,但这对内存非常重要,所以我想避免这种情况.

Pau*_*ime 6

使用RequestDispatcher.include()myhtml().

您需要application从JSP 传入,因为RequestDispatcher是通过访问的ServletContext.getRequestDispatcher()

Application是一个JSP隐式对象:http://www.tutorialspoint.com/jsp/jsp_implicit_objects.htm

编辑

JSP:

<html:form action="/myAction" method="POST" onsubmit="beforeSubmit()">
...
        <table class="dialog">
            <% render.myhtml(application, request, response); %>
        </table>
...
</html>
Run Code Online (Sandbox Code Playgroud)

Java的:

public void myhtml(ServletContext sc, ServletRequest req, ServletResponse res) throws IOException {
....
        RequestDispatcher rd = sc.getRequestDispatcher(myobject.getPage());
        rd.include(req, res);
...
}
Run Code Online (Sandbox Code Playgroud)

我也喜欢@Luiggi的答案,你可以根据你想要编写代码的方式做出选择.

  • 请注意,传递请求和响应就足够了,因为可以使用`request.getServletContext()访问servlet上下文. (2认同)