лабы гречухин 2 курс / Лабораторная4ВЕБ
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
отчет
по лабораторной работе 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
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
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 - если возникает ошибка ввода-вывода
