информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Чуточку опыта по jsp 26.05.05 16:51  
Автор: PS <PS> Статус: Elderman
Отредактировано 27.05.05 17:02  Количество правок: 1
<"чистая" ссылка>

Пара подводных камней jsp программирования.

1. Кодировка

Самая первая проблема с которой сталкивается русскоязычный jsp программист – это кодировка.
Простейший код
<body>
<%
out.print(“Привет, мир!”);
%>
Еще раз привет!
</body>

На выходе даст нечитабельные символы.
HTML тэг meta – естественно не спасет. Выход формируется java-машиной, которая сама решает как поступать с символами. При этом она законно не обращает внимание на семантику контента, который она генерирует.
Решается проблема просто – директивой page.

<%@ page contentType="text/html;charset=windows-1251" language="java"%>
<body>
<%
out.print(“Привет, мир!”);
%>
Еще раз привет!
</body>

Теперь контент получится в правильной кодировке. Осталось, только, не забыть указать с помощью тэга meta кодировку браузеру.

Примечание: хоть запись cp1251 и windows-1251, по идеи, идентичны, однако из-за различных серверных настроек на некоторых системах могут возникнуть проблемы с одним из вариантов.

2. Получение данных из формы

В jsp есть объект request, с помощью которого можно получить входные параметры:
<form id="FormName" action="a.jsp" method="get" name="FormName">
<input type="text" name="name" size="10">
<input type="submit" name="submitButtonName" value="Submit">
</form>

<%
String name = request.getParameter( “name” );
%>

Все очень просто, до тех пор, пока нам не надо включить в форму
<FORM action="a.jsp" METHOD=post enctype="multipart/form-data">
<input type="file" name="file1">

Что бы загружался именно файл, а не его имя, необходимо установить enctype="multipart/form-data"
После этого мы лишаемся всех преимуществ объекта request. Метод getParameter работать прекращает.
Решение этой проблемы – несколько не тривиально. Для того, что бы получить данные – надо написать свой uploader.
В общем виде делается так:
String header = request.getHeader("Content-Type");
String boundary = "--" + header.substring(header.indexOf("boundary=") + 9 );
Из заголовка HTTP пакета получаем boundary.
После этого получаем все тело request:
StringBuffer data = new StringBuffer();
try
{
ServletInputStream in = request.getInputStream();
BufferedInputStream bf = new BufferedInputStream((InputStream)in);
int bit;
while((bit = bf.read()) != -1)
{
data.append((char)bit);
}
}
catch(java.io.IOException e )
{
}
Далее пробежаться по всем под-телам, находящимся между двух boundary, выделить из каждого под-тела заголовок, узнать тип под-под-тела, выделить его и в зависимости от типа – обработать. Заголовок и под-под-тело отделены друг от друга строкой “\n\n”.

3. Опять кодировка

Допустим у нас есть массив байт (byte[]) и мы точно знаем, что там находится текст на русском языке. Необходимо из массива байтов получить массив символов (char[]).
Если мы напишем char_var[0] = (char)byte_var[0]; то компилятор это пропустит, но корректной работы не дождемся.
Проблема решается просто.
byte[] byte_var = new byte[100];
ByteToCharCp1251 nn = new ByteToCharCp1251();
char[] char_var = nn.convertAll(byte_var);
Впервые опробовал фичу оперы "Fit to window width" - понравилось 26.05.05 18:31  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
А если серьезно, то или прибей < pre > или сделай выравнивание вручную примерно на 1024 по ширине (хотя у меня больше)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach