Главная » Java, Web » Еще раз о JSP

0

Серверные страницы Java представляют собой разновидность технологии сервлетов. При помощи JSP мы имеем возможность создавать такие страницы, в которых динамический компонент отделен от статического

HTML-кода. Выполняемый код вставляется в страницу между знаками <%и %>, например

Спасибо за заказ

<I><%= request.getParameter("title") %></I>

Как правило, файл, содержащий JSP-вставки, имеет расширение .jsp и располагается в основном каталоге Web-cepeepa, то есть там, куда помещаются обычные нединамические (не исполняемые на сервере) страницы. JSP- страница преобразуется в сервлет. Статический HTML выводится неизменным в поток вывода. На сервере Blazix временный файл Java для промежуточного сервлета будет сохранен на время компиляции в каталоге Blazix\jspdir. После компиляции временный файл будет автоматически удален. При желании и необходимости в промежуточный файл .java можно посмотреть. Пусть, например, исходный JSP-файл будет test 1.jsp:

<HTML> <head>

<title>Simple test.</title>

</head>

<body>

<hl>

Just simplest jsp test </hl>

Current time is

<font size=+2>

<%= new java.util.Date() %>

</font>

<HTML> <BODY> <%

System.out.println("Evaluating date now");

java.util.Date date = new java.util.Date(); %>

Hello! The time is now <%= date %> </BODY>

</HTML> </BODY> </HTML>

Соответствующий ему промежуточный Java-файл, описывающий сервлет, будет выглядеть следующим образом (листинг 4.22).

Листинг 4.22. Файл desisoftj"sp_test1 Jsp1030370508327

// JSP Page automatically generated by Desiderata Software JSP generator

11 Mon Aug 26 18:01:48 MSD 2002

import javax.servlet.*;

import java.io.*;

import javax.servlet.http.*;

import javax.servlet.jsp.*;

public class desisoft_jsp_testl_jspl030370508327 extends desisoft.server.JspBaseClass {

int _ds_jsp_lnum = -1;

public void _jspService(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { JspFactory factory = JspFactory.getDefaultFactory(); PageContext pageContext = factory.getPageContext(this,

request, response, null, true,

JspWriter.DEFAULT_BUFFER, true ) ;

HttpSession session = pageContext.getSession(); JspWriter out = pageContext.getOut(); ServletConfig config = getServletConfig(); ServletContext application = config.getServletContext(); Object page = this; try {

_ds_jsp_lnum = 1; out.println("<HTML>"); _ds_jsp_lnum = 2; out.println("<head>") ; _ds_jsp_lnum = 3;

out.println("<title>Simple test.</title>"); _ds_j sp_lnum = 4; out.println("</head>") ; _ds_jsp_lnum = 5;

out.println("<body>") ; _ds_jsp_lnum = 6; out.println("<hl>"); _ds_jsp_lnum = 7;

out.println("Just simplest jsp test");

_ds_jsp_lnum = 8;

out.println("</hl>");

_ds_jsp_lnum = 9;

out.printIn("Current time is");

_ds_j sp_lnum = 10;

out.println("<font size=+2>");

_ds_j sp_lnum = 11;

out.print( new java.util.Date () ); out.printIn(" "); _ds_j sp_lnum = 12; out.println("</font>"); _ds_j sp_lnum = 13; out.println(); _ds_j sp_lnum = 14; out.printIn("<HTML> <BODY> "); _ds_j sp_lnum = 15; //***** start Scriptlet

System.out.println("Evaluating date now"); java.util.Date date = new java.util.Date();

//***** End Scriptlet _ds_j sp_lnum = 21; out.printIn(" "); _ds_j sp_lnum = 22;

out.print("Hello! The time is now ");

out.print( date ) ; out.printIn(" ");

_ds_j sp_lnum = 23; out.println("</BODY>"); _ds_j sp_lnum = 24; out.printIn(" </HTML>"); _ds_j sp_lnum = 25; out.println("</BODY>");

_ds_jsp_lnum = 26; out.println("</HTML>"); _ds_j sp_lnum = 27; } catch (Exception ex) { out.clearBuffer() ; request.setAttribute(

"javax.servlet.jsp.jspException", ex); request.setAttribute( "desisoft.jsp.lineNumber", new Integer(_ds_jsp_lnum)); pageContext.handlePageException(ex); } finally {

factory.releasePageContext(pageContext);

}

}

public String[] _desisoft_jsp_getDependentFiles()

{ return _desisoft_j sp_dependencyList; } public long[] _desisoft_j sp_getModTimes()

{ return _desisoft_j sp_dependencyModTimes; }

static String[] _desisoft_jsp_dependencyList = { "testl.jsp" }; static long [] _desisoft_jsp_dependencyModTimes = { 1028784400000L };

}

Имя файла генерируется автоматически. Код также генерируется сервером автоматически. Затем он автоматически компилируется в соответствующий класс.

Основные элементы синтаксиса JSP

? Выражение JSP.

Синтаксис: <%= expression %>

Выражение вычисляется и помещается в поток вывода. XML-эквивалент следующий:

<j sp:expression>

expression

</j sp:expression>.

Определены переменные request, response, out, session, application, config, pageContext.

?    Скриплет JSP. Синтаксис: <% code %>

code вставляется в метод service. XML-эквивалент следующий:

<jsp:scriptlet> code

</j sp:scriptlet>.

?   Декларация JSP. Синтаксис: <% ! code %>

code вставляется в класс сервлета вне метода service. XML-эквивалент следующий:

<j sp:declaration> code

</j sp:declaration>.

?   Директива JSP.

Синтаксис: <%@ page att="val" %>

Директива установки общих свойств. XML-эквивалент следующий:

<j sp:directive.page att="val"\>. Используются атрибуты:

•         import="package.class"

•        contentType="MIME-Type"

•         isThreadSafe="true|false"

•        session="true|false"

•        buffer="sizekb|none"

•        autoflush="true|false"

•        extends="package.class"

•         info="message"

•        errorPage="url"

•         isErrorPage="true|false"

•        language="java"

?   Директива вставки файла. Синтаксис:

<%@ include file="url" %>

Вставляется файл, расположенный в локальной файловой системе. Вставка происходит в процессе преобразования в сервлет. XML- эквивалент следующий:

<jsp:directive.include file="url"\>

Указывается относительный URL. Для вставки файла во время обращения (а не во время трансляции) можно использовать jsp:include.

?    Комментарий. Синтаксис:

<%– comment –%>

При трансляции в сервлет комментарии игнорируются. Для вставки HTML-комментариев используются знаки <- – комментарий —>.

?   Действие jsp: include. Синтаксис:

<jsp:include page="relative URL" flush="true"/> Вставка файла во время запроса страницы.

?   Действие jsp:useBean. Синтаксис:

<jsp:useBean att=val*/> ИЛИ

<jsp:useBean att=val*>

</j sp:useBean>

Найти или создать компонент.

Допустимые атрибуты:

•         id="name"

•         scope="page|request|session|application"

•         class="package.class"

•         type="package.class"

•         beanName="package.class"

?   Действие jsp: setProperty. Синтаксис:

<jsp:setProperty att=val*/>

Задает свойства компонентов в явном виде или в виде параметров. Допустимые атрибуты:

•         name="beanName"

•         property="propertyName|*"

•         param="parameterName"

•         value="val"

?   Действие jsp:getProperty. Синтаксис:

<j sp:get Property name="propertyName" value="val"/>

Получает и выводит свойства компонента.

?   Действие jsp: forward. Синтаксис:

<jsp:forward page="relative URL"/> Переадресует запрос на другую страницу.

?   Действие jsp:plugin. Синтаксис:

<jsp:plugin attribute="value"*> </jsp:plugin>

Создает ярлык object или embed в соответствии с тем, что требуется браузеру, запрашивая возможность использовать клиентский плагин Java.

Некоторые аспекты применения JSP

Статический текст на JSP-странице выглядит как обычный HTML-код. Он составляет неизменяемую основу, шаблон. Статический текст отделяется от JSP-вставок комбинацией символов <%. Если такая же комбинация должна быть выведена в составе статического HTML, то ее следует записать так: "<\%". Элементы перечислены выше.

Выражения JSP используются для вставки значений в поток вывода (<%= Java Expression %>). Выражение вычисляется, преобразуется в строку и вставляется в поток вывода в скриплете. Для того чтобы облегчить работу с выражениями, существует набор заранее определенных переменных, часть из которых приводится ниже:

?    request (из HttpServletRequest);

?    response (из HttpServletResponse);

?    session (из HttpSession, связанной с запросом);

?    out — поток PrintWriter для вывода клиенту. Например:

Your hostname: <%= request.getRemoteHost() %>

Если кто-либо предпочитает XML, то JSP-выражения могут быть записаны в альтернативном виде:

<j sp:expression> Java Expression </j sp:expression>

Важно помнить, что XML чувствителен к регистру.

Технология JSP в подробностях освещена в главе 3. Приведем пример простой JSP-страницы (листинг 4.23).

Листинг 4.23. Файл jsptest4.jsp

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

<HTML>

<HEAD>

<TITLE>Using JavaServer Pages</TITLE>

<META NAME="keywords"

CONTENT="JSP,JavaServer Pages,servlets"> <META NAME="description"

CONTENT="A quick example of the four main JSP tags."> CLINK REL=STYLESHEET

HREF="My-Style-Sheet.ess" TYPE="text/css"> c/HEAD>

CBODY BGCOLOR="#EDE5E6" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B" ALINK="#FFO000">

<CENTER>

CTABLE BORDER=5 BGCOLOR="#EF8429"> CTRXTH CLASS="TITLE">

Using JavaServer Pagesc/TABLE> </CENTER>

Some dynamic content created using various JSP mechanisms: CUL>

cLI>cB>Expression.</B><BR>

Your hostname: <%= request.getRemoteHost() %>. <LI><B>Scriptlet.</B><BR>

<% out.printIn("Attached GET data: " +

request.getQueryString()); %> <LI><B>Declaration (plus expression) .</BXBR> <%! private int accessCount =0; %>

Accesses to page since server reboot: <%= ++accessCount %> <LIxB>Directive (plus expression) .</BXBR> <%@ page import = "java.util.*" %> Current date: <%= new Date() %>

</UL>

</BODY>

</HTML>

 

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии