Java 使用<;jsp:include>;进行servlet调用以返回额外的<;jsp:include>';s、 但是他们';我们没有被渲染

Java 使用<;jsp:include>;进行servlet调用以返回额外的<;jsp:include>';s、 但是他们';我们没有被渲染,java,jsp,servlets,Java,Jsp,Servlets,因此,这个问题建议在执行include之前使用servlet进行文件检查: 所以我写了一个servlet来实现这一点。我把它叫做 <jsp:include page='<%= "/servlet/fileChecker?section=THX&file=1138" &>'></jsp:include> 但是servlet调用的输出包含一个jsp:include标记,指向我正在检查的文件。不幸的是,浏览器没有“包括”它。我遇到了一些错误,

因此,这个问题建议在执行include之前使用servlet进行文件检查:

所以我写了一个servlet来实现这一点。我把它叫做

<jsp:include page='<%= "/servlet/fileChecker?section=THX&file=1138" &>'></jsp:include>

但是servlet调用的输出包含一个jsp:include标记,指向我正在检查的文件。不幸的是,浏览器没有“包括”它。我遇到了一些错误,比如“没有属性‘page’”和“element’jsp:include‘undefined’”——这表明servlet输出不是呈现为Java,而是呈现为HTML

以下是输出:

<p>Text before the servlet call</p>
    <p><h4>From THX1138</h4><jsp:include page='thx/results_1138.jsp'></jsp:include></p>
<p>Text after the servlet call</p>
servlet调用前的文本

来自THX1138

servlet调用后的文本

以下是我的servlet的主要调用:

private String FileChecker(String section, String file) {
    String result = ""; // assume file does not exist

    String pathToCheck = section + "/results_" + file + ".jsp";
    // realPath is defined in the init() method as config.getServletContext().getRealPath("/");
    File fileToCheck = new File(realPath + pathToCheck);
    if (fileToCheck.exists()) {
        result = "<p><h4>" + section + "</h4><jsp:include page='" + pathToCheck + "'></jsp:include></p>";
    }

    return result;
}
专用字符串文件检查器(字符串部分,字符串文件){
String result=“;//假定文件不存在
字符串pathToCheck=section+“/results_“+file+”.jsp”;
//realPath在init()方法中定义为config.getServletContext().getRealPath(“/”);
File fileToCheck=新文件(realPath+pathToCheck);
if(fileToCheck.exists()){
结果=“”+节+”

”; } 返回结果; }

我觉得答案很接近,但我不确定我应该在后面看什么。有什么帮助吗?

不要在响应中写入包含一堆HTML和JSP标记的字符串。这毫无意义。webbrowser不理解JSP标记

调用
RequestDispatcher#include()

request.getRequestDispatcher(checkedJspPath).include(request, response);
并将该HTML移回JSP中



与具体问题无关我知道你指的是我的一个旧答案,但我意识到最好检查
ServletContext#getResource()
是否返回
null
,而不是使用
文件#exists()
。这样,只要WAR没有扩展,它就可以正常工作。

jsp:…
标记不包括在浏览器中,而是在服务器上进行解释。浏览器只理解HTML。你的
文件检查器是什么样子的?它不会那样工作<代码>文件检查器
的输出将不再被解释。能否显示
filechecker
或其相关部分的代码?非主题:停止使用原始servlet。使用struts、tiles、SpringMVC、jsf之类的工具。@DwB:Meh——如果没有理由使用大型ol框架,就不要使用。Servlet很好,只要它们不被滥用,就像其他任何东西一样。无论如何,这个功能都可以包装在一个JSP bsed自定义标记中。谢谢您的回复。我是否可以使用RequestDispatcher,但除了include之外还可以使用其他HTML标记(简单标记)?是的,您可以在
include()
调用之前和之后将其写入响应。然而,这不是最佳做法。HTML不属于servlet。考虑另一个包括包含JSP文件的JSP文件。再次感谢。我将阅读RequestDispatcher并尝试一下。(你可能知道我以前从未用过。)非常感谢!