- •Простые типы данных
- •Написание простого аплета
- •Жизненный цикл аплета.
- •Программирование отношений между классами
- •Исключительные ситуации
- •Многопоточность
- •Библиотека Swing
- •Использование пакета jdbc
- •Создание файла на диске
- •Интерфесы
- •12. Создание документации
- •13. Архитектура сервлетов
- •14. Работа с сервлетами на примере размещения на сервере приложений jBoss.
- •16. План выполнения предварительных лабораторных работ №1-5.
- •16.1 Введение.
- •16.2 Задание на лабораторную работу № 1 Простые программы на языке Java.
- •16.3 Задание на лабораторную работу № 2 Реализация отношений между класами. Аплеты.
- •16.4 Задание на лабораторную работу № 3 Работа с потоками.
- •17. Задания на лабораторные работы 6-8
- •17.1 Введение
- •17.2 Задание на лабораторную работу № 6 Работа с Сервлетами.
- •17.3 Задание на лабораторную работу № 7 Работа с JavaServer Pages.
- •17.4 Задание на лабораторную работу № 8 Работа с таблицами базы данных
- •394026 Воронеж, Московский проспект, 14
14. Работа с сервлетами на примере размещения на сервере приложений jBoss.
Для того, чтобы разместить ваши сервлеты на сервере Jboss, необходимо в каталог deploy скопировать сформированный файл ear. Рассмотрим пример размещения двух сервлетов AdderServlet.class и AdderServlet1.class. В данном случае файл myservlet.ear имеет следующую структуру:
1. myservlet.ear
содержит:
/Meta-inf
warServlet.war
2. Каталог Meta-inf
содержит файл:
application.xml
<application>
<display-name>shop</display-name>
<description>Application description</description>
<module>
<web>
<web-uri>warServlet.war</web-uri>
<context-root>Servlet</context-root>
</web>
</module>
</application>
3. warServlet.war
содержит:
/Meta-inf
/Web-inf
4. /Web-inf
содержит:
/classes
web.xml
<web-app>
<display-name>Adder</display-name>
<description>no description</description>
<servlet>
<servlet-name>Adder</servlet-name>
<display-name>Adder</display-name>
<description>no description</description>
<servlet-class>ru.sobit.statshop.account.servlet.AdderServlet</servlet-class>
</servlet>
<display-name>Adder1</display-name>
<description>no description</description>
<servlet>
<servlet-name>Adder1</servlet-name>
<display-name>Adder1</display-name>
<description>no description</description>
<servlet-class>ru.sobit.statshop.account.servlet.AdderServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Adder</servlet-name>
<url-pattern>AdderServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Adder1</servlet-name>
<url-pattern>AdderServlet1</url-pattern>
</servlet-mapping>
</web-app>
Содержимое файла AdderServlet.java:
package ru.sobit.statshop.account.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class AdderServlet extends HttpServlet {
/*------------------------------------------------------------------------------------*/
public void init() throws ServletException {
}
/*-------------------------------------------------------------------------------------*/
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
PrintWriter out = res.getWriter();
try
{
generatePageAccount(out);
} catch (Exception e) {
System.out.println("Error in generatePageAccount");
e.printStackTrace();}
}
/*--------------------------------------------------------------------------------*/
private void generatePageAccount(PrintWriter out) {
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>Request Parameters Example</title>");
out.println("</head>");
out.println("<body>");
out.println("<P>");
out.println("<form action=\"http://localhost:8080/Servlet/AdderServlet1\">");
out.println("Name:");
out.println("<input type=text size=20 name=name>");
out.println("<br>");
out.println("Password:");
out.println("<input type=password size=20 name=password>");
out.println("<br>");
out.println("<input type=submit>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
}
Содержимое файла AdderServlet1.java:
package ru.sobit.statshop.account.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class AdderServlet1 extends HttpServlet {
/*------------------------------------------------------------------------------------*/
public void init() throws ServletException {
System.out.println("init begin");
}
/*-------------------------------------------------------------------------------------*/
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
System.out.println("doget begin");
PrintWriter out = res.getWriter();
String inputString1=null;
String inputString2=null;
try
{
inputString1 = req.getParameter("name");
inputString2 = req.getParameter("password");
System.out.println("ATTRIB="+req.getAttribute("submit"));
System.out.println("QueryString="+req.getQueryString());
} catch (Exception e)
{System.out.println("No Passed req.getParameter(inputString);");}
String str = "Hello "+inputString1;
try
{ generatePageAccount(out,str );
} catch (Exception e) {System.out.println("Error in generatePageAccount");
e.printStackTrace();}
}
/*-----------------------------------------------------------------------------------*/
private void generatePageAccount(PrintWriter out,String str) {
out.println("<HTML>");
out.println("<HEAD>");
out.println("<meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1251\">");
out.println("</HEAD>");
out.println("<body bgcolor=#FFFFFF BGCOLOR=\"#D3D3D3\" >");
out.println(str);
out.println("</BODY>");
out.println("</HTML>");
}
}
После размещения сервлетов на сервере можно запустить и проверить их работу. Для запуска необходимо набрать следующую строку в окне браузера: http://localhost:8080//Servlet/AdderServlet
15. JavaServer Pages
JavaServer Pages является стандартным расширением Java, который определен на основании сервлетного расширения. Цель JSP является упрощение создания и управления динамическими WEBV страницами. JSP позволяет комбинировать HTML код WEB странички с кусочками JAVA кода в одном и том же документе. Код JAVA окружается специальными ярлыками, которые говорят JSP-контейнеру, что он должен использовать этот код для передачи сервлета.
Преимущество JSP в том, что мы имеем единый документ который представляет и страницу и JAVA код. Недостаток в том, что поддерживающий JSP-страницу человек должен быть опытен в JSP и JAVA.
JSP ярлыки начинаются и заканчиваются угловыми скобками, включая символ процентов <% JSP code %>.
Пример:
<html><body>
<H1> time:
<%=System.curentTimeMillis()/1000%></H1>
</body></html>
При первом вызове страницы компоненты, указанные на странице, генерируются и компилируются JSP контейнером в один или несколько сервлетов. В приведенном примере сервлет будет содержать код для конфигурирования объекта HttpServletPesponse, производящего объект PrintWriter(out), а затем происходят вычисления строки, которая посылается в out.
Директивы JSP. <%@ directive (attr=“value”)%>. Наиболее важная директива – директива страницы.
<%@page charset=“windows1251” import= “java.util.*” %>.
Класс Session. Сессия состоит из запроса клиентом одной или нескольких страниц WEB сайта за определенный период времени. Например, если происходят покупки продуктов в режиме онлайн, то сессия должна быть подтверждена с момента помещения первого элемента в корзину до момента окончания работы с корзиной.
При каждом добавлении в корзину получается новое HTTP соединение, которое не имеет информации о предыдущих соединениях. Для того чтобы следить за сессией на стороне сервера живет объект Session. Он предназначен для сбора полезной информации о клиентах.
Это могут быть такие данные, как информация об авторизации , которая была введена при первом входе на сайт и которую не нужно вводить повторно.
Сбор информации о клиенте выполняется методами SetAttribute и GetAttribute():
session.setAttribute (“user”, “1”);
User=(String)session.GetAttribute (“user”);
Информацию о номере сессии можно получить:
String b=session.getId();
Пример JSP c использованием “бинов”, то есть классов с публичными методами, размещенными на сервере приложений: Использование “бинов” позволяет сделать код JSP более наглядным и доступным для понимания.
<html>
<jsp: userBean id= “accountBean” class= “ru.account.AccountBean”/>
……………
<%
……………
accountBean.getParam();
……………
%>
Объекты классов HttpServletRequest, HttpServletRespons, Session, JspWriter встроены в JSP спецификацию и автоматически доступны внутри JSP страницы под именами соответственно request, respons, session, out.
Технология JavaServer Pages (JSP) позволяет смешивать обычный, статический HTML с динамически генерированным содержимым сервлетов.
Многие Web-страницы, которые построены CGI-программами, изначально являются статическими, имеющими небольшие части, изменяющимися в ограниченных пределах. Например, исходная страница большинства онлайновых магазинов одинакова для всех посетителей, за исключением небольшого приветствия, включающего имя посетителя, если оно известно.
Но большинство вариантов CGI-программ, включая сервлеты, заставляют вас генерировать в программе всю страницу, даже если ее большая часть остается неизменной. Страницы JSP позволяют создавать обе части раздельно. В Большая часть страницы состоит из обычного HTML-кода, который передается посетителю без изменений. Части, которые генерируются динамически, отмечены специальными HTML-подобными тегами и находятся прямо на странице.
Пример JSP страницы (index.jsp), работающей с объектами request и session.
<HTML>
<jsp:useBean id="accountBean" scope="session" class="AccountBean" />
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<TITLE>
Java Debug Interface
</TITLE>
</HEAD>
<%
String remoteHost=null;
String id=null;
try
{
remoteHost=request.getRemoteHost();
accountBean.incrementVisitor(remoteHost);
id = session.getId();
} catch (Exception e){System.out.println("Error in index.jsp");}
%>
<TD ALIGN="left" VALIGN="top" WIDTH="1%"><FONT SIZE="+0">
Host:<INPUT type=text size=10 name="host" "size=8"
value="<%= remoteHost %>" >
ID:<INPUT type=text size=10 name="id" "size=8"
value="<%= id %>" >
</font>
</HTML>
Пример JSP страницы и JspBean, сгенерированных средой JBuilder, создающих поле ввода и считывающих информацию из этого поля с выводом на страницу.
<html>
<head>
<title>
Jsp1
</title>
</head>
<jsp:useBean id="Jsp1BeanId" scope="session" class="jsp_example.Jsp1Bean" />
<jsp:setProperty name="Jsp1BeanId" property="*" />
<body>
<h1>
JBuilder Generated JSP
</h1>
<form method="post">
<br>Enter new value : <input name="sample"><br>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<br>
Value of Bean property is :<jsp:getProperty name="Jsp1BeanId" property="sample" />
</form>
</body>
</html>
package jsp_example;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: VGTU </p>
* @author Korolev Evgeni
* @version 1.0
*/
public class Jsp1Bean {
private String sample = "Start value";
//Access sample property
public String getSample() {
return sample;
}
//Access sample property
public void setSample(String newValue) {
if (newValue!=null) {
sample = newValue;
}
}
}
