I upgraded from Struts 2.2.1 to 2.5.30 and made the following changes in lib
Upgrade the following jar files:
- freemarker-2.3.31.jar
- ognl-3.1.29.jar
- slf4j-api-1.7.30.jar
- slf4j-jdk14-1.7.30.jar
- struts2-convention-plugin-2.5.30.jar
- struts2-core-2.5.30.jar
- struts2-json-plugin-2.5.30.jar
- struts2-spring-plugin-2.5.30.jar
Delete the following jar files
- org.apache.struts.xwork-xwork-core-2.2.1.jar
- org.apache.xwork-xwork-core-2.2.1.jar
Add the following jar files:
- commons-lang3-3.8.1.jar
And made the following changes in web.xml and Struts.xml web.xml (before)
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>XXX</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext.xml
</param-value>
</context-param>
<!-- Filter -->
<!-- Character Encoding filter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- Struts2 filter -->
<filter>
<filter-name>struts2CleanupFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- Filter -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2CleanupFilter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!--Spring ApplicationContext -->
<listener>
<listener-class>com.imps.spring.listenner.ContextAwareListenner</listener-class>
</listener>
<!-- Spring Introspector -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- session -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<servlet>
<servlet-name>ScheduleJob</servlet-name>
<servlet-class>com.imps.util.schedulework.ScheduleJob</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>CheckToken</servlet-name>
<servlet-class>com.imps.util.CheckToken</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckToken</servlet-name>
<url-pattern>/CheckToken.do</url-pattern>
</servlet-mapping>```
web.xml (after)
```<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>XXX</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext.xml
</param-value>
</context-param>
<!-- Filter -->
<!-- Character Encoding filter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- Struts2 filter -->
<filter>
<filter-name>struts2CleanupFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- Filter -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2CleanupFilter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!--Spring ApplicationContext -->
<listener>
<listener-class>com.imps.spring.listenner.ContextAwareListenner</listener-class>
</listener>
<!-- Spring Introspector -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- session -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<servlet>
<servlet-name>ScheduleJob</servlet-name>
<servlet-class>com.imps.util.schedulework.ScheduleJob</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>CheckToken</servlet-name>
<servlet-class>com.imps.util.CheckToken</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckToken</servlet-name>
<url-pattern>/CheckToken.do</url-pattern>
</servlet-mapping>```
struts.xml (before)
```<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.convention.default.parent.package" value="crud-default" />
<constant name="struts.convention.package.locators" value="servlet" />
<constant name="struts.convention.package.locators.basePackage" value="com.imps" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.multipart.maxSize" value="10241024000" />
<constant name="struts.multipart.saveDir" value="C:\test" />
<!-- CRUD Action parent package -->
<package name="crud-default" extends="convention-default">
<interceptors>
<interceptor-stack name="crudStack">
<interceptor-ref name="store">
<param name="operationMode">AUTOMATIC</param>
</interceptor-ref>
<interceptor-ref name="paramsPrepareParamsStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="crudStack" />
</package>
<package name="cbi-default" extends="json-default">
<result-types>
<result-type name="json" class="com.imps.servlet.LoggingableJSONResult" default="true" />
<result-type name="json-hierarchy" class="com.imps.servlet.HierarchySupportJSONResult" />
</result-types>
<interceptors>
<interceptor name="errorHandler" class="com.imps.servlet.ErrorHandlerInterceptor"/>
<interceptor name="authHandler" class="com.imps.servlet.AuthInterceptor"/>
<interceptor-stack name="cbiStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="errorHandler"/>
<interceptor-ref name="authHandler"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="cbiStack"/>
</package>
</struts>```
struts.xml (after)
```<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="crud-default" />
<constant name="struts.convention.package.locators" value="servlet" />
<constant name="struts.convention.package.locators.basePackage" value="com.imps" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.multipart.maxSize" value="10241024000" />
<constant name="struts.multipart.saveDir" value="C:\test" />
<package name="projectstruts" extends="struts-default" strict-method-invocation="false">
<global-allowed-methods>regex:.*</global-allowed-methods>
</package>
<!-- CRUD Action parent package -->
<package name="crud-default" extends="convention-default" strict-method-invocation="false">
<interceptors>
<interceptor-stack name="crudStack">
<interceptor-ref name="store">
<param name="operationMode">AUTOMATIC</param>
</interceptor-ref>
<interceptor-ref name="paramsPrepareParamsStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="crudStack" />
</package>
<package name="cbi-default" extends="json-default" strict-method-invocation="false">
<result-types>
<result-type name="json" class="com.imps.servlet.LoggingableJSONResult" default="true" />
<result-type name="json-hierarchy" class="com.imps.servlet.HierarchySupportJSONResult" />
</result-types>
<interceptors>
<interceptor name="errorHandler" class="com.imps.servlet.ErrorHandlerInterceptor"/>
<interceptor name="authHandler" class="com.imps.servlet.AuthInterceptor"/>
<interceptor-stack name="cbiStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="errorHandler"/>
<interceptor-ref name="authHandler"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="cbiStack"/>
</package>
</struts>
But 404 occurred in the action after the modification, where did I modify the error, please provide me with suggestions.
Reference: