Strony JavaServer
| Strony serwera Mancha: EME | ||
|---|---|---|
| Dynamiczna część strony internetowej | ||
| Informacje ogólne | ||
| deweloper | Mikrosystemy słoneczne | |
| Specyfikacja | ||
| Zaplanowano w | Jawa | |
| Obsługiwane platformy | Java EE | |
| Wersje | ||
| Najnowsza stabilna wersja | 2.3 () | |
| Spinki do mankietów | ||
JavaServer Pages (JSP) to technologia, która pomaga programistom tworzyć dynamiczne strony internetowe w oparciu o HTML i XML oraz inne rodzaje dokumentów. JSP jest podobny do PHP , ale używa języka programowania Java .
Do wdrożenia i uruchomienia JavaServer Pages wymagany jest serwer WWW obsługujący kontenery serwletów , taki jak Apache Tomcat lub Jetty .
TagLibs -> JSP -> Serwer aplikacji (serwlety) -> Klient (przeglądarka)
Wydajność strony JSP jest taka sama jak równoważnego serwletu, ponieważ kod jest kompilowany jak każda inna klasa Java. Z kolei maszyna wirtualna dynamicznie skompiluje części aplikacji, które tego wymagają, do kodu maszynowego. Dzięki temu JSP jest wydajniejszy i bardziej wydajny niż inne technologie internetowe, które wykonują kod w sposób czysto zinterpretowany.
Główną przewagą JSP nad innymi językami jest to, że język Java jest językiem ogólnego przeznaczenia, który wykracza poza świat sieciowy i nadaje się do tworzenia klas, które w zgrabny sposób obsługują logikę biznesową i dostęp do danych. Pozwala to na rozdzielenie aplikacji internetowych na warstwy, pozostawiając część odpowiedzialną za generowanie dokumentu HTML w pliku JSP.
Kolejną zaletą jest to, że JSP dziedziczy przenośność Javy i możliwe jest uruchamianie aplikacji na wielu platformach bez zmian. Często zdarza się, że programiści pracują na jednej platformie, a aplikacja działa na innej.
Serwlety i strony Java Server Pages (JSP) to dwie metody tworzenia dynamicznych stron internetowych na serwerze przy użyciu języka Java. W tym sensie są one podobne do innych metod czy języków, takich jak PHP , ASP czy CGI , czyli programy generujące strony internetowe na serwerze. Różnią się jednak od nich innymi rzeczami.
Po pierwsze, strony JSP i serwlety działają na wirtualnej maszynie Javy, co oznacza, że w zasadzie można ich używać na dowolnym komputerze, o ile jest do niego wirtualna maszyna Javy. Każdy serwlet (lub JSP, odtąd będziemy go używać zamiennie) działa we własnym wątku, to znaczy we własnym kontekście; ale nie rozpoczyna wykonywania za każdym razem, gdy otrzymuje żądanie, ale utrzymuje się od jednego żądania do następnego, więc nie marnuje czasu na jego wywoływanie (załaduj program + interpreter ). Jego trwałość pozwala również na bardziej efektywne wykonywanie wielu rzeczy: na przykład łączenie się z bazami danych i zarządzanie sesjami.
Strony JSP są w rzeczywistości alternatywnym sposobem tworzenia serwletów, ponieważ kod JSP jest tłumaczony na kod serwletu Java przy pierwszym wywołaniu, a następnie wykonywany jest nowy kod serwletu, który wytwarza na wyjściu kod HTML, z którego składa się strona internetowa odpowiedzi.
Opis
JSP można postrzegać jako abstrakcję wysokiego poziomu serwletów Java. Strony JavaServer są tłumaczone na serwlety w czasie rzeczywistym; każdy serwlet jest buforowany i ponownie używany do momentu zmodyfikowania oryginalnej strony JSP. Innymi słowy, strony JSP to strony Java dla środowiska WWW.
Przykład dokumentu JSP
Przykładowy kod strony JSP:
<%@ page errorPage = "myerror.jsp" %>
<%@ page import = "com.foo.bar" %>
<html>
<head>
<%! int serverInstanceVariable = 1 ; %>
…
<%! int localStackBasedVariable = 1 ; %>
…
JSP
Przykład kompilacji JSP lub „wyjścia”:
pakiet jsp_servlet;
import java.util.*;
importować java.io.*;
import javax.servlet.*;
importowanie javax.servlet.http.*;
import javax.servlet.jsp.*;
importowanie javax.servlet.jsp.tagext.*;
importuj com.foo.bar; //importowane w wyniku importu strony <%@ = "com.foo.bar" %>
materiał...
class _myservlet implementuje javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage {
//wstawiono jako
//wynik <%! int serverInstanceVariable = 1 ; %>
int ZmiennaInstancjiSerwera = 1;
…
public void _jspService(żądanie javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse odpowiedź)
wyrzuca javax.servlet.ServletException,
java.io.IOException
{
javax.servlet.ServletConfig config = ...;//pobierz konfigurację serwletu
Strona obiektu = to;
PageContext pageContext = …;//pobierz kontekst strony dla tego żądania
javax.servlet.jsp.JspWriter out = pageContext.getOut();
Sesja HttpSession = request.getSession( true );
…
Do uruchamiania stron JSP potrzebny jest serwer WWW z kontenerem WWW zgodnym ze specyfikacjami JSP i Servlet. Tomcat 5 to kompletna implementacja referencyjna dla specyfikacji Java Servlet 2.2 i JSP 1.1.
Składnia
Zmienne niejawne
Strony JSP zawierają pewne uprzywilejowane zmienne bez konieczności ich deklarowania lub konfigurowania:
| Zmienny | Klasa |
|---|---|
pageContext
|
javax.servlet.jsp.PageContext
|
request
|
javax.servlet.http.HttpServletRequest
|
response
|
javax.servlet.http.HttpServletResponse
|
session
|
javax.servlet.http.HttpSession
|
config
|
javax.servlet.ServletConfig
|
application
|
javax.servlet.ServletContext
|
out
|
javax.servlet.jsp.JspWriter
|
page
|
java.lang.Object
|
exception
|
java.lang.Exception
|
Dyrektywy
Są to tagi, z których generowane są informacje, które mogą być wykorzystane przez silnik JSP. Nie generują one widocznych danych wyjściowych dla użytkownika, ale raczej konfigurują sposób wykonania strony JSP.
Jego składnia to:
<%@ directiva atributo="valor" %>
Dostępne dyrektywy to:
include: Dołącz zawartość pliku do strony, używając atrybutu pliku .
<%@ include file="cabecera.html" %>
taglib: Importuj biblioteki znaczników (Biblioteki znaczników)
<%@ taglib uri="/tags/struts-html" prefix="html" %>
page: określa atrybuty związane ze stroną do renderowania. Atrybuty to:
Atrybut Składnia Wykorzystanie import<%@ page import="class; class" %>Importuj klasy i pakiety Java, które mają być używane w pliku JSP. session<%@ page session="false" %>Określa, czy używać danych zawartych w sesji; domyślnie "prawda". contentType<%@ page contentType="class; class" %>Określa typ MIME obiektu „odpowiedź”; domyślnie "text/html; charset=ISO-8859-1". buffer<%@ page buffer="12KB" %>Bufor używany przez obiekt piszący „out”; może przyjąć wartość „brak”; domyślnie „8 KB”. errorPage<%@ page errorPage="/path_to_error_page" %>Określa ścieżkę strony błędu, która zostanie wywołana w przypadku wystąpienia wyjątku podczas wykonywania tego pliku JSP. isErrorPage<%@ page isErrorPage="true" %>Określa, czy ten plik JSP jest stroną obsługi wyjątków. Tylko takie strony mogą uzyskać dostęp do niejawnej zmiennej „wyjątek”, która zawiera wyjątek, który spowodował wywołanie strony błędu.
Oświadczenia
Pozwalają nam deklarować zmienne, funkcje i dane statyczne.
<%! int maxAlumnosClase = 30; %>
Skryptlety
Skryptlety to fragmenty kodu Java osadzone między statycznymi elementami strony...
<% ... código Java ... %>
Wyrażenia
Wyrażenia są oceniane wewnątrz apletu. Nie mogą kończyć się na „;”.
<%= maxAlumnosClase + 1%>
Poniższy przykład umieściłby atrybut „title” zawarty w obiekcie żądania jako tytuł strony:
<%
String titulo = "";
if (request.getAttribute("titulo") != null) {
titulo = (String) request.getAttribute ("titulo");
}
%>
...
<title><%=titulo%></title>
....
Tagi
Tagi JSP w celu uproszczenia kodu i zapewnienia większej funkcjonalności.
Tworzenie stron internetowych z wykorzystaniem tagów ma pewne zalety, takie jak:
- ułatwić naukę.
- ułatwiają konserwację.
- zachęcać do modułowości i ponownego wykorzystania.
- uprościć kod i zmniejszyć liczbę wymaganych wierszy.
Jego składnia to:
<%@ taglib uri="/taglib/lycka" prefix="lycka" %>
...
<lycka:hola/>
...
Podczas generowania kodu Java dla serwletu ten znacznik hello zostanie zinterpretowany przez serwer aplikacji jako należący do biblioteki znaczników lycka . Ta biblioteka zostanie zidentyfikowana w pliku deskryptora naszej aplikacji (web.xml) nazwą zasobu (URI) /taglib/lycka .
<taglib-uri>/taglib/lycka</taglib-uri>
<taglib-location>/WEB-INF/tags/lycka.tld</taglib-location>
Implementacja tego pliku deskryptora /WEB-INF/tags/lycka.tld może wyglądać następująco:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>simp</shortname>
<uri>http://www.hachisvertas.net/jcs/taglibs/lycka</uri>
<info>A simple sample tag library</info>
<tag>
<name>hola</name>
<tagclass>org.lcyka.taglibs.miEtiqueta</tagclass>
<bodycontent>empty</bodycontent>
<info>Alaba la belleza de mi gata.</info>
</tag>
</taglib>
Na koniec serwer aplikacji zastąpi tag powiązanym kodem Java, org.lcyka.taglibs.myTag :
package org.lcyka.taglibs;
import ...;
public class miEtiqueta extends TagSupport {
public int doStartTag {
try {
pageContext.getOut().print("Mi gata es preciosa");
} catch (IOException ioe) {
}
return SKIP_BODY;
}
I na koniec przeglądarka pokazałaby:
mój kot jest piękny
Tagi JSP
Są to znaczniki należące do specyfikacji JSP. Zapewniają podstawową funkcjonalność.
Pierwszy zestaw tagów zapewnia funkcjonalność na poziomie strony w bardzo prosty sposób:
- <jsp:forward> , przekierowuje żądanie na inny adres URL
- <jsp:include> , zawiera tekst pliku wewnątrz strony
- <jsp:plugin> , pobiera wtyczkę Java (aplet lub Bean).
Druga grupa pozwala na manipulowanie komponentami JavaBean bez znajomości języka Java.
- <jsp:useBean> , pozwala manipulować Bean (jeśli nie istnieje, Bean zostanie utworzony), określając jego zakres, klasę i typ.
- <jsp:getProperty> , pobiera określoną właściwość z wcześniej zadeklarowanego komponentu bean i zapisuje ją w obiekcie odpowiedzi.
- <jsp:setProperty> , ustawia wartość właściwości wcześniej zadeklarowanego ziarna.
Tagi JSTL
Dostarcza je firma Sun w ramach dystrybucji JSTL .
- core , iteracje, warunkowe, manipulacja adresami URL i inne ogólne funkcje.
- xml , do manipulacji XML i do transformacji XML.
- sql do zarządzania połączeniami z bazami danych.
- i18n , do internacjonalizacji i formatowania ciągów znaków jako cyfr.
Rozpórki tagi TagLib
Rozprowadzany przez Apache do pracy w połączeniu z Struts Framework.
- PHP
- fasolki
- HTML
- logika
- zagnieżdżone
- vjgp
Etykiety niestandardowe
Widzieliśmy wcześniej przykład tworzenia niestandardowego tagu przechowywanego w naszej własnej bibliotece tagów.
Aby opracować niestandardowe tagi, użyjemy interfejsu Tag Libraries API.
Java Servlet API to:
javax.servlet.*
API JSP wywodzi się z tego API,
javax.servlet.jsp.*
Wreszcie interfejs API bibliotek tagów wywodzi się z tego ostatniego,
javax.servlet.jsp.tagext.*
Najważniejsze z tego interfejsu API to:
- interfejsy _
- Tag, który muszą zaimplementować wszystkie tagi.
- BodyTag rozszerza poprzedni i definiuje dodatkowe metody sprawdzania treści tagu.
- Klasy
- BodyContent, moduł obsługi do odczytu i zapisu w treści tagu.
- BodyTagSupport, który implementuje interfejs BodyTag.
- TagAttributeInfo, aby uzyskać informacje o atrybutach znacznika zadeklarowanego w TLD.
- TagData, który zawiera wartości atrybutów.
- TagExtraInfo, aby określić dodatkowe informacje o znaczniku, takie jak zmienne, które wprowadza on do kodu lub atrybuty, które zostaną zweryfikowane.
- TagInfo, na podstawie informacji z TLD.
- TagLibraryInfo reprezentuje informacje TLD.
- TagSupport, implementuje interfejs Tag.
- VariableInfo zawiera informacje, takie jak typ i zakres zmiennych utworzonych lub zmodyfikowanych przez tag.
Bardziej szczegółowy opis można znaleźć pod adresem http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/jsp/tagext/package-summary.html
Innym przykładem tagu może być następujący kod Java:
package org.lycka.taglibs;
import ...;
public class LowerCaseTag extends BodyTagSupport {
public int doAfterBody() throws JspException {
try {
BodyContent body = getBodyContent();
JspWriter writer = body.getEnclosingWriter();
String bodyString = body.getString();
if ( bodyString != null ) {
writer.print( bodyString.toLowerCase());
}
} catch(IOException ioe) {
throw new JspException("Error: IOException while writing to the user");
}
return SKIP_BODY;
}
}
Po znalezieniu początku tagu środowisko wykonawcze najpierw wywoła metodę doStart() po utworzeniu instancji klasy. Może zwrócić jedną z następujących wartości:
- SKIP_BODY, nie przetwarza zawartości treści tagu.
- EVAL_BODY_INCLUDE , ocenia treść tagu.
- EVAL_BODY_TAG , ocenia treść tagu i rzutuje wynik na inny strumień przechowywany we właściwości tagu.
Metoda doAfterBody() po przetworzeniu treści tagu.
Na koniec zostanie wywołana metoda doEndTag(). Możesz zwrócić:
- EVAL_PAGE, aby kontynuować przetwarzanie strony JSP
- SKIP_PAGE, aby zatrzymać przetwarzanie strony JSP, na przykład przekierować stronę
Zadeklarowany w deskryptorze biblioteki jako
<tag>
<name>lowercase</name>
<tagclass>org.lycka.taglibs.LowerCaseTag</tagclass>
<bodycontent>JSP</bodycontent>
<info>Put body in lowercase.</info>
</tag>
Używane na stronie JSP
<%@ taglib uri="/taglib/lycka" prefix="lycka" %>
...
<lycka:lowercase>Esto es un EJEMPLO</lycka:lowercase>
A twoje wyjście byłoby
To jest przykład