2017-02-21 61 views
1

Странный сценарий здесь.Установка кодировки по умолчанию для всех jsps в веб-приложении Java

У меня есть веб-приложение Java, которое поддерживает символы UTF-8. То есть они показывают и могут быть введены в приложении

У меня также есть другое приложение, которое обращается к предыдущей, как показано ниже основного фрагмента

final URL urlObject = new URL("someurlyadayada"); 
final URLConnection connection = urlObject.openConnection(); 
... 
.... 
connection.connect(); 
final InputStream is = connection.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is,"UTF8"); 
final OutputStream out = new FileOutputStream(new File(somelocalfile)); 
OutputStreamWriter osw = new OutputStreamWriter(out,"UTF8"); 

int read = 0; 

while ((read = isr.read()) != -1) { 
    osw.write(read); 
    } 
.... 

Когда данная страница просматривается в браузере все делает хорошо UTF-8 символы и все. Но при использовании приведенных выше фрагментов символы повреждены либо возвращаются как ??????? или только неправильные символы.

Что я до сих пор пробовал установить кодировку UTF-8 на записи потока ввода-вывода, а также на объекты запроса и ответа в приложении.

Это частично работает в том, что дано JPS со следующими линиями

Прочтено Прочтено,Прочтено, 
<%=someJavaMethodWhichReturnsTheAboveLineAlso()%> 

В браузере это делает хорошо, как:

Прочтено Прочтено, Прочтено,

Прочтено Прочтено, Прочтено ,

Но использование страницы парсер будет возвращать

оÑÑÐμно ÐÑоÑÑÐμноÑоÑÑÐμно ÐÑоÑÑÐμно

Прочтено Прочтено, Прочтено,

Если установить contentType="text/html;charset=UTF-8" поверх всех моих страниц JSP, он фиксирует обе проблемы, но у меня есть было сказано более высокими взлетами, что обновление 100 JSP для этого невозможно.

У меня также создается впечатление, что это то, что я могу установить один раз и использовать его по умолчанию.

Что лучше всего здесь. Я имею два мнения об установке контента в JSP. Не уверен, что это неправильно, или мы ошибаемся, чтобы никогда не сделать это в первую очередь.

У меня был хороший взгляд вокруг решений и имел смешанный успех

ответ

0

Вы можете настроить кодировку по умолчанию для всех символов JSPs на файл web.xml, таким образом это делается во всем мире

<jsp-config> 
    <jsp-property-group id="defaultUtf8Encoder"> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
    </jsp-property-group>  
</jsp-config> 

Что вы можете сделать, это создать фильтр, который устанавливает кодировку символов ответа (тип и в конечном счете, содержание), как таковой: (ниже примере делает кодировка символов)

public class CharsetFilter 
    implements Filter { 

    String encoding = "UTF-8"; 

    public void destroy() { 
    /* Do nothing */ 
    } 

    public void doFilter(ServletRequest request, 
     ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 

    response.setCharacterEncoding(encoding); 
    chain.doFilter(request, response);   
    } 

    public void init(FilterConfig config) throws ServletException {  
    } 
} 

Затем вы определяете фильтр в сети.xml file

<filter> 
    <filter-name> 
     charsetFilter 
    </filter-name> 
    <filter-class> 
     your.filter.package.CharsetFilter 
    </filter-class>   
</filter>           

<filter-mapping> 
    <filter-name>charsetFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Обратите внимание, что я применяю фильтр к/*, который использует любой ресурс веб-приложения. Это может быть удобно, если вы хотите, чтобы фильтр влияет на каждый веб-ресурс

Будем надеяться, что разбирайтесь вас

+0

Удаляется мой предыдущий комментарий. Это, в дополнение к моим другим изменениям (потоки ввода/вывода, похоже, работают. Я забыл, что добавил код в другом месте, которое пыталось установить тип содержимого. Как только я удалил свой код, он сработал. –