<%@ page pageEncoding =“UTF-8”%>当从另一个jsp包含时被忽略

时间:2012-09-30 14:54:21

标签: jsp encoding include tomcat7 jsp-tags

我有代码(现在在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"%>

由于

2 个答案:

答案 0 :(得分:14)

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

请尝试将<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>作为主JSP文件的第一个行(即包含其他文件的那个),并且不要将其放在其他任何位置。
/> 希望它有所帮助。

答案 1 :(得分:-2)

在HTTP标头中设置Content-Type

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

<强> .NET

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

  • Response.ContentType =&#34; text / html;字符集= UTF-8&#34 ;;

<强>的Perl

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

  • print&#34; Content-Type:text / html;字符集= UTF-8 \ n \ n&#34 ;;

<强>的Python

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

  • print&#34; Content-Type:text / html;字符集= UTF-8 \ n \ n&#34;

<强> PHP

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

  • 标题(&#39;内容类型:text / html; charset = utf-8&#39;);

Java Servlets

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

  • resource.setContentType(&#34; text / html; charset = utf-8&#34;);

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

<强> JSP

使用页面指令:

  • &lt;%@ page contenttype =&#34; text / html;字符集= UTF-8&#34;%GT;

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

<强> ASP

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

  • &LT;%Response.Charset的=&#34; UTF-8&#34;%GT;