Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
179
Добавлен:
17.04.2018
Размер:
1.25 Mб
Скачать
      1. Загрузка файлов на сервер

Объект request позволяет легко получить текстовые данные, однако для загрузке файлов, переданных в запросе требуется более сложные способы, обеспечивающий чтение и преобразование двоичных данных. Таких способов известно несколько и все они так или иначе базируются на сторонних библиотеках не являющихся частью ядра Java. Распространенным способом является использование библиотек пакета org.apache.commons.fileupload. Пример кода загрузки файла приведен в листинге 7.

Листинг 7. Загрузка файла в JSP с помощью пакета org.apache.commons.fileupload

<%@page session="true" %>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>

<%@ page import="java.util.*"%>

<%@ page import="org.apache.commons.fileupload.*" %>

<%@ page import="org.apache.commons.fileupload.disk.*" %>

<%@ page import="org.apache.commons.fileupload.servlet.*" %>

<%@ page import="org.apache.commons.io.output.*" %>

<!DOCTYPE html>

<html>

<head>

</head>

<body>

<hr>

<%

//Читаем путь к директории для хранения временных файлов из файла web.xml

ServletContext context = pageContext.getServletContext();

String fileTemp = context.getInitParameter("file-upload");

%>

Путь, где хранятся временные файлы <%= fileTemp%>

<%

File file ;

int maxFileSize = 5000 * 1024;

int maxMemSize = 5000 * 1024;

//Путь куда будут записаны файлы

String filePath = "D:/МИЭТ/Интернет-программирование/TestProjects/languages/Java/WebApp/web/img/";

String webPath = "/";

String contentType = request.getContentType();

out.println("<br>Тип контента:"+contentType);

if ((contentType.indexOf("multipart/form-data") >= 0)) {

DiskFileItemFactory factory = new DiskFileItemFactory();

factory.setSizeThreshold(maxMemSize);

factory.setRepository(new File(fileTemp));

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setSizeMax( maxFileSize );

try{

List fileItems = upload.parseRequest(request);

Iterator i = fileItems.iterator();

while ( i.hasNext () )

{

FileItem fi = (FileItem)i.next();

if ( !fi.isFormField () ) {

String fieldName = fi.getFieldName();

String fileName = fi.getName();

boolean isInMemory = fi.isInMemory();

long sizeInBytes = fi.getSize();

file = new File( filePath + fileName) ;

fi.write( file ) ;

out.println("<br>Путь загрузки: " + filePath + fileName);

out.println("<br>Проверка: <a href='../img/"+fileName+"'>"+fileName + "</a><br>");

}

}

}catch(Exception ex) {

System.out.println(ex);

}

}else{

out.println("<p>Нет файлов для загрузки</p>");

}

%>

Библиотеки org.apache.commons.fileupload и org.apache.commons.io.output загружены в папку soft. Из них нужно подключить к проекту соответствующие jar файлы – см. рис. 13.

Рис. 13. Подключение библиотек к проекту

Путь ко временной директории, как правило это папка tmp веб-сервера. Этот путь можно задать явно в коде, но правильнее описать его в файле web.xml (см. Листинг 8) т. к. в этом случае он становится доступным всем JSP файлам проекта.

Листинг 8. Часть файла web.xml с описанием пути к папке временных файлов

<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

...

<context-param>

<description>Location to store temp uploaded file</description>

<param-name>file-upload</param-name>

<param-value>

C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.27\temp\

</param-value>

</context-param>

</web-app>

Задание на лабораторную работу

  1. Реализовать авторизацию следующим образом

    1. Есть форма авторизации: логин + пароль и есть форма регистрации: логин + пароль

    2. Форма регистрации открывается с помощью ссылки на форме регистрации

    3. Пользователь вводит желаемый логин и пароль на форме регистрации и они сохраняются в файл (см. Приложение 2) на сервере. При этом проверяется, что пользователь с таким логином уже зарегистрирован на сервере и, в случае совпадения, возвращается соответствующее сообщение.

    4. После успешной регистрации пользователь направляется на страницу авторизации (автоматически или по ссылке) на которой вводит логин и пароль. Если логин и пароль — верные, то авторизация пользователя запоминается в ключике браузера, а пользователь направляется на функциональную страницу, которую нужно сделать в соответствии со своим вариантом.

    5. Формы функциональной страницы не должны быть доступны без успешной авторизации.

  2. Реализовать функциональную страницу в соответствии с вариантом, кратным номеру компьютера.

1

Реализовать интерфейс загрузки изображения и его названия на сервер со следующими ограничениями:

1. В названии изображения не должны быть html теги и запрещенные слова: script, http, SELECT, UNION, UPDATE, exe, exec, INSERT, tmp.

2. Реализовать проверку ограничений веса изображения. Вес не более 2 Мб.

3. Для изображения должна быть создана иконка предпросмотра при нажатии на которую открывается полное изображение.

Для МП. Реализовать галерею изображений, загруженных клиентом с возможностью просмотра и удаления.

2

Реализовать интерфейс показа клиенту баннеров по следующим правилам.

1. Номера баннеров находятся в файле, где номеру баннера соответствует имя (адрес) изображения на сервере, максимальное число его показов клиенту и ссылка для перехода.

2. В ключике клиента записывается какие баннеры он посмотрел (по номеру). Формат записи — на усмотрение студента.

3. Пользователь должен просматривать баннеры с учетом максимального количества показов. После показа всех баннеров счетчик показов в ключике - сбрасывается и показы начинаются заново.

Для МП. Реализовать учет кликов пользователя по баннеру.

3

Реализовать интерфейс загрузки и проверки текста (многострочное поле) с заголовком.

1. В заголовке и в тексте не должны быть html теги и запрещенные слова: script, http, SELECT, UNION, UPDATE, exe, exec, INSERT, tmp.

2. Вывести текст изображения так, чтобы все английские слова были выделены курсивом (тег <i>), а все слова из специального файла — жирным начертанием (тег <b>). Специальный файл студент создает и заполняет на сервере сам несколькими словами, например (МИЭТ, MIET, PHP, JavaScript). Переходы на новую строку должны сохраняться.

Для МП. Реализовать интерфейс пополнения словаря.

Контрольные вопросы:

  1. Что такое сервлет?

  2. Что такое JSP?

  3. В чем сходство и отличие сервлетов и JSP?

  4. Можно ли к сервлетам подключать обычные классы Java?

  5. Можно ли к JSP подключать обычные классы Java?

  6. Какие объекты для взаимодействия с веб-сервером используются в сервлетах и JSP?

  7. Что такое директивы и для чего они предназначены JSP?

  8. Что такое объявления и для чего они предназначены JSP?

  9. Что такое выражения и для чего они предназначены JSP?

  10. Что такое скриплеты и для чего они предназначены JSP?

  11. Что такое war файл?

  12. Для чего служит файл web.xml?

Приложение 1

Документация по объектам JSP

Источник: www.java2s.com/Tutorials/Java/JSP/

Соседние файлы в папке Интернет технологии