Я недавно обновил большой проект Java AppEngine с Java 7 до Java 8. После этого org.eclipse.jetty.servlet.ServletHandler.updateMappings начал выдавать это исключение:
java.lang.IllegalStateException: такого сервлета нет: jsp
После некоторого исследования кажется, что удаление этого блока кода из web.xml решает эту проблему:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
Однако после удаления страницы не кодируются в формате UTF-8, поэтому символы не в ascii отображаются неправильно.
Я попытался добавитьследующие варианты JSP:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Я также вошел в контроллер и попытался установить там кодировку символов.Конечная точка для обслуживания файла JSP выглядит следующим образом:
@GET
@Path("{subResources: .+}")
public Viewable foo(@Context HttpServletRequest request, @Context HttpServletResponse response) {
...
return new Viewable("/index.jsp", map);
}
Я также пытался создать фильтр и настроить кодирование через него, но это также не имело никакого эффекта.Когда я использую инспектор сети в своем браузере, заголовок Content-Type возвращается как text / html; charset = utf-8 ... только текст неправильный, какПредполагалось, что это будет ascii где-то вдоль цепи.
В проекте используются Guice и Jersey.К сожалению, это очень большой и сложный проект, и я не могу предоставить полный исходный код или меньший проект, который воспроизводит проблему.Другая часть файла web.xml настраивает Guice следующим образом:
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.myproject.GuiceConfig</listener-class>
</listener>
Затем существует Guice JerseyServletModule , который настраивает все дальше, включая блок, подобный этому:
jerseyParams.put("com.sun.jersey.config.property.packages", StringUtils.join(packages, ";"));
jerseyParams.put("com.sun.jersey.api.json.POJOMappingFeature", "true");
jerseyParams.put(ServletContainer.PROPERTY_WEB_PAGE_CONTENT_REGEX, "(/(tportal|images|styles|jsp)/.*|.*html|.*jsp|" +
".*ico|.*png|.*jpg|.*css|.*js|.*txt|.*xml)");
filterRegex("^((?!^\\/(admin|_ah)((\\/\\w+)|\\/?$)).)*$").through(GuiceContainer.class, jerseyParams);
Последнее, что нужно добавить, это то, что некоторые библиотеки, используемые проектом, устарели.В идеале я бы не обновлял то, что вносит критические изменения в более поздние версии, если таковые имеются.Например, используется версия 1.11 джерси и сервера джерси.Я не пробовал обновиться до 1.19.4 , чтобы узнать, есть ли критические изменения или это поможет вообще.
Вот некоторые похожие посты, на которые я ссылался в своих попыткахразрешите это: