пятница, 24 июня 2011 г.

Большой "секрет" о директории work Томката)

Оказывается в этой папке хранятся не только файлы сессий, а переведенные JSP-файлы в *.java-классы, при этом рядом с каждым таким файлом находится его откомпилированный коллега *.class-файл.

воскресенье, 19 июня 2011 г.

Другие jsp конфигурации кроме теглибов в web.xml

Кроме указания где находятся дескрипторы библиотек, можно внести для подходящих к шаблону урла джееспешок. Вот пример участка web.xml:
<jsp-config>
    <!--paths to tag descriptors-->
    <jsp-property-group>
        <description>
  Special property group for JSP Configuration JSP example.
        </description>
        <display-name>JSPConfiguration</display-name>
        <url-pattern>/jsp2/misc/config.jsp</url-pattern>
        <el-ignored>true</el-ignored>
        <page-encoding>ISO-8859-1</page-encoding>
        <scripting-invalid>true</scripting-invalid>
        <include-prelude>/jsp2/misc/prelude.jspf</include-prelude>
        <include-coda>/jsp2/misc/coda.jspf</include-coda>
    </jsp-property-group>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

Как видно из примера, мы можем указать кодировку, шапку и футер, включение/выключение языка выражений, включение выключение скпритлетов...

Динамические атрибуты тега

Теги могут работать и с динамическими атрибутами.
Пример JSP:
....
<h2>Invocation 1 (six attributes)</h2>
<ul>
    <my:echoAttributes x="1" y="2" z="3" r="red" g="green" b="blue"/>
</ul>
<h2>Invocation 2 (zero attributes)</h2>
<ul>
    <my:echoAttributes/>
</ul>
<h2>Invocation 3 (three attributes)</h2>
<ul>
    <my:echoAttributes dogName="Scruffy" 
                       catName="Fluffy" 
                       blowfishName="Puffy"/>
</ul>
....

Использование в тегах jsp-фрагментов.

jsp-фрагменты -- это куски кода, которые могут динамически исчисляться в момент запроса. Эти таких кусков состоит вся джееспе-страница. Эта сущность представляется классом javax.servlet.jsp.tagext.JspFragment.

Группа тегов jsp:element

Начнем с примера:

<jsp:element name="${content.headerName}" 
   xmlns:jsp="http://java.sun.com/JSP/Page"> 
   <jsp:attribute name="lang">${content.lang}</jsp:attribute> 
   <jsp:body>${content.body}</jsp:body> 
</jsp:element>

Эта группа тегов динамически генерирует элемент иксемель.

Подключение библиотеки тегов из jar-архива

Все очень просто. Нужно просто рядом с пакетами в архиве в папке META-INF разместить все дескрипторы библиотек тегов, которые есть в архиве. Контейнер через класспаз найдет эти десприпторы и соберет все ури, которые указаны в  ..., и теперь через эти ури можно получать доступ к тегам библиотек из любой джееспе-страницы или тег-файла нашого проекта.

Упрощенное создание тегов в JSP 2.0

Теперь теги можно создавать намного проще, не зная языка Java. Можно тег описать в определенном формате в виде хмл в файле *.tag, контейнер эти файлы умеет читать и создавать из них классы тегов.

Чтобы иметь доступ к этому тегу необязательно даже описывать его в дескрипторе тегов, можно просто указать путь на него из ссылки джееспе:
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>


суббота, 18 июня 2011 г.

Новый набор значений для body-content в определение тега в JSP 2.0

Было:
  • empty
  • JSP
  • tagdependent
Стало:


  • empty
  • scriptless
  • tagdependent

Создание функций в библиотеках тегов

В дескрипторе библиотеки тегов можно кроме тегов определять функции которые потом можно использовать. Вот пример фрагмента такго дескптора:
............
<function>
 <description>Converts the string to all caps</description>
        <name>caps</name>
 <function-class>jsp2.examples.el.Functions</function-class>
 <function-signature>java.lang.String caps( java.lang.String )</function-signature>
    </function>
............

Добавление скиптовых переменных из JSP тэгов

Из тегов можно добавлять в контекст страницы переменные, которые могут использовать скриптлеты и выразжения на странице. Чтобы добавить такую переменную нам необходимо об этом упомнить в дескрипторе библиотеки тегов в том теге, которые и будет добавлять эту пременную:
...
<tag> 
  <name>secondtag</name> 
  <tagclass>com.stardeveloper.tag.test.SecondTag</tagclass>
  <tei-class>com.stardeveloper.tag.test.SecondTagTEI</tei-class>
  <bodycontent>JSP</bodycontent>
  <info>Your second JSP Tag</info>
</tag>
... 
Тэг что нас интересует это <tei-class>, который означает: класс TagExtraInfo. В теге указывается путь к классу, который и опишет, что он добавляется и когда оно станет доступным:
package com.stardeveloper.tag.test;

import javax.servlet.jsp.tagext.*;

public class SecondTagTEI extends TagExtraInfo {

 public VariableInfo[] getVariableInfo(TagData data) {
  return new VariableInfo[] {
   new VariableInfo("time", "java.lang.String", 
    true, VariableInfo.NESTED)
  };
 }
}

Это означает, что между открывающим и закрывающим тегами(VariableInfo.NESTED) можно использовать переменную строкового типа time. Ну примерно так:
<%@ taglib uri="/WEB-INF/tlds/DemoTags.tld" prefix="star" %>
<star:secondtag>
 <p align="center">Date value retrieved from JSP Tag : 
  <%= time %></p>
</star:secondtag>

А вообще для определения места использования установленных в теге переменных выделенно три константы:
  • VariableInfo.AT_BEGIN Переменная доступна после открывающего тега.
  • VariableInfo.AT_END Переменная доступна после закрывающего тега.
  • VariableInfo.NESTED Переменная доступна в теле тега(между открывающим и закрывающим тегами).
.

четверг, 16 июня 2011 г.

Trancient keyword in java

transient ключевое слово, которое ставится возле полей серилизируемого обьекта, означает, что данное поле серилизировать не нужно.

понедельник, 13 июня 2011 г.

Передавание запросов из сревлетов в JSP и наоборот.

Из сервлетов в JSP:

import javax.servlet.*;
import javax.servlet.http.*;

public class servletToJsp extends HttpServlet {

    public void doGet (HttpServletRequest request,
         HttpServletResponse response) {

 try {
     // Set the attribute and Forward to hello.jsp
     request.setAttribute ("servletName", "servletToJsp");
     getServletConfig().getServletContext().getRequestDispatcher("/jsptoserv/hello.jsp").forward(request, response);
 } catch (Exception ex) {
     ex.printStackTrace ();
 }
    }
}


Альтернативный способ написания JSP-страниц. XML-синтаксис

Узнал, что есть альтернативный вариант написания jsp-страниц. Вместо простой страницы хтмл со вставками директив, сприптлетов, выражений, можно тоже самое делать но под другими именами. Так называемый иксемельный формат. Только вот таким файлам принято ставить расширение *.jspx:

Написание кастомных библиотек тегов

Библиотеки тегов, добавляют дополнительные теги в джееспе страницу, что позволяет реализовывать дополнительную логику дизайна(манипуляции с данными и отображение их с помощью хтмл-тегов).

пятница, 10 июня 2011 г.

Директива <%@ page...%>

Предназначена для того, чтобы применить определенные настройки для поточной страницы. Также эти настройки применяются ко всем статически файлам, которые подключаются к данной странице (это потому что эти файлы становятся частью этой страницы).
Ктати поточная  jsp + подключенные к ней статические файлы называются транслейшин юнит.

Директива <%@ incude..%> и теги <jsp:include /> и <jsp:forward />

Директива <%@ incude..%&gt; предназначена для того, чтобы подключать на страницу джееспе статические файлы. А тег <jsp:include /> умеет подключать как статические так и динамические файлы. Отличие между этими файлами в том, что статические файлы просто подгружаются в то место страницы, где располагается директива,  и компилируются с самой страницей в один сервлет. Динамические же файлы получают запрос, делают исчисления, и возвращают результат в страницу, и именно результат размещается в странице(получается два отдельных сревлета). Вот поэтому атрибуты директивы <%@ page ... %>, которые определяются в джееспе странице, применяются только к статическим файлам(потому что они являются частью этого же сервлета).

среда, 8 июня 2011 г.

Разница между скриптлетом и выражением. Что за зверь декларация.

Скриптлет -- это участок ява-кода в переделах джееспе страницы, который может проверять определенные условия и выводить группы тегов или нет, делать манипуляции с данными, выборку ресурсов и т.д.

Выражение -- это вывод каких-то данных в указанном месте страницы.
The map file has <span style="color: blue;"><%= map.size() %></span> entries. 
Good guess, but nope. Try <b><%= numguess.getHint() %></b>.  

А декларация -- это определение переменной или метода которые будут использоваться на странице.
<%! declaration; [ declaration; ]+ ... %>

Вот примеры деклараций:
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>

подключение на страницу бина

Подключение бина к джееспе:
<jsp:useBean 
  id="beanInstanceName" 
  scope="page|request|session|application"
 { class="package.class" | 
  type="package.class" | 
  class="package.class" type="package.class" |
  beanName="{ package.class | <%= expression %> }" type="package.class"  
 }
 {  /> |  
  > other tags </jsp:useBean>  
 } 

Виды кроссдоменных запросов

Рассмотрим виды кроссдоменных запросов. Также укажу какие модули для этого можно использовать из YUI3.

понедельник, 6 июня 2011 г.

Установка полей бинов в JSP1.2

Так в джееспе подключается бин:
<jsp:usebean class="num.NumberGuessBean" id="numguess" scope="session"></jsp:usebean>

Чтобы установить поля бина нужно воспользоваться тегом

<jsp:setProperty 
  name="beanInstanceName"  
 { property= "*" | 
  property="propertyName" [ param="parameterName" ] |
  property="propertyName" value="{ string | <%= expression %> }" 
 } 
/>