2011-02-15 4 views
3

Comment un projet JSP peut-il être lancé sur Tomcat? Je copie le dossier WebContent au dossier webapp d'Apache mais il ne peut pas trouver ma page de jsp, mais si je change jsp en jsf (index.jsf) fonctionne bien. Comment puis-je résoudre ce problème?Exécuter un projet JSF sur Apache Tomcat

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> 

Erreur: type de rapport d'état

message /Graph/index.jsp

description The requested resource (/Graph/index.jsp) is not available.

+1

vous devez ajouter plus d'informations. –

+0

A quoi ressemble votre structure de dossiers Tomcat et comment essayez-vous d'appeler les JSP? Dans une application jsf, vous devez les appeler avec l'extension de fichier .jsf. – morja

Répondre

10

Ce n'est pas un problème. C'est le comportement attendu. Vous ne comprenez que mal comment fonctionne l'API Servlet de base. Vous avez configuré le standard JSF FacesServlet pour écouter sur les URL correspondant à /faces/* et vous avez configuré Apache MyFaces spécifique MyFacesServlet pour écouter sur URls correspondant *.jsf et *.faces.

Pour lancer JSF, vous devez ouvrir la page dans le navigateur par une URL qui correspond au mappage du FacesServlet. Compte tenu du fait que vous avez un fichier index.jsp et que votre chemin de contexte est Graph et que vous avez configuré deux servlets JSF sur trois modèles d'URL différentes, vous pouvez ouvrir la page JSP par les URL suivantes:


Dit que, votre configuration est trop compliquée. Débarrassez-vous de l'entrée MyFacesServlet et de tous les mappages d'URL associés (avec le nom de servlet faces). Tenez-vous simplement à la norme FacesServlet et utilisez plutôt son mapping, ou modifiez-le à la place. Personnellement, je recommande d'utiliser *.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> 

Ensuite, vous pouvez simplement ouvrir la page par http://localhost:8080/Graph/index.jsf.


Rien à voir avec le problème concret, votre welcome-file ne fonctionnera pas de cette façon. Tomcat donnerait une erreur HTTP 404 sur cela (page/ressource introuvable). Vous devez spécifier index.jsf en tant que welcome-file et fournir un fichier vide dans le même dossier que votre index.jsp. De cette façon Tomcat sera dupé que le fichier existe et affiche la page en appelant simplement http://localhost:8080/Graph.


Si votre préoccupation est qu'il est possible d'ouvrir des pages JSF par leur extension *.jsp qui entraînerait une RuntimeException: FacesContext not found et vous avez en fait pas un fichier JSP qui doit être servi à la vanille simple, vous pouvez restreindre directement l'accès aux fichiers JSP par la contrainte de sécurité suivante dans 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> 

(dans JSF 2.0 est par le chemin ne sont plus nécessaires, avec la technologie d'affichage par défaut Facelets il est possible de cartographier la FacesServlet sur seulement *.xhtml , qui est la même que l'extension par défaut des fichiers Facelets)

0

vous pouvez déployer votre application avec le gestionnaire de tomcat

http://tomcatIP:8080/manager/html

là, vous pouvez télécharger votre application et il devrait fonctionner hors de la boîte si vous n'avez aucune idée quel nom d'utilisateur et mot de passe vous devez taper, vous devez configurer votre tomcat-users.xml