среда, 14 января 2009 г.

JSF для Tomcat

JSF входит в поставку любого JEE-сервера приложений, но не в ходит в Tomcat, так как Tomcat только лишь контейнер Web-приложений, но никак не JEE-сервер.

Однако можно заставить Tomcat работать как полноценный сервер JSF-приложений. И сейчас я расскажу как это сделать по шагам. (Будем считать, что у вас уже установлен и работает Apache Tomcat 6.0).


  1. Загрузите архив mojarra-1.2_09-b02-FCS-binary.zip с сайта https://javaserverfaces.dev.java.net/
    Распакуйте из этого архива библиотеки jsf-api.jar и jsf-impl.jar и положите их в каталог CATALINA_HOME/lib.

  2. Перенесите библиотеки jstl.jar и standard.jar из каталога CATALINA_HOME/webapps/examples/WEB-INF/lib в каталог CATALINA_HOME/lib.

  3. Создайте тестовое JSF-приложение.
    Структура каталогов:

    CATALINA_HOME/webapps/loginjsf
    |-WEB-INF
    | |-classes
    | | |-com
    | | |-corejsf
    | | |-UserBean.class
    | |-web.xml
    | |-faces-config.xml
    |-index.html
    |-index.jsp
    |-welcome.jsp

    Исходник UserBean.java:

    package com.corejsf;

    public class UserBean {
    private String name;
    private String password;

    // PROPERTY: name
    public String getName() { return name; }
    public void setName(String newValue) { name = newValue; }

    // PROPERTY: password
    public String getPassword() { return password; }
    public void setPassword(String newValue) { password = newValue; }
    }

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/web.xml:

    <?xml version="1.0"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    </web-app>


    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/faces-config.xml:

    <?xml version="1.0"?>
    <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    version="1.2">
    <navigation-rule>
    <from-view-id>/index.jsp</from-view-id>
    <navigation-case>
    <from-outcome>login</from-outcome>
    <to-view-id>/welcome.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>

    <managed-bean>
    <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>com.corejsf.UserBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    </faces-config>

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/index.html:

    <html>
    <head>
    <meta http-equiv="Refresh" content= "0; URL=index.faces"/>
    <title>Start Web Application</title>
    </head>
    <body>
    <p>Please wait for the web application to start.</p>
    </body>
    </html>

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/index.jsp:

    <html>
    <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <f:view>
    <head>
    <title>A Simple JavaServer Faces Application</title>
    </head>
    <body>
    <h:form>
    <h3>Please enter your name and password.</h3>
    <table>
    <tr>
    <td>Name:</td>
    <td>
    <h:inputText value="#{user.name}"/>
    </td>
    </tr>
    <tr>
    <td>Password:</td>
    <td>
    <h:inputSecret value="#{user.password}"/>
    </td>
    </tr>
    </table>
    <p>
    <h:commandButton value="Login" action="login"/>
    </p>
    </h:form>
    </body>
    </f:view>
    </html>

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/welcome.jsp:

    <html>
    <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

    <f:view>
    <head>
    <title>A Simple JavaServer Faces Application</title>
    </head>
    <body>
    <h:form>
    <h3>
    Welcome to JavaServer Faces,
    <h:outputText value="#{user.name}"/>!
    </h3>
    </h:form>
    </body>
    </f:view>
    </html>

  4. Откройте строку адреса http://127.0.0.1:8080/loginjsf/ в окне броузера и убедитесь, что JSF-приложение работает.


Литература



Дополнительно


Включить по умолчанию отдачу контента в кодировке UTF-8 можно в server.xml Tomcat'а:

< connector
executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"
useBodyEncodingForURI="utf-8"/>

2 комментария:

Анонимный комментирует...

так и так это можно сделать добавив либы в application.
интересно другое как томкат работает с jsf? если какой нибудь эксепшон, то тогда томкат летит....

iZEN комментирует...

Exceptions ловятся контейнером и обрабатываются по правилам, аналогичным JSP/Servlet's, поэтому контейнер не должен валится.