问题 当从另一个jsp包含时,被忽略


我有代码(现在在 github上) 喜欢 :

my.jsp (一个通用的jsp - 我的所有jspS或多或少都遵循这种模式)

<%@ include file="include/top.jsp" %>
<title>THE TITLE</title>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="include/head.jsp" %>
<%@ include file="include/no_menu.jsp" %>
CONTENT
<%@ include file="include/bottom.jsp" %>

其中:

top.jsp:

<%@ page session="false"%>
<%@ include file="tag_libs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

head.jsp:

<link href="${pageContext.request.contextPath}/css/twoColFixLtHdr.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div class="container"><!-- closes in bottom -->
        <div class="header"><!-- closes in menu -->
            <p>
                <a href="home"> <img src="${pageContext.request.contextPath}/images/logo7.jpg"
                    alt="Ted 2012 Logo" name="Ted 2012 Logo" id="Ted_2012_Logo"
                    style="background: display:block; padding: 5px 20px; margin-left: 150px; border-style: solid" /></a>
            </p>
            <hr />

no_menu.jsp:

</div>
<div class="content">

bottom.jsp:

        </div>
        <div class="footer">
            <p>
                blah
            </p>
        </div>
    </div>
</body>
</html>

如你所见 - 或者你可以接受我的话 - 标签正确平衡。我的问题是 - 为什么我不能包括 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

在我的指令 top.jsp 文件 ?相信我它什么都不做。 我应该担心吗? <%@ page session="false"%> 同样被忽略了 ?

谢谢


7905
2017-09-30 14:54


起源

我没有得到你期望的行为和实际行为? - gd1
@ gd1:我希望我的页面在包含时正确显示utf字符 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 在我的top.jsp中排队。我看到的是垃圾(比如 Σελίδα Î±Ï€Î»Î¿Ï Î§Ïήστη)除非我在myjsp.jsp中看到的每个jsp中添加指令 - Mr_and_Mrs_D
当你执行@include时,包含的JSP只是在包含JSP的上下文中解析,就像C语言的#include指令一样,所以你不应该把<%@ page language =“java”contentType =“ text / html; charset = UTF-8“pageEncoding =”UTF-8“%>无处不在,但仅限于my.jsp(主文件)。我不明白为什么你会得到那些奇怪的角色。 - gd1
@ gd1:我 想 在我的所有页面中包含@page指令 - 奇怪的是 当包括在内 什么都不做(垃圾) - 当我把它放在每个jsp工作按预期(没有垃圾)。 <%@ page session =“false”%>似乎在包含时(在 top.jsp) - 那两个有什么区别?如何在所有jspS中包含该指令?我应该用吗? jsp:include ? - Mr_and_Mrs_D


答案:


你不需要把 @page 每个包含的JSP文件中的指令。严格来说,它们不是JSP,而是JSP 文本文件 被包含在JSP中。 @include 相当于将包含页面中的文本剪切并粘贴到主JSP中。它就像是 #include C中的指令

请尽量放 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 作为 最先 你的主JSP文件的行(即包含其他文件的那一行),并且不要把它放在其他任何地方。
希望能帮助到你。


14
2017-09-30 15:58



谢谢 - 在每个jsp我包括 top.jsp  - 你认为添加它就足够了吗? @page 那里 ? - Mr_and_Mrs_D
也许你可以,但它不是很传统,可能会带来未来的问题:如果在包含top.jsp之前加入“topmost.jsp”脚本会发生什么?你必须将“@page”指令从top.jsp移到topmost.jsp ......如果我是你,我会把“@page”指令作为主脚本的第一行。看似自然。 - gd1
嗯 - 我没有“主要剧本” - 也许我做事的方式是错的?我不太了解你 - 我会尝试将指令放在top.jsp中,看看它是否有效(这就是我首先提出的原因) - 它没 但现在我继续从所有文件中删除了BOM - 会让你发布。 - Mr_and_Mrs_D
您的主要脚本是您在问题中提到的第一个脚本my.jsp。请尝试在执行任何其他操作之前将“@page”指令作为my.jsp的第一行:)然后将其移至top.jsp(如果您确实喜欢这样做)并查看更改。 PS:删除BOM是个好主意 - gd1
好吧 - 在myjsp工作 - 问题是我有很多像这样的myjsps - 那些是应用程序中的“页面” - 我希望我可以包括 @page 在 top.jsp 然后所有页面都包含这个指令 - 我认为首先编译器“粘贴”myjsp.jsp中所有包含文件的文本然后编译 - 显然它不是这样?自己尝试一下 - 复制文件并用myreek,中文等替换myjsp中的“CONTENT” @page 只有在top.jsp - 你会得到~ÎÎÎÎÎÎÎÎÎαÎÎÏÏÎÎ`` - 删除BOM没有帮助。 - Mr_and_Mrs_D


在HTTP标头中设置Content-Type

这是为单个页面设置Content-Type的最佳方式,因为它在Precedence Rules列表中最高。托管FeedSweep窗口小部件的网页的HTTP标头值可以使用以下任何一种服务器端脚本语言进行设置:

。净

内容类型和字符集在响应对象上设置。要设置字符集,请使用:

  • Response.ContentType =“text / html; charset = UTF-8”;

Perl的

在实际页面的任何部分之前输出正确的标题。在最后一个标题之后,使用双线换行符。

  • print“Content-Type:text / html; charset = utf-8 \ n \ n”;

蟒蛇

使用与Perl相同的解决方案(除了最后不需要分号)。

  • print“Content-Type:text / html; charset = utf-8 \ n \ n”

PHP

在生成任何内容之前使用header()函数。

  • header('Content-type:text / html; charset = utf-8');

Java Servlets

在获取用于输出的任何对象(Stream或Writer)之前,请在ServletResponse上使用setContentType方法。

  • resource.setContentType(“text / html; charset = utf-8”);

如果使用Writer,Servlet会自动处理从Java字符串到所选编码的转换。

JSP

使用page指令:

  • <%@ page contenttype =“text / html; charset = UTF-8”%>

out.println()或表达式元素(<%= object%>)的输出会自动转换为所选的编码。此外,页面本身被解释为处于此编码状态。

ASP

内容类型和字符集在响应对象上设置。要设置字符集,请使用:

  • <%Response.Charset的= “UTF-8” %>

-2
2017-08-24 15:53