2010-09-19 4 views
0

Je travaille sur une application web qui utilise JSF. J'ai un dossier appelé 'admin' sous 'web' et j'ai quelques pages jsp sous le dossier 'admin'. Je peux accéder aux pages jsp sous 'web' mais quand j'essaie d'accéder aux pages sous 'admin' j'obtiens '404-La ressource demandée est introuvable' Le 'context.xml' pour mon application est quelque chose comme ceci:Application JSF donnant 404 pour un sous-contexte

<Context antiJARLocking="true" path="/MyApp"/> 

Cette chose fonctionne sur mon tomcat local, mais quand je déploie cela à mes fournisseurs d'hébergement Web tomcat j'ai mentionné le problème ci-dessus. Que dois-je faire exactement pour résoudre ce problème?

est ici server.xml pour mon application sur l'hébergement offre tomcat:

<Host name="myapp.com" appBase="/home/myapp/public_html"> 
     <Alias>www.myapp.com</Alias> 
     <Context path="" reloadable="true" docBase="/home/myapp/public_html" debug="1"/> 
     <Context path="/manager" debug="0" privileged="true" 
      docBase="/usr/local/jakarta/tomcat/server/webapps/manager"> 
     </Context> 
    </Host> 

Ou dois-je ajouter URL Mapping à mon web.xml?

Je suit filtre servlet dans le fichier web.xml pour '/ admin/*' url-pattern

<filter> 
    <filter-name>SecurityFilter</filter-name> 
    <filter-class>com.myapp.SecurityFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SecurityFilter</filter-name> 
    <url-pattern>/admin/*</url-pattern> 
</filter-mapping> 

Et le code de filtre est le suivant:

public void doFilter(ServletRequest request, ServletResponse response, 
        FilterChain chain) throws IOException, ServletException { 

    lgMgr.logDebug("doFilter() is called..."); 
    String validuser = null; 
    HttpServletRequest req = (HttpServletRequest) request; 
    HttpServletResponse res = (HttpServletResponse) response;       
    HttpSession session = req.getSession(true);   

    //If authorization key not in session, redirect to login page. 
    validuser = (String) session.getAttribute(Common.AUTH_USER); 

    if(validuser != null) { 
     lgMgr.logDebug("doFilter(): User is allowed to access the page..."); 
     //If the user is allowed access to the URI, let the flow proceed as normal 
     chain.doFilter(request, response); 
     return; 
    } else { 
     lgMgr.logDebug("doFilter(): User is not allowed to access the page, redirecting user login..."); 
     //User not allowed access - redirect to login page 
     res.sendRedirect(req.getContextPath() + "/AdmLogin.jsf"); 
     return; 
    } 
} 

Répondre

0

fichiers dans /WEB-INF sont pas accessible au public. Je n'ai aucune idée de pourquoi cela fonctionne localement, mais cela viole la spécification de servlet. En outre, JSF ne peut pas transférer les vues vers les pages JSP dans le dossier /WEB-INF, elles doivent être placées dans le contenu Web public (un dossier de niveau supérieur au dossier /WEB-INF).

+0

@BalusC, j'ai essayé avec votre réponse, maintenant j'ai toutes les pages un niveau qui est sous 'WEB' et j'ai le dossier 'admin' dans 'WEB' et quelques pages dans 'admin'. Je peux accéder aux pages sous "WEB" mais pas sous WEB/admin Dois-je ajouter un mappage de servlet ou quelque chose? –

+0

Non, vous n'avez pas besoin. Avez-vous des servlets ou des filtres ou des contraintes dans 'web.xml' qui pourraient être en train de devenir fous? Gardez également à l'esprit que les chemins/noms de fichiers dans les URL sont sensibles à la casse. Cela ne fonctionnera pas si le dossier s'appelle 'Admin' et que vous utilisez' admin' dans l'URL. – BalusC

+0

@BalusC, Oui je suit filtre web.xml: SecurityFilter com.myapp.SecurityFilter SecurityFilter /admin/*

Questions connexes