struts2.0升级struts2.3.3问题处理

来源:互联网 发布:android入门编程视频 编辑:程序博客网 时间:2024/05/18 18:18

由于工程是比较早的所以使用的是struts2.0,其中有很多的漏洞,所以公司要求升级struts2.3.3.
现已升级完成并上现网所以按我说的步骤做就一定OK。
1.下载struts-2.3.3-all.zip ,之所以下载all是因为目录中有例子工程。路径如:D:\share\struts-2.3.3-all\struts-2.3.3\apps\struts2-blank.war。
2.在struts2-blank.war\WEB-INF\lib文件夹下是struts-2.3.3所需要的最基本的JAR包,把这些JAR包复制到你的工程并删除同名不同版本的JAR包。
3.由于struts-2.3.3的过滤器名称有修改所以需要修改struts.xml:
   a)将<interceptor-ref name="filterParams"/>修改为<interceptor-ref name="params"/>
  b)将<interceptor-ref name="static-params"/>修改为<interceptor-ref name="staticParams"/>
4.最后需要为工程中的所有<s:select>标签添加name属性,如果之前没有添加的话.否则会报freemaket的错误。
5.不能在静态方法中使用#号,例 如:<s:property value="@com.jungle.enums.BillStatus@valueOf(#attr.status).name"/>,不能将#attr.status做为参数传递,需采用代码块或其它方式实现。
6.添加支持静态方法调用:<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
7、日志不能显示问题修改
    <!-- ognl 调用静态方法:启动true 关闭 false -->
    <constant name="struts.ognl.allowStaticMethodAccess" value="true" />

 

8、javaBean属性生成的getxx()和setxx()方法第一个字母要大写。

9、jsp页面定义属性name和id确保只有单一,不能重复。

 

1、页面里面其实有个隐藏域传了index参数,而实际js代码跳转action的时候又重复的带了index=xx参数,action跳转url可将index参数删掉。
2、检出页面是否重复定义了name相同的参数。例如:name=groupInfo.GROUPID 导致后台获取不得值,而取的默认值int=0;
3、导出excel页面日志记录两次的问题怎么解决的:把 jsp里面的submit改成button
4、报表生产图表报错:
org.apache.jasper.JasperException: /WEB-INF/pages/report/Report03AManager/ReportAChart.jsp 
(line: 17, column: 47) Attribute value  new String("50") is quoted with " which must be escaped when used within the value

 
      <cewolf:param name="maxSize" value="<%= new String("50")%>"></cewolf:param>
   <cewolf:param name="maxSize"
    value="<%=new String(String.valueOf(Constants.MAXROW)) %>"></cewolf:param>
   <!--变量值是可配置的new String("50")  -->
   
5、<jsp:param name="start"  value="<%=request.getParameter("v1") %>"/> 改成  <jsp:param name="start"  value='<%=request.getParameter("v1") %>'/>  

6、通过tomcat打开jsp页面时,出现错误org.apache.jasper.JasperException: /check1.jsp(35,47) Attribute value request.getParameter("username") is quoted with " which must be escaped when used within the value问下,怎么解决。

“将value后面的"username”改为\"username\"具体原由有可能是tomcat的版本不同导致的。jsp在编译jsp页面时,将 <%=request.getParameter("searchtype")%>作为变量进行处理。因此,遇到里面的"会报错。”网上找的答案,是tomcat的问题,建议使用6.0以上版本的tomcat就没有问题了



7、 SessionListener.java 会话失效资源国际化特殊处理String logInfo=getResouceInfo(this.getLocale(),"ApplicationResources","opatorlog.session.invalidation","");

8、  后台的br提示信息在jsp页面显示还是br ,在error.jsp页面增加escape="false"不让jsp转义<s:actionerror escape="false"/>

9.删除的时候页面跳转到了首页:页面添加隐藏域, <input type="hidden" name="index" id="index" value='<s:property value="index" />' /> 去掉url的后面的index
 input中要加上id="index"
 
 10、获取不到定义的参数
<action name="deleteDocumentItem" class="deleteDocumentItem">         
     <result name="success" type="redirectAction">        
           <param name="actionName">listDocumentItem</param>        
           <param name="documentCatalogId">${documentCatalogId}</param>   
     </result>      
</action> 
                 
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action).dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) 
Xml代码 :

<result name="success">/main.jsp</result> 
<result name="success">/main.jsp</result> 
以上写法使用了两个默认,其完整的写法为: 
<result name="success" type="dispatcher"> 
        <param name="location">/maini.jsp</param> 
</result>

用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
location只能是页面,不能是另一个action(可用type="chain"解决)。

redirect 类型用于重定向到一个页面,另一个action或一个网址。 
Xml代码:

<result name="success" type="redirect">aaa.jsp</result> 
<result name="success" type="redirect">bbb.action</result> 
<result name="success" type="redirect">www.baidu.com</result>

缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。

处理方法:

(方法一): 
<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result> 
(方法二): 
<result name="topic" type="redirect-action"> 
<param name="actionName">findTopics</param> 
<param name="topicId">${topicId}</param> 
</result>

 
redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action 
Xml代码:

<result name="err" type="redirect-action"> 
    <param name="actionName">重定向的Action名</param> 
     <param name="namespace">重定向Action所在的名字空间</param> 
</result> 
redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
 

chain 用于把相关的几个action连接起来,共同完成一个功能。 
Xml代码:

<action name="step1" class="test.Step1Action"> 
     <result name="success" type="chain">step2.action</result> 
</action> 
<action name="step2" class="test.Step2Action"> 
<result name="success">finish.jsp</result> 
</action> 
处于chain中的action属于同一个http请求,共享一个ActionContext


结果类型用于直接在页面上显示源代码

Xml代码:

<result name="err" type="plaintext"> 
    <param name="location">具体的位置</param> 
    <param name="charSet">字符规范(如GBK)</param> 
</result>

转自:http://blog.csdn.net/ambili/article/details/19123459

0 0
原创粉丝点击