Запустите проект JSF на Apache Tomcat - PullRequest
3 голосов
/ 15 февраля 2011

Как можно пообедать проектом JSP на Tomcat?Я копирую папку WebContent в папку webapp Apache, но она не может найти мою страницу jsp, но если я изменю jsp на jsf (index.jsf), то все будет работать нормально.Как я могу решить эту проблему?

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Graph</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <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>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <description>
    This parameter tells MyFaces if javascript code should be allowed in
    the rendered HTML output.
    If javascript is allowed, command_link anchors will have javascript code
    that submits the corresponding form.
    If javascript is not allowed, the state saving info and nested parameters
    will be added as url parameters.
    Default is 'true'</description>
    <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <description>
    If true, rendered HTML code will be formatted, so that it is 'human-readable'
    i.e. additional line separators and whitespace will be written, that do not
    influence the HTML code.
    Default is 'true'</description>
    <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <description>
    If true, a javascript function will be rendered that is able to restore the
    former vertical scroll on every request. Convenient feature if you have pages
    with long lists and you do not want the browser page to always jump to the top
    if you trigger a link or button action that stays on the same page.
    Default is 'false'
</description>
    <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
    <param-value>true</param-value>
  </context-param>
  <servlet>
    <servlet-name>faces</servlet-name>
    <servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>controler.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>faces</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>faces</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/Upload</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  </listener>
</web-app>

Ошибка: введите отчет о состоянии

сообщение /Graph/index.jsp

описание Запрашиваемый ресурс (/Graph/index.jsp) недоступен.

Ответы [ 2 ]

10 голосов
/ 21 февраля 2011

Это не проблема.Это ожидаемое поведение.Вы просто не понимаете, как работает базовый Servlet API.Вы настроили стандарт JSF FacesServlet для прослушивания URL-адресов, соответствующих /faces/*, и настроили специфичные для Apache MyFaces MyFacesServlet для прослушивания URls, соответствующих *.jsf и *.faces.

Для получения JSFчтобы запустить, вы должны открыть страницу в браузере по URL, который соответствует отображению FacesServlet.Учитывая тот факт, что у вас есть файл index.jsp и ваш контекстный путь Graph, и что вы настроили два сервлета JSF для трех разных шаблонов URL, вы можете открыть JSP по следующим URL:


Сказал, что ваша конфигурация излишне усложнена.Избавьтесь от записи MyFacesServlet и всех связанных с ней отображений URL (с именем сервлета faces).Просто придерживайтесь стандартного FacesServlet и вместо этого используйте его отображение или измените его.Я лично рекомендую использовать *.jsf.

<servlet>
    <servlet-name>facesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Тогда вы можете просто открыть страницу с помощью http://localhost:8080/Graph/index.jsf.


Вне зависимости от конкретной проблемы, ваш welcome-file не будетработать таким образом.Tomcat выдаст ошибку HTTP 404 (страница / ресурс не найден).Вам нужно указать index.jsf как welcome-file и указать конкретный, но пустой index.jsf файл в той же папке, что и ваш index.jsp.Таким образом, Tomcat будет обманут, что файл существует и покажет страницу, просто позвонив по номеру http://localhost:8080/Graph.


Если вы обеспокоены тем, что возможно открыть JSF-страницы с расширением *.jsp, что приведет кв RuntimeException: FacesContext not found и у вас фактически нет ни одного файла JSP, который должен обслуживаться как обычный файл, вы можете ограничить прямой доступ к файлам JSP с помощью следующего ограничения безопасности в web.xml:

<security-constraint>
    <display-name>Restrict direct access to JSP files</display-name>
    <web-resource-collection>
        <web-resource-name>JSP files</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

(в JSF 2.0 это, кстати, больше не нужно, с технологией просмотра по умолчанию Facelets можно сопоставить FacesServlet только с *.xhtml, что совпадает с расширением файлов Facelets по умолчанию)

0 голосов
/ 21 февраля 2011

вы можете развернуть свое приложение с помощью менеджера tomcat

http://tomcatIP:8080/manager/html

там вы можете загрузить свое приложение, и оно должно работать из коробки если вы не знаете, какое имя пользователя и пароль вы должны ввести, вам нужно настроить tomcat-users.xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...