close

JavaServer Pages

Přejít na navigaci Přejít na hledání
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

Viz také

Externí odkazy