| Both sides previous revisionPrevious revisionNext revision | Previous revision | 
| jsf-ru:quickstart:hello_world [2006/01/14 21:32]  –  slonopotamus | jsf-ru:quickstart:hello_world [2019/06/12 16:08] (current)  – external edit 127.0.0.1 | 
|---|
| ====== Hello, World! ====== | ====== Hello, World! ====== | 
| Как и все нормальные люди, начнём изучение JSF с простенькой программы 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, то прочитайте про [[.:with_jboss|специфику работы JSF и JBoss'а]]. |   * Веб-сервер, поддерживающий 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. На данный момент существуют две реализации: |   * Реализация 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://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]] |     * [[http://myfaces.apache.org/|Apache MyFaces]] | 
|   Я работаю с первой, поэтому советую вам сделать то же. Иначе я просто не смогу вам помочь, если будут появляться какие-то ошибки, связанные с конкретной реализацией JSF. |   | 
|   * Прямые руки |   * Прямые руки | 
|   |  | 
 |  | 
| ===== Рецепт ===== | ===== Рецепт ===== | 
|     - Крайне необходимо запретить прямой доступ к JSP(X)-страницам. Т.к. если к ним обратиться напрямую (через из собственное расширение ''.jsp(x)'', а не через сервлет (расширение ''.jsf''), то всё будет плохо. Это сделано с помощью ''security-constraint'''а, которому не даны никакие роли. |     - Крайне необходимо запретить прямой доступ к JSP(X)-страницам. Т.к. если к ним обратиться напрямую (через из собственное расширение ''.jsp(x)'', а не через сервлет (расширение ''.jsf''), то всё будет плохо. Это сделано с помощью ''security-constraint'''а, которому не даны никакие роли. | 
|     - **ВНИМАНИЕ!** Совершенно необходимо не забыть добавить листенера, иначе ничего работать не будет. Самое гнусное, что это нигде не написано, поэтому все начинающие JSF-писатели тратят кучу времени на попытки выяснить, почему у них ничего не работает. |     - **ВНИМАНИЕ!** Совершенно необходимо не забыть добавить листенера, иначе ничего работать не будет. Самое гнусное, что это нигде не написано, поэтому все начинающие JSF-писатели тратят кучу времени на попытки выяснить, почему у них ничего не работает. | 
|     - Если вы решили использовать MyFaces, то вам понадобится убрать все настройки, начинающиеся на ''com.sun'' (они действительны только для Sun'овской реализации JSF) и изменить листенера на //какой-то другой// FIXME. |     - Если вы решили использовать MyFaces, то вам понадобится убрать все настройки, начинающиеся на ''com.sun'' (они действительны только для Sun'овской реализации JSF) и изменить листенера на ''org.apache.myfaces.webapp.StartupServletContextListener''.  | 
|   |   - Отредактируйте файл ''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> |   - Отредактируйте файл ''index.jspx'' и добавьте в него следующее содержимое:<code xml> | 
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | 
|     - И наконец, ''<h:outputText>'' выводит текст. Этот тег гораздо более функционален, чем просто вывод текста, но о его остальной функциональности вы узнаете потом. |     - И наконец, ''<h:outputText>'' выводит текст. Этот тег гораздо более функционален, чем просто вывод текста, но о его остальной функциональности вы узнаете потом. | 
 |  | 
| FIXME Дать ссылку на war-архив с конечным результатом. |   | 
|   | ===== Результат =====  | 
|   | {{hello_world.war|Конечный WAR-файл}} (1.7mb) (для JBoss'а, нужно просто положить в папку ''deploy'' и любоваться результатом по ссылке [[http://localhost:8080/hello_world/index.jsf]]) |