Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Настрройка Tomcat


Автор: NetLord 13.4.2005, 14:20
Здраствуйте!

У меня следующая проблема:
JSP страница отображает файловую структуру моего компьютера и позволяет перемещаться по ней. В качестве параметров ей передаются название файлов , директорий.
И вобщем все нормально если я использую JBuilder со встроенным Tomcat
Но как только я перебрасываю приложение на отдельный Tomcat
появляется проблема с кирилицей .

В упор отказывается воспринимать и обрабатывать кириллицу.
Получаю вместо символов ???
Допустим у меня директория Vingrad а в ней Винград
При обращении к 1-й он ее прекрасно видит причем поддиректорию Винград
понимает нормально видит ее, отображает нормально.
Но как только я обращаюся к Винград получаю исключение FileNоtFoundException
.....Vingrad\???????.

JDK SE используются одинаковые в обоих случаях.

Автор: batigoal 13.4.2005, 14:27
Кодировка страницы прописана?

Автор: NetLord 13.4.2005, 14:34
Да с кодировкой страницы все ОК.

Автор: Guest 18.4.2005, 09:40
Здесь важна не кодировка страницы, а кодировка request: request.setCharacterEncoding("Cp1251");
Этот вызов должен быть произведен до вызова getParameter().
В книге "Самоучитель Java 2.0" (автора не помню) это рекомендуется делать в фильтре.
Я пробовал - не получается.
Способы обхода проблемы:
1. Получить параметр в виде byte[] и перекодировать вручную
2. Передавать не имя файла, а его номер в каталоге
3. Перекодировать имя файла вручную (например используя транслит)

Автор: NetLord 18.4.2005, 14:16
Спасибо, я разобрался.
Воспользовался кодировщиком из пакета apache.commons так как родной URLEncoder
сбоил. Сразу стал понимать кириллицу из параметров request - хотя внешне оба кодировщика выдавали один и тот же результат.
В чем баг не пойму smile

Автор: 3,14 19.4.2005, 14:36
NetLord - а код старый и новый не запостишь?

Автор: NetLord 20.4.2005, 12:03
3,14
NetLord - а код старый и новый не запостишь?

Новый код
Код

<%request.setCharacterEncoding("Cp1251");%>
<%@ page contentType="text/html; charset=windows-1251" %>
<%@ page import="java.io.*,org.apache.commons.codec.net.URLCodec" %>
<html>
<head>
<title>
LIST
</title>
</head>
<body bgcolor="#ffffff">
 <%
URLCodec codec=new URLCodec("Cp1251");
 String directory=request.getParameter("dir");
 File f;
 String audio="C:\\audio";
 if (directory==null)
 directory="";
 directory=new String(directory.getBytes(),"Cp1251");
 audio+=directory+"\\";
 try{
   f=new File(audio);
 File[] files=f.listFiles();
 //url for directory and file
 String url,furl;
 //view directory path
 if(!directory.equals("")){
 String temp=directory.substring(0,directory.lastIndexOf("\\"));
 url=codec.encode(temp);
 %>
 <h1>
<%=directory%>
</h1>
 <A HREF="<%="mediajsp.jsp?dir="+url%>"><img src="image/folder.gif">...</A>
 <%}
for (int j=0;j<files.length;j++){
    if (files[j].isDirectory()==true){
          url=directory+"\\"+files[j].getName();
          url=codec.encode(url); %>
<br><img src="image/folder.gif"><A HREF="<%="mediajsp.jsp?dir="+url%>"><%=files[j].getName()%></A>
          <%}
          else{
            [color=red]url=codec.encode(files[j].getName());
            furl=codec.encode(directory);[/color]
          %>
<br><img src="image/mp.gif"><A HREF="<%="mp?file="+url+"&dir="+furl%>"><%=files[j].getName()%></A>

 <%
 }
 }
 }
 catch(Exception e){}
 %>
</body>
</html>



Отличие старого только в том что в качестве кодека я использовал
класс java.net.URLEncoder вместо org.apache.commons.codec.net.URLCodec

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)