服务器日志中出现大量异常:file:/wap/portal/status.jsp not found

2014年09月18日 Liferay 暂无评论 阅读 3,111 views 次

Liferay版本:6.1.1

今天发现服务器portal/logs目录下面的日志中出现了大量的下面的的异常。分析解决思路如下:

1、正常的访问没有任何异常;

2、根据异常的堆栈信息可以看到里面有wap的字样,怀疑是移动设备访问时出现的,使用手机访问(Android设备),用手机版chrome、UC、QQ浏览器访问。之所以用这么多浏览器,是因为基于之前对Liferay的了解,liferay识别是否是移动设备,主要是根据头信息里面的accept里面是否包含wap.xhtml字符串来判断的,现在的手机上的浏览器,很多都不再在请求里面附加这样的内容,经测试只有QQ浏览器,默认的时候会在请求里面添加wap.xhtml。

3、在手机上访问会进入到手机的主题,由于此系统没有单独开发手机的主题,所以进入的页面中只有菜单,后台中也无异常。

4、再次观察异常,是/wap/portal/status.jsp这样的页面找不到,根据liferay正常的情况,要进入html/portal/status.jsp的情况是出出404的时候,所以在手机浏览器的地址栏里面输入一个不存在的URL,在控制台中重现异常。

5、到现在问题的原因知道了。当使用某些手机浏览器访问的时候,liferay会识别为手机的主题,访问不存在的页面时,会出现此问题,但是手机主题里面没有提供找不到页面时的处理页面,所以出现了此问题。

解决方法:

现在知道问题,要解决基本上是让liferay不再识别手机访问(也没有开发手机主题,识别也没意义),将所有的请求都转向到正常的浏览器访问的请求。

但是Liferay并没有提供一个配置项来进行配置是否禁用掉wap,所以只有自己修改Liferay源码了

关键代码为:com.liferay.portal.servlet.browserSnifferImpl.java里面的isWapXhtml()方法

注释掉里面处理内容,让他直接返回false,如下图

browserSnifferImpl

然后对Liferay源码进行编译,打包,然后复制portal-impl.jar覆盖服务器上的即可。

编译过程参看《Liferay 6.1开发学习(五):编译调试修改源码

</pre>
<pre>05:46:18,887 ERROR [http-apr-80-exec-550][LiferayMethodExceptionEventHandler:33] javax.servlet.ServletException:</pre>
<pre> File &quot;/wap/portal/status.jsp&quot; not found
javax.servlet.ServletException: File &quot;/wap/portal/status.jsp&quot; not found
 at org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:412)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)

 at org.apache.jsp.wap.common.themes.portal_jsp._jspx_meth_liferay_002dtheme_005finclude_005f0(portal_jsp.java:421)
 at org.apache.jsp.wap.common.themes.portal_jsp._jspService(portal_jsp.java:396)

 at com.liferay.portal.struts.StrutsUtil.forward(StrutsUtil.java:79)
用户头像

给我留言

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: