原框架版本:
Oracle JDK 1.6 +Spring3+ibatis2.3+Struts2.1.81
中间件:tomcat6.0
升级后版本:
Open JDK 17 +Spring5.3.9+Mybatis3.5.10+Struts2.5.33
中间件:tomcat9.0.89
非maven管理项目,先附上jar包依赖:
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="EclipseModuleManager">
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-httpclient-2.0.2.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/groovy-2.4.21.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/gson-1.4.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/jxl-2.6.12.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/mail.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/wasp-1.0.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-aop-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-aspects-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-beans-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-context-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-context-indexer-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-context-support-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-core-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-expression-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-instrument-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-jcl-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-jdbc-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-orm-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-oxm-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-test-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-tx-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-web-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/spring-webmvc-5.3.9.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/mybatis-spring-2.1.1.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/mybatis-3.5.10.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/struts2-convention-plugin-2.5.33.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/struts2-core-2.5.33.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/struts2-json-plugin-2.5.33.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/struts2-spring-plugin-2.5.33.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/ognl-3.1.29.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/ojdbc8-19.3.0.0.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/orai18n-12.1.0.2.0.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/poi-5.2.3.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/quartz-2.3.2.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/slf4j-api-1.7.30.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-io-2.6.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-lang3-3.8.1.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-logging-1.2.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/dwr-1.1.1.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/freemarker-2.3.33.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/javassist-3.20.0-GA.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/log4j-api-2.12.4.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/log4j-core-2.12.4.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/log4j-web-2.12.4.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/mchange-commons-java-0.2.19.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/asm-9.5.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/asm-analysis-9.5.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/asm-commons-9.5.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/asm-tree-9.5.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/bsh-2.0b4.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/c3p0-0.9.5.5.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/c3p0-oracle-thin-extras-0.9.5.5.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-beanutils-1.9.4.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-codec-1.17.0.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-compress-1.25.0.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-fileupload-1.4.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/javax.activation-api-1.2.0.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/javax.activation-1.2.0.jar!/" />
<libelement value="jar://$MODULE_DIR$/WebRoot/WEB-INF/lib/commons-collections4-4.4.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/annotations-api.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/catalina.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/catalina-ant.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/catalina-ha.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/catalina-ssi.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/catalina-storeconfig.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/catalina-tribes.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/ecj-4.20.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/el-api.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/jasper.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/jasper-el.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/jaspic-api.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/jsp-api.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/servlet-api.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-api.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-coyote.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-dbcp.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-cs.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-de.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-es.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-fr.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-ja.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-ko.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-pt-BR.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-ru.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-i18n-zh-CN.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-jdbc.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-jni.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-util.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-util-scan.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/tomcat-websocket.jar!/" />
<libelement value="jar://$USER_HOME$/Desktop/ELSD/apache-tomcat-9.0.89-windows-x64/apache-tomcat-9.0.89/lib/websocket-api.jar!/" />
<src_description expected_position="0">
<src_folder value="file://$MODULE_DIR$/src" expected_position="0" />
</src_description>
</component>
java单体架构项目老框架升级
原有代码中有使用到的sun.包下淘汰的sun.io.ByteToCharConverter,现使用 java.nio.charset.CharsetDecoder替换
Spring+Struts2+Ibatis现有框架升级
升级到2.5.x后,struts.xml文件头部约束需要从
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
更新为
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
org.apache.struts2.views.gxp.inject.InjectedObjectContainer 报错,引入了struts2-gxp-plugin-2.5.33.jar 不需要的jar包
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 升级到 2.5.x后 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter ,删除了中间的ng目录
asm java字节码相关jar,struts必须依赖的,需要升级到asm-9.5.jar版本,否则项目启动报:java.lang.IllegalArgumentException: Unsupported class file major version 61
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:196) ~[asm-7.3.1.jar:7.3.1]
log4j-core-2.12.4.jar 是struts依赖log4j的日志实现框架(ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console... )
c3p0 数据库连接池从 c3p0-0.9.1.2 版本升级到 c3p0-oracle-thin-extras-0.9.5.5.jar ( java.lang.IllegalArgumentException: Unsupported class file major version 61 )
javassist-3.20.0-GA.jar 包,也是struts 依赖字节码相关包 Javassist library is missing in classpath! Please add missed dependency!
2.5.x 版本 struts.xml 中 默认不支持通配符动态方法:
需要配置常亮参数:
<!-- 由于新版本的Struts默认不能修改.action的访问后缀,不能使用通配的方式调用action里的方法,所以添加 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<!--配置该参数后,可以匹配.do和.action的访问后缀 -->
<constant name="struts.action.extension" value="action,do" />
<!-- struts 2.5.x后默认不支持动态方法,配置该参数后,才能支持method="{1}" -->
<global-allowed-methods>regex:.*</global-allowed-methods>
以上参数配置,可以在struts.propertis文件中配置
启动报 Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.compressors.CompressorException 错,是struts 2.5.33缺少 commons-compress-1.25.0.jar 包
spring 5.3.9 整合 struts 2.5.33
必须引入的依赖包 struts2-spring-plugin-2.5.33.jar (否则,在Action中无法通过 @Autowired注解拿到spring bean)
解决action方法无法输出日志:
配置 log4j2 Listener 监听器 org.apache.logging.log4j.web.Log4jServletContextListener ,须引入 log4j-web-2.12.4.jar
--在Spring + Mybatis 3.5.10 + Struts2.5.33 整合 ,连接Oracle 数据库执行查询sql时(通过在Struts Action 中 @Autowried 注入Dao层去查询),发生以下报错:
org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column 'SERIALNUMBER' from result set.
Cause: java.sql.SQLException: ORA-17056: 不支持的字符集(在类路径中添加 orai18n.jar): ZHS16GBK
故引入最新的 orai18n-12.1.0.2.0.jar 包;
(但单独 两个框架整合时Spring 5.3.9 + Mybatis 3.5.10 ,没有引入orai18n.jar,查询oracle数据库 并没有发生以上报错)
org.springframework.scheduling.quartz.CronTriggerBean 和 org.springframework.scheduling.quartz.CronTriggerFactoryBean 类是一样的作用?
是的,在Spring 3.x版本整合 quartz-1.x 版本的定时器时,使用CronTriggerBean 作为触发器类
在 Spring 5.3.x 版本中,整合 quartz-2.x 需要使用 CronTriggerFactoryBean 类,5.3.x版本已经移除了CronTriggerBean 类
定时器jar 升级quartz-2.3.2.jar
jdk 17 理论上兼容 poi-3.0-Final.jar 版本,但版本更新于 2007年;
还是建议升级到新版poi-5.2.3.jar(2022年更新)
freemarker-2.3.15.jar 升级到 FreeMarker 2.3.33
该版本特别修复了在 Java 16 及以后版本中由于 JEP 396 导致的 IllegalAccessException 问题
mybatis 框架,数据库操作,打印sql语句,需要在mybatis-config.xml中配置 log4j:
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"></setting>
</settings>
log4j2版本 只能使用,log4j2.xml 配置文件配置日志级别,log4j.properties 是log4j1.x版本的配置 2的版本不再支持了
定时器从 quartz-all-1.6.5.jar 升级到 quartz-2.3.2.jar版本
org.springframework.scheduling.quartz.JobDetailBean 类需要替换为org.springframework.scheduling.quartz.JobDetailFactoryBean
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.mail.javamail.JavaMailSenderImpl] from ClassLoader [ParallelWebappClassLoader
Caused by: java.lang.ClassNotFoundException: javax.activation.FileTypeMap:
在spring 5.3.9中使用 org.springframework.mail.javamail.JavaMailSenderImpl bean 需要引入 javax.activation-api-1.2.0.jar 包(jdk 1.6 的activation.jar 旧版的包)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.mail.javamail.JavaMailSenderImpl]:
Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport
com/sun/activation/registries/LogSupport 在jdk11及以上的版本中本身不再支持,缺少 javax.activation-1.2.0.jar 依赖包
项目启动报错:
8月 28, 2024 9:41:19 上午 org.apache.catalina.core.StandardContext loadOnStartup
严重: web应用程序[/e_leavexx]中的Servlet[dwr]引发了load()异常
org.xml.sax.SAXException: Failed to resolve: arg0=-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN arg1=http://getahead.org/dwr/dwr20.dtd%20
at uk.ltd.getahead.dwr.impl.DTDEntityResolver.resolveEntity(DTDEntityResolver.java:59)
原因:
web.xml配置了 dwr的 servlet,
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
web容器,初始化时加载了项目中的dwr.xml 文件,该文件中的 !DOCTYPE 标签中的dwr20.dtd 约束解析问题,找不到dwr20.dtd
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd ">
解决方案:
修改为dwr.jar包中存在的dwr10.dtd约束文件就行
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
--没有找到名为user.role_getByUserId 的语句 报错:
Struts Problem Report
Struts has detected an unhandled exception:
Messages:
Mapped Statements collection does not contain value for user.role_getByUserId
### Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for user.role_getByUserId ### The error may exist in
file [C:\Users\xxxxxx\Desktop\ELSD\apache-tomcat-9.0.89-windows-x64\apache-tomcat-9.0.89\webapps\e_leavexx\WEB-INF\classes\com\xxx\xxxxx\property\mybatis\mapper\userinfo.xml]
### The error may involve user.user_getUserInfoForMap ###
The error occurred while handling results ### SQL: SELECT * FROM VW_IDM_EMPLOYEE_INFO WHERE UPPER(EMPCODE) = UPPER(?) and EMP_PASSWORD=? ###
Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for user.role_getByUserId
nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.
Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for user.role_getByUserId ###
原因:一对多配置中 select 属性应该要使用namespace+sqlid 访问<collection property="rolelist" ofType="role" select="role_getByUserId" column="serialnumber" />
正确的写法是:<collection property="rolelist" ofType="role" select="role.role_getByUserId" column="serialnumber" />
进一步解释,因为role_getByUserId,不是存在 namespace名为user的xml文件中,而是存在namespace 名为role的 mapper.xml文件中,所以,select属性默认是在当前自身的mapper.xml文件中查找
FreeMarker template error (HTML_DEBUG mode; use RETHROW in production!)
Error while loading tag library for URI "/WEB-INF/struts-tags.tld" from TLD location "servletContext:/WEB-INF/struts-tags.tld"; see cause exception.
struts升级后,对应的定义TLD文件也需要更新
解决使用mybatis 查询时,业务层传入null的参数值,报错问题:
无效的列类型: 1111
Error setting null for parameter #3 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property.
Cause: java.sql.SQLException: 无效的列类型: 1111
Could not set parameters for mapping: ParameterMapping{property='validDate', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null',
jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #3 with JdbcType OTHER .
Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111
在mybatis-config.xml 配置文件,配置参数,当参数为null时,不指定jdbctype类型 :
<!-- 设置当JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->
<setting name="jdbcTypeForNull" value="NULL"/>
在mybatis-config.xml中需要去除,配置。否则将导致,实体类中存在c_name的属性和数据库字段c_name无法自动映射。mybatis应该是默认支持驼峰和下划线命名的字段映射
<!-- 使用驼峰命名法转换字段。 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
Apache commons-collections-3.2.2.jar 存在安全漏洞CVE-2015-8103,建议升级至commons-collections4-4.4.jar
import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class XssInterceptor extends AbstractInterceptor
我实现了struts 的 AbstractInterceptor 拦截器接口,通过以下 ActionContext actionContext = invocation.getInvocationContext();
Map<String, Object> map = actionContext.getParameters(); map.entrySet().getValue() 获取请求参数值,
这个在struts2.1.8.1版本中取到返回值是String[]字符串数组,升级成struts2.5.33版本之后,
//升级struts2.5.33 版本后,HttpParameters getValue返回不再是String[] 而是Parameter
// 20240902
// String value = ((String[])(entry.getValue()))[0];
String value= ((Parameter)entry.getValue()).getValue();
03-Sep-2024 09:47:46.395 严重 [main] org.apache.catalina.session.StandardManager.startInternal 从持久化存储加载会话发生异常
java.io.StreamCorruptedException: invalid type code: 00
elsd tomcat已停止服务,但是用户session未在服务端注销。过一会服务启动,用户在不关闭浏览器的情况下重新登录,其实登录状态还服务器上,被认为是已登录的,不再登录并从session中获取菜单数据此时将报错
boolean isLog = UserSession.isLogin(getHttpRequest(),this.getHttpResponse());
tomcat 在停止服务时报错:
信息: 正在停止服务[Catalina]
9月 03, 2024 4:55:06 下午 org.apache.catalina.session.StandardSession doWriteObject
警告: 不能序列化会话[B88D7C040E496DDAE186980103C6EC3D]的属性[menubyuser]
java.io.NotSerializableException: com.xxx.xxxxx.entity.Menu
原因是tomcat 在停止时,尝试将当前登录的用户的session 对象中的数据,都序列化存入到磁盘中,在程序中发现Menu对象是被put到 session中的,但是Menu对象又未实现Serializable接口
解决方案:
Tomcat9 context.xml 特殊配置
<!-- add by jiangd at 20240911 与原tomcat6保持一致:停止服务后禁止保存用户session状态-->
<Manager pathname="" />
错误写法,需要替换:
<foreach collection="statusList" separator="," close=")" open="(" >
#{statusList[]}
</foreach>
foreach标签,取值正确用法:
<foreach collection="empType" item="empTypeIndex" index="index" open="(" separator="," close=")">
#{empTypeIndex}
</foreach>
json-lib-1.1-jdk13.jar
Json-lib 是以前 Java 常用的一个 Json 库,最后的版本是 2.4,分别提供了 JDK 1.3 和 1.5 的支持,最后更新时间是 2010年12月14日
Json-lib 在通过字符串解析每一个 Json 对象时,会对当前解析位置到字符串末尾进行 substring 操作,由于 JDK7 及以上的 substring 会完整拷贝截取后的内容,所以当遇到较大的
Json 数据并且含有较多对象时,会进行大量的字符数组复制操作,导致了大量的 CPU 和内存消耗,甚至严重的 Full GC 问题。
现替换为2024-7月最新版本的 fastjson2-2.0.52.jar包
ibatis 转换为 mybatis 中,应该存在很多,
<isEqual prepend="and" property="strValue" compareValue="DY">
<![CDATA[ start_day <=to_date(#year#||'03-31','yyyy-MM-dd') ]]>
</isEqual>
被转换为:
<if test="strValue ==DY">
and
<![CDATA[ start_day <=to_date(#{year}||'03-31','yyyy-MM-dd') ]]>
</if>
这中间存在着一个错误,==DY没有被当做字符串'DY'引起来。后续测试需要特别注意
open jdk 17 或tomcat 9 类加载器,好像也是懒加载的,只有当程序运行时使用到了某个类才会加载 某个jar包中的类,比如:
net.sf.json.JSONObject 类,只有在程序运行到 new net.sf.json.JSONObject()时才加载的出现报错的
tomcat启动时,并没有发现 net.sf.json.JSONObject 类出现报错
分页插件需要 支持mybatis的特性,兼容 mapper代理接口的方式,selectUserByPage(@param User user ,PageInfo page)
在mybatis 中 分页查询情况下,其它业务条件不变,每次只更新分页的当前页的参数查询数据大于50000,只会查询一次数据库后面的几页数据全是一级缓存中的
停止tomcat 9容器时,提示的Quartz 定时器创建的异步线程不受线程池管理,可能会导致内存泄漏(该提示是由tomcat9 内存监听器产生,XXX项目原本的代码可能就有问题(tomcat 6没有该监听器))
在context.xml中 配置<Manager pathname="" /> 没有注销用户,在重启服务之后,浏览器页面不关闭的情况下执行两次:Ctrl + R 就能够自动登录了,并不需要输入用户名和密码
!--<result name="spvChargeRestDataAuth" type="freemarker">/ftl/force_leavexx/xxspvChargerestdataauth.ftl</result>-->
XXX页面出现白屏情况需要检查struts.xml中 result 配置的 ftl文件名称是否正确,大小写是敏感的,不确定是struts2.5.33和 Freemarker-2.3.33.jar 或是tomcat9 导致的大小写敏感问题
<!--20240910 struts-core.jar包从2.1.8.1升级后2.5.33,FreemarkerThemeTemplateLoader类模板加载器,开始区分大小写了?
必须准确配置文件名,否则后端Action返回后会报找不到页面的错-->
<result name="spvChargeRestDataAuth" type="freemarker">/ftl/force_leavexx/xxspvChargeRestDataAuth.ftl</result>
log4j-slf4j-impl-2.12.4.jar包必须引入,否则在struts Action类 中 使用org.slf4j.LoggerFactory.getLogger将找不到具体的log4j2的实现类
该jar包时 slf4j日志门面与 log4j2-core 实现之间的绑定jar
PropertyAccessException 1: org.springframework.beans.MethodInvocationException:
Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError:
org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
--c3p0 MyComboPooledDataSource 数据源 必须引入spring-jdbc-5.3.9.jar包
<!-- 20240929 Struts2 升级后大小写敏感,无论是result name还是Action方法名,大小写必须对应,调整 forceLeave_spvrestDataAuth 为 forceLeave_spvRestDataAuth-->
<@s.form name="styjform" action="forceLeave_spvRestDataAuth.action">
-- 在插入数据时通过selectKey标签从数据库查询取ID值,需要insert前执行selectKey,要增加order="before" 属性
<insert id="datadict_insert" parameterType="entity.Datadict">
<selectKey resultType="java.lang.Long" keyProperty="id" order="BEFORE" >
SELECT DATADICT_SEQ.NEXTVAL AS ID FROM DUAL
</selectKey>
INSERT INTO DATADICT(ID, DICTTYPE, DICTTYPENAME, DICTNAME, DICTVALUE, REMARK, ENABLE,TYPE)
VALUES(#{id}, #{dictType}, #{dictTypeName}, #{dictName}, #{dictValue}, #{remark}, #{enable},#{type})
</insert>
优化,可以在分页插件中,输出拼接好查询参数的sql,以及sqlId 方便后续生产查询问题
动态sql <if test="Date!=''"> ognl会报错:提示无效的比较
设置一级缓存的作用范围:statement级别
<setting name="localCacheScope" value="STATEMENT"/>
mybatis <select>不指定resultType ,查询单条单列数据时默认返回 Map结果集
Service层@Transactional注解的方法中,存在多个数据库操作(增删改),如果要保证事务一致性,不能对数据库操作的方法增加try catch块去捕获异常,否则Spring将不能回滚
--tomcat9.0.89 请求url中包含"["中括号,会触发400报错提示无效的路由请求,导致appScan扫描触发CVE-2020-8022风险
http://10.192.80.62:8080/e_leavexx/js/[
解决方法:在/conf/server.xml中Host节点下增加:<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false"/>
showServerInfo="false"--不显示版本信息
showReport="false"--不显示报错信息
通过将 Cookie 限制为第一方或同一站点上下文来防止 Cookie 信息泄漏,如果没有额外的保护措施(如反 CSRF 令牌),攻击可能会扩展为跨站点请求伪造 (CSRF) 攻击
具有不正确、不安全或缺少 SameSite 属性的敏感 Cookie
在tomcat 9.0.89中直接在conf/context.xml文件中 context标签下增加<CookieProcessor sameSiteCookies="lax" />
---XXX项目输出太多debug级别的日志会导致页面查询数据时出现一半一半加载的情况(特别是复杂sql分页查询时,应该是log4j2在查询时同时在输出日志的原因)
log4j2.xml
分页插件(拦截器)的通用问题,就是不能识别 上层(业务层)是调用的普通查询方法,还是分页查询方法;
要么在mapper.xml中针对要分页的select id增加分页后缀,要么判断查询时传入的 参数是否符合分页的条件
poi-3.0-Final.jar 升级到 POI-5.2.3.jar版本后,文件导入使用的 POIFSFileSystem(fis)使用到了commons-io-2.11.jar包中的UnsynchronizedByteArrayOutputStream类
提示 org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream 该类不存在,
即commons-io-2.6需要升级到 2.11版本
POI-5.x版本中使用了 HSSFWorkbook同时还涉及 log4j2-core、api、slfj-impl、web 相关jar包也需要从2.12.4升级到 2.17.1版本
tomcat9.0.97 可以通过manager 控制台实现不重启tomcat 8080端口在运行中 更新升级jar包

812

被折叠的 条评论
为什么被折叠?



