JAVA – JSP

29
1 JAVA – JSP Java EE training: http://courses.coreservlets.com JAVA SERVER PAGES PODSTAWY

description

JAVA – JSP. JAVA SERVER PAGES PODSTAWY. Java EE training: http://courses.coreservlets.com. Źródło strony JSP. - PowerPoint PPT Presentation

Transcript of JAVA – JSP

Page 1: JAVA – JSP

1

JAVA – JSP

Java EE training: http://courses.coreservlets.com

JAVA SERVER PAGES PODSTAWY

Page 2: JAVA – JSP

2

Źródło strony JSP<%--

Document : index

Created on : 2008-12-15, 15:47:11

Author : Paolo

--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JSP Page</title>

</head>

<body>

<h1>Hello World!</h1>

</body>

</html>

Page 3: JAVA – JSP

3

Wygenerowany servletpackage org.apache.jsp;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase

implements org.apache.jasper.runtime.JspSourceDependent {

private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

private static java.util.Vector _jspx_dependants;

private org.apache.jasper.runtime.ResourceInjector _jspx_resourceInjector;

public Object getDependants() {

return _jspx_dependants;

}

public void _jspService(HttpServletRequest request, HttpServletResponse response)

throws java.io.IOException, ServletException {

......

}

Page 4: JAVA – JSP

4

Metoda _jspService standardowe zmienne lokalne

....

PageContext pageContext = null;

HttpSession session = null;

ServletContext application = null;

ServletConfig config = null;

JspWriter out = null;

Object page = this;

JspWriter _jspx_out = null;

PageContext _jspx_page_context = null;

try {

response.setContentType("text/html;charset=UTF-8");

response.setHeader("X-Powered-By", "JSP/2.1");

pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);

_jspx_page_context = pageContext;

application = pageContext.getServletContext();

config = pageContext.getServletConfig();

session = pageContext.getSession();

out = pageContext.getOut();

_jspx_out = out;

_jspx_resourceInjector = (org.apache.jasper.runtime.ResourceInjector) application.getAttribute("com.sun.appserv.jsp.resource.injector");

......

}

Page 5: JAVA – JSP

5

Metoda _jspService cd. ....

out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n");

out.write(" \"http://www.w3.org/TR/html4/loose.dtd\">\n");

out.write("\n");

out.write("<html>\n");

out.write(" <head>\n");

out.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");

out.write(" <title>JSP Page</title>\n");

out.write(" </head>\n");

out.write(" <body>\n");

out.write(" <h1>Hello World!</h1>\n");

out.write(" </body>\n");

out.write("</html>\n");

} catch (Throwable t) {

if (!(t instanceof SkipPageException)){

out = _jspx_out;

if (out != null && out.getBufferSize() != 0)

out.clearBuffer();

if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);

}

} finally {

_jspxFactory.releasePageContext(_jspx_page_context);

}

}......

Page 6: JAVA – JSP

6

Predefiniowane zmiennerequest– Pierwszy argument metody do obsługi parametrów żądania (typ obiektu HttpServletRequest)

response– Drugi argument metody do obsługi odpowiedzi (typ obiektu HttpServletResponse )

out– Obiekt do generowania odpowiedzi przez servlet, (typ obiektu JspWriter)

wykorzystuje buforowanie

session– Obiekt do obsługi mechanizmu sesji związanej z żądaniem (typ obiektu HttpSession)

Mechanizm sesji może być wyłączony przez dyrektywę „page”

application– obiekt do obsługi zmiennych dostępnych w całej aplikacji webowej (typ obiektu ServletContext)

Dostęp uzyskany jest przez metodę getServletContext().

Page 7: JAVA – JSP

7

Elementy stron jsp

• Skryptlety <% … %>

• Komentarze <%-- … --%>

• Dyrektywy <%@ … %>

• Deklaracje <%! … %>

• Wyrażenia <%= … %>

• Akcje <jsp: …>

Page 8: JAVA – JSP

8

Wyrażenia (Expressions)

out.print( MyElements.JSPElement.Add(2, 3) );

<%= MyElements.JSPElement.Add(2, 3) %>

out.print( new MyElements.JSPElement().Subtract(2, 3) );<%= new MyElements.JSPElement().Subtract(2, 3) %>

public class JSPElement {

public static double Add(double a, double b)

{

return a+b;

}

public double Subtract(double a, double b)

{

return a-b;

}

}

Page 9: JAVA – JSP

9

Wyrażenia cd (Składnia XML)

Uwaga nie można mieszać znaczników XML ze standardowymi na jednej stronie

<jsp:expression>Java Expression</jsp:expression>

Page 10: JAVA – JSP

10

Skryplety

Format

– <% Java Code %>

• Wynik

Kod zostaje wstawiony Bezpośrednio do metody _jspService

Przykład

<%

String queryData = request.getQueryString();

out.println(" Parametry zadania GET " + queryData);

%>

<% response.setContentType("text/plain"); %>

Składnia w formacie XML

<jsp:scriptlet>Java Code</jsp:scriptlet>

Page 11: JAVA – JSP

11

Skryplety przykład<!DOCTYPE …>

<HTML>

<HEAD>

<TITLE>Color Testing</TITLE>

</HEAD>

<%

String bgColor = request.getParameter("bgColor");

if ((bgColor == null)||(bgColor.trim().equals(""))){

bgColor = "WHITE";

}

%>

<BODY BGCOLOR="<%= bgColor %>">

<H2 ALIGN="CENTER">Test zmiany koloru tła

"<%= bgColor %>".</H2>

</BODY></HTML>

Page 12: JAVA – JSP

12

Skryplety właściwości•Skryplety są wstawiane w servlet dokładnie tak jak zostały napisane,

•Niekoniecznie muszą tworzyć pełne wyrażenia w języku Java,

•Jednak pełne wyrażenia są barziej przejżyste łatwiejsze do analizy

Przykład:<% if (Math.random() < 0.5) { %>

Have a <B>nice</B> day!

<% } else { %>

Have a <B>lousy</B> day!

<% } %>

Kod wynikowy w servlecie– if (Math.random() < 0.5) {

out.println("Have a <B>nice</B> day!");

} else {

out.println("Have a <B>lousy</B> day!");

}

Page 13: JAVA – JSP

13

DeklaracjeFormat

<%!Java Code %>

Wynik

Kod jest wstawiany do definicji klasy servletu poza istniejącymi metodami

Przykład

<%! private int someField = 5; %>

<%! private void someMethod(...) {...} %>

Składnia w formacie XML

<jsp:declaration>Java Code</jsp:declaration>

Uwagi:

Pola są użyteczne. Deklaracje metod lepiej jest definiować w osobnych klasach

Page 14: JAVA – JSP

14

Deklaracje: przykład Kod strony JSP

<H1>Some Heading</H1>

<%!

private String randomHeading() {

return("<H2>" + Math.random() + "</H2>");

}

%>

<%= randomHeading() %>

Page 15: JAVA – JSP

15

Deklaracje: PrzykładKod Servletu

public class xxxx implements HttpJspPage {

private String randomHeading() {

return("<H2>" + Math.random() + "</H2>");

}

public void _jspService(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

HttpSession session = request.getSession();

JspWriter out = response.getWriter();

out.println("<H1>Some Heading</H1>");

out.println(randomHeading());

...

} ...

} // koniec servletu

Page 16: JAVA – JSP

16

Delklaracje Przykład 2<!DOCTYPE …>

<HTML>

<HEAD>

<TITLE>JSP Declarations</TITLE>

<LINK REL=STYLESHEET

HREF="JSP-Styles.css"

TYPE="text/css">

</HEAD>

<BODY>

<H1>JSP Declarations</H1>

<%! private int accessCount = 0; %>

<H2>Accesses to page since server reboot:

<%= ++accessCount %></H2>

</BODY></HTML>

Page 17: JAVA – JSP

17

Metody init i destroy w stronach JSP

Strony JSP mogą wymagać wywołania metod init i destroy

Servlet wygenerowny ze strony JSP może już wykorzystywać te funkcje

Nie można więc wykorzystać deklaracji do ich zdefiniowania, gdyż spowoduje to problemy

Rozwiązanie:

Przeładwać funkcje jspInit i jspDestroy.

Automatycznie generowane servlety wywołują te funkcje, których ciało w wersji podstawowej jest puste

Page 18: JAVA – JSP

18

Dyrektywy

<%@ method = ” ...”%>

Page 19: JAVA – JSP

19

Dyrektywa page import

Format<%@ page import="package.class" %>

<%@ page import="package.class1,...,package.classN" %>

WynikDodaje instrukcje import do definicji servletu

UwagiKlasy wykorzystywane przez strony JSP muszą być zawarte w pakietach (czyli umieszczoene w odpowiednich katalogach np..:

…/WEB-INF/classes

Przykład<%@ page import="java.util.*,coreservlets.*" %>

Page 20: JAVA – JSP

20

Dyrektywa page contentType

Format<%@ page contentType="MIME-Type" %>

<%@ page contentType="MIME-Type; charset=Character-Set" %>

<%@ page pageEncoding="Character-Set" %>

WynikOkreśla tym MIME strony generowanej przez servlet utworzony na podstawie definicji strony JSP

Uwagi– Wartość atrybutu nie może być określona podczas obsługi żądania

Przykład<%@ page contentType="application/vnd.ms-excel" %>

Page 21: JAVA – JSP

21

Dyrektywa page contentType cd

Ustawienie atrybutu contentType nie może być wyrażeniem warunkowycm

Poniższy kod powoduje ustawienie typu MIME (application/vnd.ms-excel) niezależnie od parametrów żądania

<% boolean usingExcel = checkUserRequest(request); %>

<% if (usingExcel) { %>

<%@ page contentType="application/vnd.ms-excel" %>

<% } %>

Trzeba wykorzystać skryplet i wywołać metodę response.setContentType

<%

String format = request.getParameter("format");

if ((format != null) && (format.equals("excel"))) {

response.setContentType("application/vnd.ms-excel");

}

%>

Page 22: JAVA – JSP

22

Dyrektywa page sessionFormat

<%@ page session="true" %> <%-- Default --%>

<%@ page session="false" %>

Wynik

Określa czy na dana strona implementuje mechanizm Sesji

Uwagi

Domyślnie ustawiona na true

Wyłącznie pozwala zaoszczędzić pamięć w przypadku bardzo obciążonego serwera

16

Page 23: JAVA – JSP

23

Dyrektywa page buffer

Format <%@ page buffer="sizekb" %>

<%@ page buffer="none" %>

WynikOkreśla rozmiar bufora wykorzystywanego przez zmienną out

UwagiBuforowanie umożliwia ustawienie nagłówków HTTP nawet jeśli pewna część strony została już wygenerowana (dopuki buffor nie został zapełniony lub celowo opróżniony)

Serwer może zastosować większy buffor niż zdefiniowano (nie mniejszy)

Page 24: JAVA – JSP

24

Dyrektywa page errorPageFormat<%@ page errorPage=”Wględny adres URL" %>

WynikOkreśla stronę JSP przeznaczonej do obsługi wyjątku wygenerowanego leczni nie przechwyconego przez bierzącą stronę.

UwagiWygenerowany wyjątek jest dosteępny automatycznie dla docelowej strony JSP prze zmienną exception

Plik konfiguracyjny web.xml pozwala na zdefniowanie wielu stron do obsługi konkretnych wyjątków bądź błędów HTTP

Page 25: JAVA – JSP

25

Dyrektywa page isErrorPage

Format<%@ page isErrorPage="true" %>

<%@ page isErrorPage="false" %> <%-- Default --%>

Wynik Określa że bierząca strona bezie stroną przeznaczoną do obsługi błędów generowanych przez inną stronę JSP

UwagiTworzona jest dodatkowo zmienna o nazwie exception

Należy przechwytywać jak najwięcej wyjątków mechanizm stron do obsługi błędów stosować w sytuacjach wyjątkowych

Page 26: JAVA – JSP

26

Dyrektywa page extends

Format <%@ page extends="package.class" %>

WynikOkreśla klasę bazową dla wygenerowanego na podstawie strony JSP servletu

UwagiStosować rozważnie

Typowe zastosowanie to wykorzystanie klas dostarczonych przez producenta serwera, na którym uruchamiana jest aplikacja (np.. Identyfikacja użytkownika itp.)

Page 27: JAVA – JSP

27

Inne dyrektywyFormat

<%@ page isThreadSafe="true" %> <%-- Default --%>

<%@ page isThreadSafe="false" %>

Wynik

Informacja dla systemu, że kod nie jest bezpieczny (threadsafe), więc sysem powinien wyłączyć wspólny dostęp do zasobów dla innych wątków

Zazwyczaj oznacza to że servlet impelmentuje SingleThreadModel

• Uwagi

Unikać, Powoduje degradację wydajności

Format

<%@ page isELIgnored="false" %>

<%@ page isELIgnored="true" %>

Wynik

Włącza bądź wyłącza JSP 2.0 Expression Language

Page 28: JAVA – JSP

28

Page 29: JAVA – JSP

29

• JSP Expressions

– Format: <%= expression %>

– Wrapped in out.print and inserted into _jspService

• JSP Scriptlets

– Format: <% code %>

– Inserted verbatim into the servlet’s _jspService method

• JSP Declarations

– Format: <%! code %>

–Inserted verbatim into the body of the servlet class

• Predefined variables

– request, response, out, session, application

• Limit the Java code that is directly in page

– Use helper classes, beans, servlet/JSP combo (MVC),

JSP expression language, custom tags

• XML Syntax

– There is alternative JSP syntax that is sometimes useful when

generating XML-compliant documents.

• But is more trouble than it is worth for most HTML applications