当前位置: 首页 > 知识库问答 >
问题:

冰面升级1.8.2到3.3,资源始终返回内容长度“0”

华俊弼
2023-03-14

我正在经历升级我们的应用程序从JEE5/冰面1.8.2到JEE6/冰面3.3的摘录。我遵循了我在这里找到的材料:从JSF 1.2迁移到JSF 2.0以及提供的冰面:http://www.icesoft.org/wiki/display/ICE/ICEfaces1. x兼容性

所以现在我可以成功地将我们的应用程序部署到GlassFish 3。

以下是web.xml:

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>pdb</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
       <context-param>
        <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
        <param-value>false</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Resource Servlet</servlet-name>
        <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Resource Servlet</servlet-name>
        <url-pattern>/xmlhttp/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
        <url-pattern>/icefaces/*</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>org.icefaces.ace.theme</param-name>
        <param-value>rime</param-value>
    </context-param> 
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
    <context-param>
        <param-name>com.sun.faces.defaultResourceMaxAge</param-name>
        <param-value>604800</param-value>
    </context-param>
    <error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/index.html</location>
    </error-page>
    <!-- ICE FACES ADDED -->

    <!-- Facelets Custom Components -->
    <context-param>
        <param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
        <param-value>/WEB-INF/facelets/imsref_common_taglib.xml;/WEB-INF/facelets/imsref_pdb_taglib.xml</param-value> 
    </context-param>    

    <listener>
        <listener-class>LifeCycleListener</listener-class>
    </listener>
    <filter>
        <filter-name>RedirectFilter</filter-name>
        <filter-class>RedirectFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>RedirectFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>Transactions</filter-name>
        <filter-class>TransactionalFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Transactions</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
    <!--Security Settings-->
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>pdb-auth-realm</realm-name>
        <form-login-config>
            <form-login-page>/login.jsf</form-login-page>
            <form-error-page>/loginerror.jsf</form-error-page>
        </form-login-config>
    </login-config>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>pdb</web-resource-name>
            <url-pattern>/secure/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>user</role-name>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    <!--Security constraint so only admin role can access the monitoring page-->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>monitoring</web-resource-name>
            <url-pattern>/monitoring</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>


    <security-role>
        <description>Administrator. Is the super-user. Can do everything. This role includes all other roles.</description>
        <role-name>admin</role-name>
    </security-role>
   <mime-mapping>
     <extension>aspx</extension>
     <mime-type>text/html</mime-type>
   </mime-mapping>
   <mime-mapping>
       <extension>png</extension>
       <mime-type>image/png</mime-type>
   </mime-mapping>
</web-app>

现在当我导航到

https://localhost:8181/pdb/secure/main.jspx

我被重定向到登录页面,但只加载jsf组件。这些都不是。正在加载css,当我导航到资源时,服务器的响应总是内容长度为“0”,但状态为200。任何图片都一样。

当我对我们的领域进行身份验证时,我可以在/pdb/(即任何垃圾URL)之后输入任何URL

https://localhost:8181/pdb/somenonexistantpage

服务器响应为200 OK,内容长度为“0”

应用程序的结构如下:

WEB-INF\login.xhtml
WEB-INF\index.xhtml
WEB-INF\loginerror.xhtml
WEB-INF\css\<custom css>
WEB-INF\resources\components\<components>
WEB-INF\resources\images\<images>
WEB-INF\resources\icons\<icons>
WEB-INF\secure\<all .xhtml jsf pages> 

获取请求:

https://localhost:8181/pdb/xmlhttp/css/rime/rime.css

仅返回以下内容:

Content-Length:"0"
Date:"Tue, 19 Nov 2013 19:31:32 GMT"
Server:"GlassFish Server Open Source Edition 3.1.2.2"
X-Powered-By:"Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2.2 Java/Oracle Corporation/1.7)"

共有1个答案

蒋联
2023-03-14

为了结束这个问题的循环,我的TransactionFilter失败了,我们从未链接过过滤器,因此资源servlet从未被命中。我确保以下代码行:

chain.doFilter(req, resp);

正在执行,资源最终被正确加载。我在几周前解决了这个问题,但我相信这就是问题所在。

 类似资料:
  • 我正在测试openNLP库以实现分类内容的自动化,但我有麻烦。我正在使用此代码,它总是返回我训练数据中的第一个类别,我正在从任何新闻网站传递完整的文章。 培训数据:http://pastebin.com/ZhxswkvJ 我正在使用的文章:http://pastebin.com/xtABGcbh 它总是返回列表中的第一个类别,我想知道我缺少了什么?当我调试它时,它会返回所有的0.25分,并出于某种

  • > 访问oauth授权URI以启动OAuth2流:http://localhost:8080/server/oauth/authorize?response_type=code&client_id=client 重定向到登录页面:http://localhost:8080/server/login 使用代码参数:http://localhost:8080/client?code=hmjo4k处理审

  • 问题内容: 我以前使用过媒体播放器,但从未遇到过此问题。每当我尝试使用MediaPlayer.create()时,该方法都会使我为null,并且无法播放声音。有什么我想念的吗? 我的sound.mp3在我的原始文件夹中,通过将声音拖到eclipse中的文件夹中,我将其放置在其中。请帮忙,因为我以前玩过声音,所以这真的困扰我:( 问题答案: 如果create() API由于某种原因失败,则返回nul

  • 问题内容: 尽管是有效的类,但以下代码会打印。 文档说方法返回 由 aClassName 命名的类对象,或者如果当前没有加载该名称的类。如果 aClassName 为,则返回。 我也试图获得当前的viewcontroller已加载但仍然得到 可能是什么问题? 更新: 即使尝试这样做,我仍然可以 问题答案: 该函数 确实 适用于(纯和Objective-C派生的)swift类,但是仅当您使用全限定名

  • 问题内容: 我觉得有点愚蠢,但它不起作用: 我有如果给定的用户是unicode。如果字符串中包含或,我想打印成功,但是我总是得到的结果。 问题答案: 隐式锚定到字符串的开头。如果要在字符串中搜索可以在字符串中任何位置的子字符串,则需要使用: 输出: 另外,Python Regexes不需要在开头和结尾都有一个。 最后,我添加到该行的末尾,因为我认为这就是您想要的。否则,您会得到类似的信息,但并不太

  • 我的安全配置似乎不正确。无论我在使用hasRole时做什么,我的endpoint总是返回403。 此外,除非我在这两个和。很明显,我遗漏了一些东西。 基本上,我希望所有内容都需要身份验证,但只有当用户是某些组的成员时(现在只需要admin),少数endpoint才可以访问。 我的安全配置如下。旁边的一切都有效。 我的AuthenticationConfiguration如下 我的Authoriza