информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Где водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Впервые опробовал фичу оперы "Fit to window width" - понравилось 26.05.05 18:31  Число просмотров: 2041
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
А если серьезно, то или прибей < pre > или сделай выравнивание вручную примерно на 1024 по ширине (хотя у меня больше)
<programming>
Чуточку опыта по 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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach