升级到 struts 版本 2.5.17 时出现问题
Issue while upgrading to struts version 2.5.17
我正在尝试将 struts 版本从 2.3.35 升级到 2.5.17,但我遇到了如下问题:
java.lang.NullPointerException
at com.opensymphony.xwork2.util.fs.StrutsJarURLConnection.getInputStream(StrutsJarURLConnection.java:170)
at com.opensymphony.xwork2.util.fs.JarEntryRevision.needsReloading(JarEntryRevision.java:84)
at com.opensymphony.xwork2.util.fs.DefaultFileManager.fileNeedsReloading(DefaultFileManager.java:65)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:428)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:163)
我一直在使用本指南迁移到 struts 版本 2.5.17:
https://cwiki.apache.org/confluence/display/WW/Struts+2.3+to+2.5+migration
我怀疑是瓷砖的问题。
我已经将所有 struts 相关的 jar 升级到版本 2.5.17,包括 struts2-tiles-plugin。我还将所有与 tiles 相关的 jar 升级到 3.0.7。
我还删除了 Xwork-core jar,因为 2.5 xwork 被合并到 struts2-core jar。
我是不是做错了什么。
请注意:到目前为止我还没有做任何代码更改。该代码与 struts 版本 2.3.35 完美配合。但是,一旦我升级了 struts 版本和 tiles 版本,我就开始遇到这个问题。
如果我做错了什么,有人可以提出建议吗?
Yes, there are supposed to be errors without code changes.
我不认为你做错了什么。
添加新的 .jars 并删除旧的后,只有当代码符合新框架时,它才会起作用。
代码更改为:
.xml
- 将以下
<code>
添加到web.xml
。
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
- 将struts-config.xml更改为struts.xml并进行以下更改:
You can remove struts-config.xml completely and use annotations instead of .xml file.( since struts 2.5.17 )
<?xml version="1.0" encoding="ISO-8859-1" ?> <!-- change to UTF-8 -->
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd "> <!-- change to struts-2.5.dtd -->
<struts-config> <!-- change to <struts> -->
<!-- add <include file="struts-default.xml"/> -->
<form-beans>
<form-bean name="MyClassForm" type="forms.MyClassForm">
</form-bean>
</form-beans>
<action-mappings> <!-- change to <package name="hello-default" extends="struts-default"> -->
<action path="/MyClass" name="MyClassForm" type="actions.MyClassAction"
validate="false">
<action name = “MyClass” class = “actions.MyClass”>
<forward name="success" path="/Index.jsp"/>
<result> /Index.jsp </result>
</action>
</action>
</action-mappings> <!-- change to </package> -->
<message-resources parameter="resources"/>
</struts-config> <!-- change to </struts> -->
.java
删除 ActionForm.java 个文件。
Properties are included in ActionSupport class which our Action class is supposed to extend.
改变Action.java
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class MyClassAction extends Action // change to ActionSupport {
//fields are now a property of the ActionSupport class
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// change to public String execute() throws Exception {
MyClassForm input = (MyClassForm) form; // don't need this
input.setField1(“Hello”); // change to setMessage(“Hello”);
return mapping.findForward(“success”); // change to return Action.SUCCESS;
.jsp
在此 JSP 中要执行的操作是:
- 替换
<%@ taglib %>
指令
- 使用由
struts-tags.tld
定义的一组新标签
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello!</title>
</head>
<s:form action="submit.action" method="post">
<body>
<s:textfield label="Name" name=" field1" />
<s:property value="field1"/>
<s:submit" />
</body>
</s:form>
</html>
干杯。
我通过将 struts 版本升级到 2.5.18 解决了这个问题。当我将 struts 版本降级到 2.5.13.
时它也能正常工作
但是2.5.16和2.3.36(含)之间的struts版本不推荐使用,所以我已经升级到2.5.18
我正在尝试将 struts 版本从 2.3.35 升级到 2.5.17,但我遇到了如下问题:
java.lang.NullPointerException
at com.opensymphony.xwork2.util.fs.StrutsJarURLConnection.getInputStream(StrutsJarURLConnection.java:170)
at com.opensymphony.xwork2.util.fs.JarEntryRevision.needsReloading(JarEntryRevision.java:84)
at com.opensymphony.xwork2.util.fs.DefaultFileManager.fileNeedsReloading(DefaultFileManager.java:65)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:428)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:163)
我一直在使用本指南迁移到 struts 版本 2.5.17: https://cwiki.apache.org/confluence/display/WW/Struts+2.3+to+2.5+migration
我怀疑是瓷砖的问题。
我已经将所有 struts 相关的 jar 升级到版本 2.5.17,包括 struts2-tiles-plugin。我还将所有与 tiles 相关的 jar 升级到 3.0.7。
我还删除了 Xwork-core jar,因为 2.5 xwork 被合并到 struts2-core jar。
我是不是做错了什么。
请注意:到目前为止我还没有做任何代码更改。该代码与 struts 版本 2.3.35 完美配合。但是,一旦我升级了 struts 版本和 tiles 版本,我就开始遇到这个问题。
如果我做错了什么,有人可以提出建议吗?
Yes, there are supposed to be errors without code changes.
我不认为你做错了什么。
添加新的 .jars 并删除旧的后,只有当代码符合新框架时,它才会起作用。
代码更改为:
.xml
- 将以下
<code>
添加到web.xml
。
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
- 将struts-config.xml更改为struts.xml并进行以下更改:
You can remove struts-config.xml completely and use annotations instead of .xml file.( since struts 2.5.17 )
<?xml version="1.0" encoding="ISO-8859-1" ?> <!-- change to UTF-8 -->
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd "> <!-- change to struts-2.5.dtd -->
<struts-config> <!-- change to <struts> -->
<!-- add <include file="struts-default.xml"/> -->
<form-beans>
<form-bean name="MyClassForm" type="forms.MyClassForm">
</form-bean>
</form-beans>
<action-mappings> <!-- change to <package name="hello-default" extends="struts-default"> -->
<action path="/MyClass" name="MyClassForm" type="actions.MyClassAction"
validate="false">
<action name = “MyClass” class = “actions.MyClass”>
<forward name="success" path="/Index.jsp"/>
<result> /Index.jsp </result>
</action>
</action>
</action-mappings> <!-- change to </package> -->
<message-resources parameter="resources"/>
</struts-config> <!-- change to </struts> -->
.java
删除 ActionForm.java 个文件。
Properties are included in ActionSupport class which our Action class is supposed to extend.
改变Action.java
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class MyClassAction extends Action // change to ActionSupport {
//fields are now a property of the ActionSupport class
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// change to public String execute() throws Exception {
MyClassForm input = (MyClassForm) form; // don't need this
input.setField1(“Hello”); // change to setMessage(“Hello”);
return mapping.findForward(“success”); // change to return Action.SUCCESS;
.jsp
在此 JSP 中要执行的操作是:
- 替换
<%@ taglib %>
指令 - 使用由
struts-tags.tld
定义的一组新标签
- 替换
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello!</title>
</head>
<s:form action="submit.action" method="post">
<body>
<s:textfield label="Name" name=" field1" />
<s:property value="field1"/>
<s:submit" />
</body>
</s:form>
</html>
干杯。
我通过将 struts 版本升级到 2.5.18 解决了这个问题。当我将 struts 版本降级到 2.5.13.
时它也能正常工作但是2.5.16和2.3.36(含)之间的struts版本不推荐使用,所以我已经升级到2.5.18