Java 使用<;jsp:include>;进行servlet调用以返回额外的<;jsp:include>';s、 但是他们';我们没有被渲染
因此,这个问题建议在执行include之前使用servlet进行文件检查: 所以我写了一个servlet来实现这一点。我把它叫做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标记,指向我正在检查的文件。不幸的是,浏览器没有“包括”它。我遇到了一些错误,
<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并尝试一下。(你可能知道我以前从未用过。)非常感谢!