Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将jsp从Java代码插入到另一个jsp中_Java_Jsp - Fatal编程技术网

如何将jsp从Java代码插入到另一个jsp中

如何将jsp从Java代码插入到另一个jsp中,java,jsp,Java,Jsp,我正在处理遗留代码,所以请不要开始“为什么要这样做”,我知道这是一个糟糕的实现,所以让我们跳过它 在高层,我有一个JSP <html:form action="/myAction" method="POST" onsubmit="beforeSubmit()"> ... <table class="dialog"> <% render.myhtml(out); %> </table> ...

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

在高层,我有一个JSP

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

...
...
java代码中的render.myhtml(out)如下所示(我尝试了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);
...
}
public void myhtml(Writer w)引发IOException{
....
字符串include=“”;
//字符串include=“”;
println(w,包括);
...
}
但是当我打开页面时,我看不到include..源代码显示它正在打印include标记,但没有对其求值:

<table class="dialog">
    ...
    <jsp:include page="/path/test.jsp" />
</table>

...
所以在我看来,这个插入是在对包含项进行评估之后发生的。所以问题是..我能做些什么来实现这一点呢?我曾经考虑过将JSP作为字符串读取并传递它,但这会占用大量内存,所以我想避免这种情况。

myhtml()
中使用

您需要从JSP传入
应用程序
,因为RequestDispatcher是通过

应用程序是一个JSP隐式对象:

编辑

JSP:


我也喜欢@Luiggi的答案,你可以根据你想如何编写代码来选择。

错误的详细解释见

如果要使用
动态包含jsp,只需动态设置要包含的页面名称即可。基本示例:

<table class="dialog">
    <jsp:include page="<%= render.myhtml() %>" />
</table>

传递给
render.myhtml()
方法的writer是HTTP响应的writer。您向该writer写入的所有内容都会按原样进入浏览器

JSP是一种服务器端技术。它是在服务器端编译和执行的。浏览器对JSP包含的内容一无所知。因此,将JSP代码写入HTTP响应编写器是没有意义的


若要执行您想要执行的操作,请参阅。

我正在处理遗留代码,因此请不要开始“为什么要这样做”,我知道这是一个糟糕的实现,所以让我们跳过这一点,很高兴知道您知道这是错误的,但您必须接受它。谢谢Paul,但您能否对RequestDispatcher.include()的使用更具体一点要呈现include以及如何在jsp中检索include?请注意,传递请求和响应就足够了,因为可以使用
request.getServletContext()访问servlet上下文
@JB-是的,观点很好。我将原封不动地展示JSP可用的3个隐式变量,但你说得很对。是的,我也这么想,但问题是render.myhtml()作为“…”表示的内容、字段等要多得多,它还可能包含多个include。@user1994202如果是这种情况的话(你的问题中没有说明)使用
public void myhtml(ServletContext sc, ServletRequest req, ServletResponse res) throws IOException {
....
        RequestDispatcher rd = sc.getRequestDispatcher(myobject.getPage());
        rd.include(req, res);
...
}
<table class="dialog">
    <jsp:include page="<%= render.myhtml() %>" />
</table>
public String myhtml() {
    return "/path/test.jsp";
}