Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Tomcat и JSF


Автор: smartov 14.8.2007, 23:57
Добрый день явисты. 
На фоне изучения явы хочу попробовать для начала JSF.
Но вот беда - никак не пойму как верно ставить Tomcat и JSF чтобы все работало.

Есть инсталлятор Томката - apache-tomcat-6.0.13.exe 
Есть jsf-1_1_01.zip скачанный http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=22&PartDetailId=jsf-1_1_01-fcs-oth-JPR&TransactionId=noreg

Томкат поставил. 

Далее, куда копировать содержимое папки jsf-1_1_01 в архиве jsf-1_1_01.zip?
Я предположил что в корень сервера, чтобы все что содержалось в jsf-1_1_01/libs упало в libs Томката.

Перезапустил Томкат.
В папке Томката 'webapps/ROOT/' создал тестовое приложение как показано http://slonopotamus.org/jsf-ru/quickstart/hello_world".

Захожу на http://localhost:8080/jsf-helloworld/index.jspx

А мне в ответ куча матов
 про то что произошел exception

Код

org.apache.jasper.JasperException: An exception occurred processing JSP page /jsf-helloworld/index.jspx at line 9

6:           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7:           xmlns="http://www.w3.org/1999/xhtml"
8:           version="2.0">
9:     <f:view>
10:       <html>
11:       <body>
12:         <h:form>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


При этом в root cause имею вот следующий текст, из которого следует, что "Cannot find FacesContext"
Код

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot find FacesContext
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    org.apache.jsp.jsf_002dhelloworld.index_jspx._jspService(index_jspx.java:70)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


Там еще один root clause но с подобным текстом просто для ругого компонента.

Собствено вопрос: что я сделал неправильно?

Автор: tux 15.8.2007, 00:12
Цитата(smartov @  14.8.2007,  23:57 Найти цитируемый пост)
Далее, куда копировать содержимое папки jsf-1_1_01 в архиве jsf-1_1_01.zip?

Никуда не надо. Все библиотеки должны лежать в WEB-INF/lib приложения. Конечно, если JSF нужен многим приложениях, развернутым в Томкате, то можно и в lib Томката скопировать, но я бы не сказал, что это есть распространенная практика.

Цитата(smartov @  14.8.2007,  23:57 Найти цитируемый пост)
В папке Томката 'webapps/ROOT/' создал тестовое приложение как показано вот здесь.

Ну, это, вообще говоря, неправильно. Создай приложение просто в webapps. То есть у тебя должен быть каталог webapps/jsf-helloworld, в котором и должно болтаться приложение со всеми нужными библиотеками в WEB-INF/lib. 

Автор: smartov 15.8.2007, 11:41
Цитата(tux @  14.8.2007,  23:12 Найти цитируемый пост)
Ну, это, вообще говоря, неправильно. Создай приложение просто в webapps. То есть у тебя должен быть каталог webapps/jsf-helloworld, в котором и должно болтаться приложение со всеми нужными библиотеками в WEB-INF/lib.  

Когда я захожу на http://localhost:8080 там идет
Цитата

As you may have guessed by now, this is the default Tomcat home page. It can be found on the local filesystem at:

$CATALINA_HOME/webapps/ROOT/index.html


И 
то верно, потому что когда я помещаю jsf-helloworld просто в webapps то при заходе на http://localhost:8080/jsf-helloworld/ я вижу
Код

description The requested resource (/jsf-helloworld/) is not available.


То есть коренвая папка документов действительно $CATALINA_HOME/webapps/ROOT/  



Цитата(tux @  14.8.2007,  23:12 Найти цитируемый пост)
Все библиотеки должны лежать в WEB-INF/lib приложения.

Положил библиотеки из архива из libs в приложения.
Структура папки такая:

Код

c:\usr\bin\tomcat\webapps\ROOT\jsf-helloworld\
    index.jspx
    WEB-INF\
        faces-config.xml
        web.xml
        WEB-INF\lib\
            commons-beanutils.jar
            commons-collections.jar
            commons-digester.jar
            commons-logging.jar
            html_basic.tld
            jsf-api.jar
            jsf-impl.jar
            jsf_core.tld
            web-facesconfig_1_0.dtd
            web-facesconfig_1_1.dtd

            

Результат тот, что и был.

Но с другой стороны, я взял из папки samples что шли с jsf war файлик сампла, положил его в $CATALINA_HOME/webapps, томкат через пару секнд это отмониторил и развернул его, после чего sample-приложение успешно работало.
Я запаковал в war jsf-helloworld, положил его в webapps, томкат его распаковал, при попытке зайти на приложение - Access denied. Переименовал index.jspx в index.jsp - опять FacesContext not found. 

У меня такое впечатление, что слонопотамус неверно написал код или не все рассказал.

Автор: tux 15.8.2007, 12:10
Цитата(smartov @  15.8.2007,  11:41 Найти цитируемый пост)
То есть коренвая папка документов действительно $CATALINA_HOME/webapps/ROOT/  

Это не PHP+Apache, здесь концепция другая, нет никакой корневой папки. У каждого веб-приложения есть ассоциированный контекст, у приложения ROOT  он такой - "/", у твоего приложения, например, такой - "/jsf-helloworld". Вот начиная с этого контекста приложение и разворачивается. В принципе можешь тот же самый ROOT развернуть с любым другим контекстом. Соответственно, приложение у тебя лежит не там, должно быть в c:\usr\bin\tomcat\webapps\jsf-helloworld\. А вот почему оно не разворачивается - это другой вопрос. При запуске Томката должно быть либо сообщение, что приложение jsf-helloworld смонтировано, либо какая-то ошибка.

Автор: smartov 15.8.2007, 16:26
tux, 
Цитата(tux @  15.8.2007,  11:10 Найти цитируемый пост)
Это не PHP+Apache, здесь концепция другая, нет никакой корневой папки.

Если бы не было корневой папки, согласись, не было бы определено откуа начинать считать контекст ;-)
Но теперь я понял, что ROOT просто как отдельное приложение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)