User Tools

Site Tools


jsf-ru:quickstart:hello_world

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

jsf-ru:quickstart:hello_world [2006/01/15 19:55]
slonopotamus
jsf-ru:quickstart:hello_world [2019/06/12 16:08]
Line 1: Line 1:
-[[jsf-ru:quickstart|К списку]] 
-====== Hello, World! ====== 
-Как и все нормальные люди, начнём изучение JSF с простенькой программы Hello, world! 
-===== Необходимые ингредиенты ===== 
-  * Веб-сервер, поддерживающий Servlet API 2.3 и JSP 1.2 или выше. Хотя на дворе уже давно 21-ый век и я посоветую скачать веб-сервер с поддержкой Servlet API 2.4 и JSP 2.0. Поверьте, вам же будет проще и удобней. Рекомендую [[http://tomcat.apache.org/|Apache Tomcat]] или [[http://www.jboss.com/products/jbossas|JBoss Application Server]]. Tomcat менее функционален, но значительно "легче" и быстрее. Если вы не знаете, в чём между ними разница, то с большой вероятностью вам хватит Tomcat'а. В любом случае для этого приложения разницы не будет никакой. В любом случае если вы будете писать свои JSF-приложения //правильно//, то вы с легкостью в любой момент сможете менять веб-сервер. **ВНИМАНИЕ!** Если вы выбрали JBoss, то прочитайте про [[jsf-ru:faq:with_jboss|специфику работы JSF и JBoss'а]]. 
-  * Реализация JSF. На данный момент существуют две реализации: 
-    * [[http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=22&PartDetailId=jsf-1_1_01-fcs-oth-JPR&TransactionId=noreg|JavaServer Faces v1.1.01 Reference Implementation]] 
-    * [[http://myfaces.apache.org/|Apache MyFaces]] 
-  Я работаю с первой, поэтому советую вам сделать то же. Иначе я просто не смогу вам помочь, если будут появляться какие-то ошибки, связанные с конкретной реализацией JSF. 
-  * JSTL((Вроде бы.)) 
-  * Прямые руки 
  
- 
-===== Рецепт ===== 
-  - Создайте обычное веб-приложение со следующей стурктурой: <code> 
-jsf-helloworld/ 
-              WEB-INF/ 
-                     lib/ 
-                     web.xml 
-                     faces-config.xml 
-              index.jspx 
-</code> 
-  - Поместите в папку ''lib'' JAR-файлы с реализацией JSF. 
-  - Отредактируйте файл web.xml и добавьте в него следующее содержимое: <code xml> 
-<?xml version="1.0" encoding="UTF-8"?> 
-<web-app version="2.4" 
-         xmlns="http://java.sun.com/xml/ns/j2ee" 
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
-  <display-name>Hello, World</display-name> 
-  <context-param> 
-    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
-    <param-value>server</param-value> 
-  </context-param> 
-  <context-param> 
-    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
-    <param-value>.jspx</param-value> 
-  </context-param> 
-  <context-param> 
-    <param-name>com.sun.faces.validateXml</param-name> 
-    <param-value>true</param-value> 
-  </context-param> 
-  <context-param> 
-    <param-name>com.sun.faces.verifyObjects</param-name> 
-    <param-value>true</param-value> 
-  </context-param> 
-  <servlet> 
-    <display-name>Faces Servlet</display-name> 
-    <servlet-name>Faces Servlet</servlet-name> 
-    <servlet-class> 
-      javax.faces.webapp.FacesServlet 
-    </servlet-class> 
-    <load-on-startup>0</load-on-startup> 
-  </servlet> 
-  <servlet-mapping> 
-    <servlet-name>Faces Servlet</servlet-name> 
-    <url-pattern>*.jsf</url-pattern> 
-  </servlet-mapping> 
-  <listener> 
-    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
-  </listener> 
-  <security-constraint> 
-    <web-resource-collection> 
-      <web-resource-name>Restrict direct access to JSPs</web-resource-name> 
-      <url-pattern>*.jspx</url-pattern> 
-    </web-resource-collection> 
-    <auth-constraint></auth-constraint> 
-  </security-constraint> 
-</web-app> 
-</code> Для тех, кто знаком с web-приложениями на Java, тут всё должно быть вполне понятно. Несколько пояснений: 
-    - Я люблю JSPX, поэтому в качестве расширения для файлов, которые JSF должен считать свои страницы, выбрал именно jspx. Если вам так не нравится, то можете спокойно убрать параметр ''javax.faces.DEFAULT_SUFFIX'' (по умолчанию он равен именно ''.jsp''). 
-    - Сервлет, отвечающий за JSF, я привязываю к расширению ''*.jsf''. Хотя в официальной документации чаще используется ''.faces'', оно слишком длинное, поэтому я его не использую. 
-    - Крайне необходимо запретить прямой доступ к JSP(X)-страницам. Т.к. если к ним обратиться напрямую (через из собственное расширение ''.jsp(x)'', а не через сервлет (расширение ''.jsf''), то всё будет плохо. Это сделано с помощью ''security-constraint'''а, которому не даны никакие роли. 
-    - **ВНИМАНИЕ!** Совершенно необходимо не забыть добавить листенера, иначе ничего работать не будет. Самое гнусное, что это нигде не написано, поэтому все начинающие JSF-писатели тратят кучу времени на попытки выяснить, почему у них ничего не работает. 
-    - Если вы решили использовать MyFaces, то вам понадобится убрать все настройки, начинающиеся на ''com.sun'' (они действительны только для Sun'овской реализации JSF) и изменить листенера на //какой-то другой// FIXME. 
-  - Отредактируйте файл ''faces-config.xml'' и добавьте в него следующее содержимое:<code xml> 
-<?xml version='1.0' encoding='UTF-8'?> 
-<!DOCTYPE faces-config PUBLIC 
-    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" 
-    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> 
-<faces-config> 
-</faces-config> 
-</code> Это основной конфиг для JSF-приложений. В нём пока ничего нет, но он понадобится для последующих примеров. 
-  - Отредактируйте файл ''index.jspx'' и добавьте в него следующее содержимое:<code xml> 
-<?xml version="1.0" encoding="UTF-8"?> 
-<jsp:root xmlns:f="http://java.sun.com/jsf/core" 
-          xmlns:jsp="http://java.sun.com/JSP/Page" 
-          xmlns:h="http://java.sun.com/jsf/html" 
-          xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-          xmlns="http://www.w3.org/1999/xhtml" 
-          version="2.0"> 
-    <f:view> 
-      <html> 
-      <body> 
-        <h:form> 
-          <h:outputText value="Hello, world!"/> 
-        </h:form> 
-      </body> 
-      </html> 
-    </f:view> 
-</jsp:root> 
-</code> Что здесь что: 
-    - ''<f:view>'' - это //корень всех зол//. Шучу. Это корневой тег, внутри которого должны располагаться все теги, имеющие отношение к JSF. Что делать когда теги используются в разных файлах, которые с помощью механизма ''<jsp:include>'' (или любых обёрток вокруг него) собираются в одну страницу, не спрашивайте. Потому что //я пока что не знаю//. Вообще, библиотека тегов ''<f:...>'' содержит в себе все базовые теги, не зависящие от того, какой будет формат у результирующих документов. А библиотека тегов ''<h:...>'' содержит теги, специфичные для HTML'я. 
-    - ''<h:form>'' создаёт HTML-тег ''<form>'' и кучу всякой дряни, необходимой для функционирования JSF. 
-    - И наконец, ''<h:outputText>'' выводит текст. Этот тег гораздо более функционален, чем просто вывод текста, но о его остальной функциональности вы узнаете потом. 
- 
-===== Результат ===== 
-{{hello_world.war|Конечный WAR-файл}} (для JBoss'а, нужно просто положить в папку ''deploy'' и любоваться результатом по ссылке [[http://localhost:8080/hello_world/index.jsf]]) 
jsf-ru/quickstart/hello_world.txt · Last modified: 2019/06/12 16:08 (external edit)