Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы гречухин 2 курс / Лабораторная4ВЕБ

.docx
Скачиваний:
0
Добавлен:
01.06.2026
Размер:
603.33 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

отчет

по лабораторной работе 4

по дисциплине «WEB-программирование»

Студентка гр. 3316

Кирейкова С.А.

Преподаватель

Гречухин М.Н.

Санкт-Петербург

2025

ИНТЕРНАЦИОНАЛИЗАЦИЯ WEB-ПРИЛОЖЕНИЙ

Цель работы: знакомство со способами отображения данных на различ-ных языках при использовании файлов ресурсов

Ход работы:

1.Создание и загрузка файлов-ресурсов.

Создала два ресурсных файла, содержащих перечень строк вида ”ключ=значение” для русского и английского языка. Файлы сохранила с кодировкой UTF-8 без BOM.

Чтобы загрузить в приложение ресурсы, задала локаль и вызвала метод getBundle:

Locale locale = "en".equalsIgnoreCase(lang) ? Locale.ENGLISH : new Locale("ru");

ResourceBundle res = ResourceBundle.getBundle("Beauty", locale Control.getControl(Control.FORMAT_PROPERTIES));

2.Локализация компонент интерфейса и кода.

Заменила жестко запрограммированные названия выражениями которые ссылаются на переведенные названия и строки в локализованном файле ресурсов В HTML-коде сервлета требуется замена текстовых констант на вызов метода res.getString("ключ"), который будет подставлять текст, соответствующий заданному ключу. Этот метод возвращает строку, используя кодировку ISO-8859-1. Для корректного вывода русских букв надо перекодировать строку в формат UTF-8.

Пример:

src1 = res.getString("name"); //

utf8Bytes = src1.getBytes("UTF-8"); // преобразует строку в корректные UTF‑8 байты

result = new String(utf8Bytes, "UTF-8"); // восстанавливает строку из этих байтов

out.print(result);

Скриншоты, демонстрирующие работы приложения:

Рисунок 1- русскоязычная версия

Рисунок 2-выбор языка

Рисунок 3- англоязычная версия

Рисунок 4- работа web-приложения

Рисунок 5 приложение работает корректно!

2. Исходный текст сервлета:

package lab3;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import java.util.Locale;

import java.util.ResourceBundle;

import javax.servlet.http.HttpServletResponse;

import java.io.PrintWriter;

import java.util.ResourceBundle.Control;

/**

* Servlet implementation class BookList

*/

@WebServlet("/BookList")

public class BookList extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public BookList() {

super();

// Конструктор сервлета

}

/**

* Обрабатывает запросы как GET, так и POST

*

* @param request объект HttpServletRequest

* @param response объект HttpServletResponse

* @throws ServletException если возникает ошибка сервлета

* @throws IOException если возникает ошибка ввода-вывода

*/

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// Задаем кодировку для параметров запроса

request.setCharacterEncoding("UTF-8");

//Читаем язык

String lang = request.getParameter("lang");

if(lang==null) lang = "ru";

Locale locale = "en".equalsIgnoreCase(lang) ? Locale.ENGLISH : new Locale("ru");

//загрузка нужного ресурсного файла

ResourceBundle res = ResourceBundle.getBundle("Beauty", locale ,Control.getControl(Control.FORMAT_PROPERTIES));

// Чтение параметра name из запроса

String name = request.getParameter("name");

String qualification = request.getParameter("qualification");

String contacts = request.getParameter("contacts");

// Задаем тип содержимого для ответа (включая кодировку)

response.setContentType("text/html;charset=UTF-8");

// Получение потока вывода

PrintWriter out = response.getWriter();

try {

// Создание HTML-страницы

//таблица мастеров

out.println("<html>");

out.println("<head><title>");

// Перекодируем в UTF-8 байты, затем обратно в строку

String src1 = res.getString("title");

byte[] utf8Bytes = src1.getBytes("UTF-8");

String result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("</title></head>");

out.println("<body style= \"background-color: #bc8f8f; <table border='1'\" >");

out.println("<h1 style='text-align:center;font-family: \"Algerian\";'>");

src1 = res.getString("headline");

utf8Bytes = src1.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("</h1>");

out.println("<table border='1' style='text-align:center;border:2px solid #000000;margin: 0 auto;width:80%;font-size:25px;border-radius: 15px;background-color:#FFCCCC; color:#800000;'>");

out.println("<tr><td><b>");

src1 = res.getString("name");

utf8Bytes = src1.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("</b></td><td><b>");

src1 = res.getString("qualification");

utf8Bytes = src1.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("</b></td><td><b>");

src1 = res.getString("record");

utf8Bytes = src1.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("</b></td><td><b>");

src1 = res.getString("contacts");

utf8Bytes = src1.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("</b></td></tr>");

out.println("<tr><td>Татьяна</td><td>Дерматолог</td><td>Занято</td><td><b>89675667867</b></td></tr>");

out.println("<tr><td>Алиса</td><td>Косметолог</td><td>Свободно</td><td><b>89786778899</b></td></tr>");

//динамически добавленный мастер

if (name != null && !name.isEmpty() && qualification!= null && !qualification.isEmpty() && contacts!= null && !contacts.isEmpty()) {

out.println("<tr><td>" + name + "</td><td>"+ qualification +"</td><td>Свободно</td><td>"+contacts+"</td></tr>");

}

out.println("</table>");

//инструкция для мастеров

out.println("<p style='text-align:center; font-size:18px;'>");

src1 = res.getString("instruction");

utf8Bytes = src1.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("</p>");

//форма для мастеров

String src = res.getString("name");

out.println("<form method='GET' action='BookList' style='text-align:center; margin-bottom:20px;'>");

utf8Bytes = src.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println( ": <input type='text' name='name'/>");

src= res.getString("qualification");

utf8Bytes = src.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println(":<input type='text' name='qualification'/>");

src =res.getString("contacts");

utf8Bytes = src.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println(":<input type='text' name='contacts'/>");

out.println("<input type='submit' value='");

src = res.getString("button");

utf8Bytes = src.getBytes("UTF-8");

result = new String(utf8Bytes, "UTF-8");

out.print(result);

out.println("'/>");

out.println("</form>");

// Форма выбора языка

out.println("<form method='GET' action='BookList' style='text-align:center; margin-bottom:10px;'>");

out.println("<label>Choose language: </label>");

out.println("<select name='lang'>");

out.println("<option value='ru'" + ("ru".equalsIgnoreCase(lang) ? " selected" : "") + ">Русский</option>");

out.println("<option value='en'" + ("en".equalsIgnoreCase(lang) ? " selected" : "") + ">English</option>");

out.println("</select>");

out.println("<input type='submit' value='Switch'/>");

out.println("</form>");

out.println("</body>");

out.println("</html>");

} finally {

// Закрытие потока вывода

out.close();

}

}

/**

* Handles the HTTP GET method.

*

* @param request объект HttpServletRequest

* @param response объект HttpServletResponse

* @throws ServletException если возникает ошибка сервлета

* @throws IOException если возникает ошибка ввода-вывода

*/

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

/**

* Handles the HTTP POST method.

*

* @param request объект HttpServletRequest

* @param response объект HttpServletResponse

* @throws ServletException если возникает ошибка сервлета

* @throws IOException если возникает ошибка ввода-вывода

*/

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

}

}

3.Исходный код файла Beauty.properties

title=Beauty-мастера

headline=Мастера Beauty индустрии

name=Имя мастера

qualification=Специализация

contacts=Контакты

instruction=Если вы мастер и у вас есть окошко на 31 декабря, обязательно оставьте вашу заявку. Клиенты сами вас найдут!

button=Оставить заявку

record=Запись на 31 Декабря

4. Исходный код файла Beauty_en.properties

title=Beauty masters

headline=Beauty industry masters

name=Master's name

qualification=Qualification

contacts=Contacts

instruction=If you are a master and you have free time on December 31 you have to leave a request. Clients will find you themselves.

button=Leave a request

record=Entry for December 31

5.Текст документации, сгенерированный Javadoc.

Class BookList

java.lang.Object

javax.servlet.GenericServlet

javax.servlet.http.HttpServlet

lab3.BookList

All Implemented Interfaces:

Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig

@WebServlet("/BookList") public class BookList extends javax.servlet.http.HttpServlet

Servlet implementation class BookList

See Also:

  • Serialized Form

  • Constructor Summary 

Constructors

Constructor

Description

BookList()

 

  • Method Summary 

All MethodsInstance MethodsConcrete Methods

Modifier and Type

Method

Description

protected void

doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)

Handles the HTTP GET method.

protected void

doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)

Handles the HTTP POST method.

protected void

processRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)

Обрабатывает запросы как GET, так и POST

Methods inherited from class javax.servlet.http.HttpServlet 

doDelete, doHead, doOptions, doPut, doTrace, getLastModified, service, service

Methods inherited from class javax.servlet.GenericServlet 

destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, init, log, log

Methods inherited from class Object 

cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

  • Constructor Details 

    • BookList 

public BookList()

See Also:

      • HttpServlet()

  • Method Details 

    • processRequest 

protected void processRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException

Обрабатывает запросы как GET, так и POST

Parameters:

request - объект HttpServletRequest

response - объект HttpServletResponse

Throws:

javax.servlet.ServletException - если возникает ошибка сервлета

IOException - если возникает ошибка ввода-вывода

    • doGet 

protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException

Handles the HTTP GET method.

Overrides:

doGet in class javax.servlet.http.HttpServlet

Parameters:

request - объект HttpServletRequest

response - объект HttpServletResponse

Throws:

javax.servlet.ServletException - если возникает ошибка сервлета

IOException - если возникает ошибка ввода-вывода

    • doPost 

protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException

Handles the HTTP POST method.

Overrides:

doPost in class javax.servlet.http.HttpServlet

Parameters:

request - объект HttpServletRequest

response - объект HttpServletResponse

Throws:

javax.servlet.ServletException - если возникает ошибка сервлета

IOException - если возникает ошибка ввода-вывода