JSF应用程序为子上下文提供404

时间:2010-09-19 05:50:47

标签: jsf tomcat6

我正在使用一个使用JSF的Web应用程序。我在'web'下有一个名为'admin'的文件夹,我在'admin'文件夹下有几个jsp页面。我可以访问'web'下的jsp页面但是当我尝试访问'admin'下的页面时,我得到'404-Requested resource not found' 我的应用程序的'context.xml'是这样的:

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

这个东西适用于我的本地tomcat但是当我将它部署到我的web托管服务提供商tomcat时我有上面提到的问题。 我究竟需要做些什么来解决这个问题。

这是我在托管上的应用程序的server.xml提供了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>

或者我是否需要将URL-Mapping添加到我的web.xml?

我在web.xml中有关于'/ admin / *'url-pattern

的servlet过滤器
    <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>

过滤器代码如下:

    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;
    }
}

1 个答案:

答案 0 :(得分:0)

/WEB-INF中的文件可公开访问。我不知道它为什么在本地工作,但这违反了servlet规范。此外,JSF无法将视图转发到/WEB-INF文件夹中的JSP页面,它们应放在公共webcontent(一个文件夹级别高于/WEB-INF文件夹)。