Struts2 升级由2.3.4.1 升级到2.5.17

Tomcat升级:

新增替换JAR包:

需要删除旧版本中的JAR包,替换为新版本中的JAR包,具体操作如下:

替换JAR

参照如下表格进行替换:

新版JAR包名称

旧版JAR包名称

asm-5.2.jar

asm-3.2.jar

asm-commons-5.2.jar

asm-commons-3.3.jar

asm-tree-5.2.jar

asm-tree-3.3.jar

commons-collections-commons-collections-3.2.1.jar

commons-collections-3.2.1.jar

commons-digester-2.0.jar

commons-digester-1.8.1.jar

commons-fileupload-1.3.3.jar

commons-fileupload-1.2.2.jar

commons-io-2.5.jar

commons-io-1.4.jar

commons-lang3-3.6.jar

commons-lang3-3.1.jar

commons-lang-commons-lang-2.5.jar

commons-lang-2.5.jar

freemarker-2.3.26-incubating.jar

freemarker-2.3.16.jar

ica-dao-unicom-0.0.1-SNAPSHOT.jar

ica-dao-unicom-0.0.1-SNAPSHOT.jar

ica-intercept-unicom-0.0.1-SNAPSHOT.jar

ica-intercept-unicom-0.0.1-SNAPSHOT.jar

ica-lang-unicom-0.0.1-SNAPSHOT.jar

ica-lang-unicom-0.0.1-SNAPSHOT.jar

ica-misc-unicom-0.0.1-SNAPSHOT.jar

ica-misc-unicom-0.0.1-SNAPSHOT.jar

ica-service-unicom-0.0.1-SNAPSHOT.jar

ica-service-unicom-0.0.1-SNAPSHOT.jar

ognl-3.1.15.jar

ognl-3.0.5.jar

struts2-convention-plugin-2.5.17.jar

struts2-convention-plugin-2.3.4.1.jar

tiles-servlet-3.0.7.jar

tiles-servlet-2.1.4.jar

struts2-core-2.5.17.jar

struts2-core-2.3.4.1.jar

struts2-json-plugin-2.5.17.jar

struts2-json-plugin-2.3.4.1.jar

tiles-jsp-3.0.7.jar

tiles-jsp-2.1.4.jar

javassist-3.20.0-GA.jar

javassist-3.12.1-GA.jar

tiles-core-3.0.7.jar

tiles-core-2.1.4.jar

struts2-tiles-plugin-2.5.17.jar

struts2-tiles-plugin-2.1.8.1.jar

tiles-api-3.0.7.jar

tiles-api-2.1.4.jar

ica-version-unicom-0.0.1-SNAPSHOT.jar

ica-version-unicom-0.0.1-SNAPSHOT.jar

ica-view-unicom-0.0.1-SNAPSHOT.jar

ica-view-unicom-0.0.1-SNAPSHOT.jar

log4j-1.2-api-2.7.jar

log4j-1.2.16.jar

 

 

新增JAR

参照如下表格进行新增:

新增JAR包名称

jackson-annotations-2.9.0.jar

jackson-core-2.9.4.jar

jackson-databind-2.9.4.jar

jackson-dataformat-xml-2.1.2.jar

jackson-module-jaxb-annotations-2.1.2.jar

jcl-over-slf4j-1.7.6.jar

json-lib-2.4-jdk15-1.0.jar

log4j-api-2.7.jar

log4j-core-2.7.jar

tiles-autotag-core-runtime-1.2.jar

tiles-el-3.0.7.jar

tiles-freemarker-3.0.7.jar

tiles-ognl-3.0.7.jar

tiles-request-api-1.0.6.jar

tiles-request-freemarker-1.0.6.jar

tiles-request-jsp-1.0.6.jar

tiles-request-servlet-1.0.6.jar

tiles-template-3.0.7.jar

 

替换class

替换class文件,将在eclipse里用新版本编译过的class文件(主要是action相关文件)替换到tomcat工程里。

修改配置:

相关配置文件在tomcat里的路径如下:

web.xml

\WEB-INF\web.xml

struts.xml

\WEB-INF\classes\struts.xml

tiles.xml

\WEB-INF\tiles.xml

log4j2.xml

 \WEB-INF\classes\log4j2.xml

tiles-jsp.tld

\WEB-INF\tld\tiles-jsp.tld

applicationContext.xml

\WEB-INF\classes\applicationContext.xml

 

 

 

 

 

 

 

web.xml修改

Struts2 filter修改:

之前:

修改为:

struts.xml修改

DTD修改:

 

之前为:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"

        "http://struts.apache.org/dtds/struts-2.1.dtd">

 

修改为:

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"

        "http://struts.apache.org/dtds/struts-2.5.dtd">

 

Action扫描jar包修改:

修改原因:由于一些包里的注解是用旧版本进行编译的,而升级后需要用新版本进行编辑,否则会报错,而发现struts.xml里扫描的有些jar包在工程项目里并不存在,不确定是否有用,暂时先删除掉。

之前为:

<constant name="struts.convention.action.includeJars"

           value=".*?/ica-view-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-corpaudit-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-qh4a-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-cashbox-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-auditSensitive-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-jsbusiness-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-workflow-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-intercept-unicom-0.0.1-SNAPSHOT.*?jar(!/)?" />

 

修改后为:

<constant name="struts.convention.action.includeJars"

           value=".*?/ica-view-unicom-0.0.1-SNAPSHOT.*?jar(!/)?,.*?/ica-intercept-unicom-0.0.1-SNAPSHOT.*?jar(!/)?" />

 

扫描包移除的有:

ica-corpaudit-unicom-0.0.1-SNAPSHOT

ica-qh4a-unicom-0.0.1-SNAPSHOT

ica-cashbox-unicom-0.0.1-SNAPSHOT

ica-auditSensitive-unicom-0.0.1-SNAPSHOT

ica-jsbusiness-unicom-0.0.1-SNAPSHOT

ica-workflow-unicom-0.0.1-SNAPSHOT

 

tiles.xml修改

 

DTD修改:

之前为:

<!DOCTYPE tiles-definitions PUBLIC

        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"

        "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

 

修改为:

<!DOCTYPE tiles-definitions PUBLIC

        "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"

        "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

 

log4j2.xml

/ica-portal-unicom/src/main/resources目录下添加log4j2.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>  

<configuration status="debug">  

  <appenders>  

  </appenders>  

  <loggers>  

    <root level="info">  

    <appender-ref ref="Console"/>

    <appender-ref ref="log"/>

    </root>  

  </loggers>  

</configuration>

 

上述配置为初始化配置,后续需要修改。

tiles-jsp.tld

tiles-jsp.tld文件需要替换

可以从如下jar包中得到最新的tld文件:

新版tiles相关业务代码修改

由于新版本的tiles相关类、方法的改变导致旧版本一些代码编译错误,现将修改内容记录如下:

先说下项目中旧版本中action的设计过程:

首先项目中创建了一个所有action都继承的抽象基类:

public abstract class CrudActionSupport<T> extends ActionSupport implements ModelDriven<T>, Preparable

 

在该类里通过业务代码可以控制tiles的渲染页面,主要通过如下方法实现:

    /**

     * 设置模板

     *

     * @param key

     * @param template

     */

    protected void setNamedTemplate(String key, String template) {

        TilesContainer container =

            ServletUtil.getCurrentContainer(getRequest(), getRequest().getSession().getServletContext());

        AttributeContext attributeContext = container.startContext(getRequest(), getResponse());

        attributeContext.putAttribute("title",

            new Attribute(StringUtils.trimToEmpty(ConfigInfoUtils.shopResource.getString("SYS.TITLE.NAME"))));

        attributeContext.putAttribute(key, new Attribute(template));

    }

   

    /**

     * 默认设置模板

     *

     * @param template

     */

    protected void setDefaultNamedTemplate(String template) {

        setNamedTemplate("body", "/WEB-INF/content" + template);

    }

   

 

 

然后所有继承该类的action都可以通过调用setDefaultNamedTemplate方法来实现titles页面渲染的改变。在新版本中会导致上述代码编译失败,我尝试了几种修改方式,都没改成功,无意间在网上搜索到可以通过org.apache.tiles.preparer.ViewPreparer类来实现,因此修改如下:

 

新增your.package.name.ActionViewPreparer类用于在渲染页面重新设置相关跳转页面,该类主要内容为:

public class ActionViewPreparer implements ViewPreparer {

      private String template;

          

      public String getTemplate() {

           return template;

      }

 

      public void setTemplate(String template) {

           this.template = template;

      }

 

      @Override

      public void execute(Request tilesContext, AttributeContext attributeContext) {

           // TODO Auto-generated method stub

           System.out.println("==>进入到execute!");

           System.out.println("==>this.template="+this.template);

           if(this.template!=null &&

             !"".equals(this.template) &&

             !"null".equals(this.template))

           {

                 attributeContext.putAttribute("body",

                 new Attribute("/WEB-INF/context"+this.template));

           }

      }

 

}

 

applicationContext.xml文件增加上述javaBean配置:

<bean id="actionViewPreparer" class="your.package.name.ActionViewPreparer" />

tiles.xml文件基础模版增加preparer="actionViewPreparer":

 

上述preparer属性值为spring注入bean的beanID

CrudActionSupport.java修改:

主要修改有:

增加ActionViewPreparer属性:

@Autowired

private ActionViewPreparer actionViewPreparer;

删除setNamedTemplate方法

修改setDefaultNamedTemplate方法为:

protected void setDefaultNamedTemplate(String template) {

    this.actionViewPreparer.setTemplate(template);            

}

prepare方法为:

public void prepare()中添加:

this.actionViewPreparer.setTemplate(null);//struts2 升级 action执行前给viewPrepare对象初始化

 

 

 

修改JDK环境

将tomcat中JDK环境修改为1.7及以上

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值