Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по СП 1-8.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
197.12 Кб
Скачать

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;

}

}

}