<% @page pageEncoding = "UTF-8" %> игнорируется при включении из другого 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"%>
также игнорируется?
Спасибо
Ответы
Ответ 1
Вам не нужно указывать директиву @page
в каждом включенном JSP файле. Строго говоря, они не JSP, они являются текстовыми файлами, включенными в JSP. @include
эквивалентно вырезанию и вставке текста с вашей включенной страницы прямо в ваш основной JSP. Он похож на директиву #include
в C.
Попробуйте поместить <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
в качестве самой первой строки вашего основного JSP файла (т.е. того, который включает в себя другие), и не помещайте его нигде.
Надеюсь, что это поможет.
Ответ 2
Настройка Content-Type в заголовке HTTP
Это лучший способ установить Content-Type для отдельной страницы, потому что он самый высокий в списке правил приоритета. Значение HTTP-заголовка для веб-страницы, на которой размещается ваш виджет FeedSweep, можно установить на любом из следующих языков сценариев на стороне сервера:
.NET
Тип содержимого и кодировка задаются в объекте ответа. Чтобы установить кодировку, используйте:
- Response.ContentType = "text/html; charset = UTF-8";
Perl
Выведите правильный заголовок перед любой частью фактической страницы. После последнего заголовка используйте двойной разрыв строки.
- print "Content-Type: text/html; charset = utf-8\n\n";
Python
Используйте то же решение, что и для Perl (за исключением того, что вам не нужна точка с запятой в конце).
- print "Content-Type: text/html; charset = utf-8\n\n"
PHP
Используйте функцию header() перед созданием любого содержимого.
- header ('Content-type: text/html; charset = utf-8');
Сервлеты Java
Используйте метод setContentType в ServletResponse перед тем, как получить любой объект (Stream или Writer), используемый для вывода.
- resource.setContentType( "text/html; charset = utf-8" );
Если вы используете Writer, Servlet автоматически выполняет преобразование из строк Java в выбранную кодировку.
JSP
Используйте директиву страницы:
- <% @page contenttype = "text/html; charset = UTF-8" % >
Выход из out.println() или элементов выражения (<% = object% > ) автоматически преобразуется в выбранную кодировку. Кроме того, сама страница интерпретируется как находящаяся в этой кодировке.
ASP
Тип содержимого и кодировка задаются в объекте ответа. Чтобы установить кодировку, используйте:
- <% Response.Charset = "UTF-8" % >