一、前言
信息化在不断发展,相应的开发工具也在不断的改进升级,在Java方面,Struts2是一个新的优秀的Web框架,它结合了Struts和xWork两种框架的优点,使程序员开发及后期维护效率都大大提高,随着它的应用越来越广泛,客户在集成金格控件时会出现客户端请求被过滤的现象,这时需要对Struts2配置文件等做相应修改就可以了。
二、原因及解决方法
产生这种情况的原因可能是:金格控件服务器端组件采用了封装好了的服务器组件,Java中如iWebOffice是已编译好的iMsgServer2000.class文件,asp等采用的是iMsgServer2000.dll组件,由于类似组件都封装了由客户端发送的请求对象(request)以及有些组件对响应对象(response)的处理,对该对象的一些独立操作可能与Struts2请求响应处理机制产生了冲突,因而被Struts2过滤器拦截了。
目前可以通过对Struts2的过滤请求范围进行修改,可以避免造成这种情况发生,以下是详细介绍产生的现象及修改方法。
2.1修改Web.XML配置文件
1)在未对该配置文件做修改前,原文件中Struts2设置如下:
通过“/*”这样的设置将会对客户端发送过来的所有请求都进行处理,当客户端发送这样的请求如iWebOffice示例中的控件的WebUrl属性指定的服务器处理程序时,会出现如下图所示的错误:
(图2-1:未知路径错误)
2)对Web.xml配置文件中Struts2过滤范围进行修改,修改内容如下:
通过将过滤的请求范围设置为“*.action”及“*.jsp”,Struts2过滤器只会过滤以这两个为后缀的请求,大家此时一定会奇怪,为什么连对jsp页面的请求也要过滤,以下我详细说明下。
客户在使用Struts2框架时,有些页面引用了Struts2标签,类似如下:
如果不通过Struts2过滤“*.jsp”请求,页面中引用的Struts2标签库就得不到Struts2框架的支持,该页面也将无法识别,会产生如下图错误:
但过滤了该请求又会产生一个新的问题,由于我们的示例后台处理程序大多是由jsp页面来完成的,如iWebOffice中由OfficeServer.jsp页面来处理,所以请求类似页面时同样会出现(图2-1)一样的错误,目前的解决办法是将此类页面改成Servlet来处理,下面会详细介绍。
2.1修改后台处理程序页面
以下详细介绍对iWebOffice示例中使用的OfficeServer.jsp页面的修改。
1)新建一个Java类, 将OfficeServer.jsp中“<%! %>”标记内的全部内容拷到该ja
va类中,如下所示:
由于内容太长,这里只显示部分,这样做相当于是将原页面中的处理程序封装成了一个JavaBean,然后可以通过一个Servlet类来处理该JavaBean。
2)新建一个Servlet类,引用上面的Java类,如下所示:
通过以上两步设置,客户端可以通过访问该Servlet来实现控件与后台的交互操作。
另外iWebOffice示例中对印章的添加页面(/Signature/SignatureAdd.jsp)也引用了已编译好的iFileUpLoad2000.class文件,也会产生(图2-1)的错误,用户可以参考上面对OfficeServer.jsp页面的修改也将其改为Servlet形式处理,在此不做详细介绍。
三、总结
通过以上的介绍,可以很好的解决这个问题,用户在Struts2环境下使用金格其它控件如果也出现类似问题,可以参考本文来解决,如还有问题请与金格联系。
希望本文可以给每位使用金格iWebOffice系列控件的朋友带来帮助。