информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медЗа кого нас держат?Страшный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный взлом GoDaddy 
 Просроченный сертификат ломает... 
 Phrack #70/0x46 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Чуточку опыта по jsp 26.05.05 16:51  Число просмотров: 4297
Автор: 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);
<programming> Поиск 








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


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