
- •По курсу «Интернет-программирование»
- •Принципы построения интернет-приложений на Java
- •Сервлеты (Servlet) и jsp
- •Сервлеты
- •Синтаксис jsp-страницы
- •Комментарии
- •Директивы
- •Объявления
- •Выражения
- •Скриплеты
- •Объекты request, response, cookie, session
- •Загрузка файлов на сервер
- •Объект request
- •Объект response
- •Объект cookie
- •Объект session
- •Приложение 2
Загрузка файлов на сервер
Объект 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>
Задание на лабораторную работу
Реализовать авторизацию следующим образом
Есть форма авторизации: логин + пароль и есть форма регистрации: логин + пароль
Форма регистрации открывается с помощью ссылки на форме регистрации
Пользователь вводит желаемый логин и пароль на форме регистрации и они сохраняются в файл (см. Приложение 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). Переходы на новую строку должны сохраняться.
Для МП. Реализовать интерфейс пополнения словаря. |
Контрольные вопросы:
Что такое сервлет?
Что такое JSP?
В чем сходство и отличие сервлетов и JSP?
Можно ли к сервлетам подключать обычные классы Java?
Можно ли к JSP подключать обычные классы Java?
Какие объекты для взаимодействия с веб-сервером используются в сервлетах и JSP?
Что такое директивы и для чего они предназначены JSP?
Что такое объявления и для чего они предназначены JSP?
Что такое выражения и для чего они предназначены JSP?
Что такое скриплеты и для чего они предназначены JSP?
Что такое war файл?
Для чего служит файл web.xml?
Приложение 1
Документация по объектам JSP
Источник: www.java2s.com/Tutorials/Java/JSP/