JavaServer Pages
| Stránky ManchaServer: EME | ||
|---|---|---|
| Dynamická část webové stránky | ||
| Obecná informace | ||
| vývojář | Sun Microsystems | |
| Technické informace | ||
| Naplánováno v | Jáva | |
| Podporované platformy | Java EE | |
| Verze | ||
| Nejnovější stabilní verze | 2,3 () | |
| Odkazy | ||
JavaServer Pages (JSP) je technologie, která pomáhá vývojářům softwaru vytvářet dynamické webové stránky založené mimo jiné na HTML a XML . JSP je podobné PHP , ale používá programovací jazyk Java .
K nasazení a spuštění JavaServer Pages je vyžadován webový server , který podporuje kontejnery servletů , jako je Apache Tomcat nebo Jetty .
TagLibs -> JSP -> Aplikační server (servlety) -> Klient (prohlížeč)
Výkon stránky JSP je stejný jako u ekvivalentního servletu, protože kód je kompilován jako jakákoli jiná třída Java. Virtuální stroj zase dynamicky zkompiluje části aplikace, které jej vyžadují, aby strojový kód. Díky tomu je JSP výkonnější a efektivnější než jiné webové technologie, které provádějí kód čistě interpretovaným způsobem.
Hlavní výhodou JSP oproti jiným jazykům je, že jazyk Java je jazyk pro všeobecné použití, který přesahuje webový svět a je vhodný pro vytváření tříd, které úhledným způsobem zpracovávají obchodní logiku a přístup k datům. To vám umožní oddělit webové aplikace do vrstev, přičemž část bude mít na starosti generování dokumentu HTML v souboru JSP.
Další výhodou je, že JSP zdědí přenositelnost Javy a aplikace je možné provozovat na více platformách beze změn. Je dokonce běžné, že vývojáři pracují na jedné platformě a aplikace končí na jiné.
Servlety a Java Server Pages (JSP) jsou dvě metody vytváření dynamických webových stránek na serveru pomocí jazyka Java. V tomto smyslu jsou podobné jiným metodám nebo jazykům, jako je PHP , ASP nebo CGI , programy, které generují webové stránky na serveru. Liší se však od nich v jiných věcech.
Za prvé, JSP a servlety běží na virtuálním stroji Java, což znamená, že je v zásadě lze použít na jakémkoli typu počítače, pokud pro něj existuje virtuální stroj Java. Každý servlet (nebo JSP, od nynějška jej budeme používat zaměnitelně) běží na svém vlastním vláknu, tedy ve svém vlastním kontextu; ale nezačne se provádět pokaždé, když obdrží požadavek, ale přetrvává od jednoho požadavku k dalšímu, takže se neztrácí čas jeho vyvoláním (načíst program + interpret ). Jeho vytrvalost mu také umožňuje dělat řadu věcí efektivněji: například připojení k databázím a správu relací.
JSP jsou ve skutečnosti alternativním způsobem vytváření servletů, protože kód JSP je přeložen do kódu servletu Java při prvním vyvolání a poté je to nový kód servletu, který je spuštěn a vytváří jako výstup HTML kód, který tvoří webovou stránku s odpovědí.
Popis
JSP lze považovat za abstrakci Java servletů na vysoké úrovni. JavaServer Pages jsou překládány do servletů v reálném čase; každý servlet je uložen do mezipaměti a znovu použit, dokud není upraven původní JSP. Jinými slovy, JSP jsou stránky Java pro webové prostředí.
Příklad dokumentu JSP
Příklad kódu stránky JSP:
<%@ page errorPage = "myerror.jsp" %>
<%@ page import = "com.foo.bar" %>
<html>
<head>
<%! int serverInstanceVariable = 1 ; %>
…
<%! int localStackBasedVariable = 1 ; %>
…
JSP
Příklad sestavení nebo „výstupu“ JSP:
balíček jsp_servlet;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
importovat com.foo.bar; //importováno jako výsledek <%@ page import = "com.foo.bar" %>
hmota...
class _myservlet implementuje javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage {
//vloženo jako
//výsledek <%! int serverInstanceVariable = 1 ; %>
int serverInstanceVariable = 1;
…
public void _jspService( požadavek javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse odpověď)
vyvolá javax.servlet.ServletException,
java.io.IOException
{
javax.servlet.ServletConfig config = ...;//získání konfigurace servletu
Stránka objektu = toto;
PageContext pageContext = …;//získáte kontext stránky pro tento požadavek
javax.servlet.jsp.JspWriter out = pageContext.getOut();
HttpSession session = request.getSession( true );
…
Chcete-li spouštět stránky JSP, potřebujete webový server s webovým kontejnerem, který vyhovuje specifikacím JSP a Servlet. Tomcat 5 je kompletní referenční implementace pro specifikace Java Servlet 2.2 a JSP 1.1.
Syntaxe
Implicitní proměnné
Stránky JSP obsahují určité privilegované proměnné, aniž by bylo nutné je deklarovat nebo konfigurovat:
| Variabilní | Třída |
|---|---|
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
|
směrnice
Jsou to značky, ze kterých se generují informace, které může použít engine JSP. Neprodukují viditelný výstup pro uživatele, ale spíše konfigurují, jak bude stránka JSP spuštěna.
Jeho syntaxe je:
<%@ directiva atributo="valor" %>
Dostupné směrnice jsou:
include: Zahrnout obsah souboru na stránku pomocí atributu file .
<%@ include file="cabecera.html" %>
taglib: Import knihoven značek (Knihovny značek)
<%@ taglib uri="/tags/struts-html" prefix="html" %>
page: Určuje atributy související se stránkou k vykreslení. Atributy jsou:
Atribut Syntax Využití import<%@ page import="class; class" %>Importujte třídy a balíčky Java pro použití v souboru JSP. session<%@ page session="false" %>Určuje, zda se mají použít data obsažená v relaci; výchozí je "true". contentType<%@ page contentType="class; class" %>Určuje typ MIME objektu "response"; ve výchozím nastavení "text/html; charset=ISO-8859-1". buffer<%@ page buffer="12KB" %>Vyrovnávací paměť používaná objektem zapisovače "mimo"; může mít hodnotu „žádný“; výchozí "8 kB". errorPage<%@ page errorPage="/path_to_error_page" %>Určuje cestu k chybové stránce, která bude vyvolána, pokud během provádění tohoto souboru JSP dojde k výjimce. isErrorPage<%@ page isErrorPage="true" %>Určuje, zda je tento soubor JSP stránkou pro zpracování výjimek. Pouze takové stránky mají přístup k implicitní proměnné "exception", která obsahuje výjimku, která způsobila vyvolání chybové stránky.
Prohlášení
Umožňují nám deklarovat proměnné, funkce a statická data.
<%! int maxAlumnosClase = 30; %>
skriptlety
Skriptlety jsou části kódu Java vložené mezi statické prvky stránky...
<% ... código Java ... %>
Výrazy
Výrazy jsou vyhodnocovány uvnitř servletu. Nesmí končit ";".
<%= maxAlumnosClase + 1%>
V následujícím příkladu by byl atribut „title“ obsažený v objektu požadavku vložen jako název stránky:
<%
String titulo = "";
if (request.getAttribute("titulo") != null) {
titulo = (String) request.getAttribute ("titulo");
}
%>
...
<title><%=titulo%></title>
....
Tagy
Značky JSP pro zjednodušení kódu a poskytnutí více funkcí.
Vývoj webových stránek pomocí značek má určité výhody, jako jsou:
- usnadnit učení.
- usnadnit údržbu.
- podporovat modularitu a opětovné použití.
- zjednodušit kód a snížit počet požadovaných řádků.
Jeho syntaxe by byla:
<%@ taglib uri="/taglib/lycka" prefix="lycka" %>
...
<lycka:hola/>
...
Při generování kódu Java pro servlet bude tato značka hello aplikačním serverem interpretována jako součást knihovny značek lycka . Tato knihovna bude identifikována v souboru deskriptoru naší aplikace (web.xml) s názvem zdroje (URI) /taglib/lycka .
<taglib-uri>/taglib/lycka</taglib-uri>
<taglib-location>/WEB-INF/tags/lycka.tld</taglib-location>
Implementace tohoto souboru deskriptoru /WEB-INF/tags/ lycka.tld by mohla být:
<?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>
A nakonec aplikační server nahradí značku jejím přidruženým kódem 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;
}
A nakonec by prohlížeč ukázal:
moje kočka je krásná
JSP tagy
Jsou to značky patřící do specifikace JSP. Poskytují základní funkce.
První sada značek poskytuje funkce na úrovni stránky velmi jednoduchým způsobem:
- <jsp:forward> , přesměruje požadavek na jinou adresu URL
- <jsp:include> , obsahuje text souboru na stránce
- <jsp:plugin> , stáhne Java plugin (aplet nebo Bean).
Druhá skupina vám umožňuje manipulovat s komponentami JavaBean bez znalosti Javy.
- <jsp:useBean> , vám umožňuje manipulovat s Beanem (pokud neexistuje, Bean bude vytvořen) s uvedením jeho rozsahu, třídy a typu.
- <jsp:getProperty> , získá zadanou vlastnost z dříve deklarovaného beanu a zapíše ji do objektu odpovědi.
- <jsp:setProperty> , nastavuje hodnotu vlastnosti dříve deklarovaného beanu.
JSTL tagy
Poskytuje je Sun v rámci distribuce JSTL .
- jádro , iterace, podmínky, manipulace s URL a další obecné funkce.
- xml , pro manipulaci s XML a pro XML-transformaci.
- sql pro správu připojení k databázím.
- i18n , pro internacionalizaci a formátování řetězců znaků jako čísel.
Struts TagLib tagy
Distribuováno Apache pro práci ve spojení s rámcem Struts.
- PHP
- fazole
- HTML
- logika
- vnořené
- vjgp
Vlastní štítky
Již dříve jsme viděli příklad vytvoření vlastní značky uložené v naší vlastní knihovně značek.
K vývoji vlastních značek použijeme rozhraní Tag Libraries API.
Java Servlet API je:
javax.servlet.*
JSP API se rozšiřuje z tohoto API,
javax.servlet.jsp.*
A konečně, rozhraní Tag Libraries API se rozšiřuje z posledně jmenovaného,
javax.servlet.jsp.tagext.*
Nejrelevantnější z tohoto API jsou:
- rozhraní _
- Značka, kterou musí implementovat všechny značky.
- BodyTag rozšiřuje předchozí a definuje další metody pro kontrolu těla tagu.
- Třídy
- BodyContent, handler pro čtení a zápis do těla tagu.
- BodyTagSupport, který implementuje rozhraní BodyTag.
- TagAttributeInfo, chcete-li získat informace o atributech značky deklarované v TLD.
- TagData, která obsahuje hodnoty atributů.
- TagExtraInfo, chcete-li zadat další informace o značce, jako jsou proměnné, které zavádí do kódu, nebo atributy, které budou ověřeny.
- TagInfo na základě informací z TLD.
- TagLibraryInfo představuje informace TLD.
- TagSupport, implementuje rozhraní Tag.
- VariableInfo obsahuje informace, jako je typ a rozsah proměnných vytvořených nebo upravených značkou.
Podrobnější popis lze nalézt na http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/jsp/tagext/package-summary.html
Dalším příkladem značky může být následující kód 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 nalezení začátku značky runtime nejprve zavolá metodu doStart() po vytvoření instance třídy. Může vrátit jednu z následujících hodnot:
- SKIP_BODY, nezpracovává obsah těla značky.
- EVAL_BODY_INCLUDE , vyhodnotí tělo značky.
- EVAL_BODY_TAG , vyhodnotí tělo značky a přenese výsledek do jiného streamu uloženého ve vlastnosti značky.
Metoda doAfterBody() po zpracování těla značky.
Nakonec bude zavolána metoda doEndTag(). Můžete se vrátit:
- EVAL_PAGE, chcete-li pokračovat ve zpracování stránky JSP
- SKIP_PAGE, chcete-li zastavit zpracování stránky JSP, například stránku přesměrovat
Deklarováno v deskriptoru knihovny jako
<tag>
<name>lowercase</name>
<tagclass>org.lycka.taglibs.LowerCaseTag</tagclass>
<bodycontent>JSP</bodycontent>
<info>Put body in lowercase.</info>
</tag>
Používá se na stránce JSP
<%@ taglib uri="/taglib/lycka" prefix="lycka" %>
...
<lycka:lowercase>Esto es un EJEMPLO</lycka:lowercase>
A váš výstup by byl
Toto je příklad