java - 升级 Struts 2.3.16.2 库导致错误

标签 java jsp configuration struts2 dmi

最近,我需要将Struts2库从2.3.15.1升级到2.3.16.2。

首先,我升级了这些库:

  • commons-fileupload-1.3.1.jar
  • commons-io-2.2.jar
  • struts2-core-2.3.16.2.jar
  • struts2-junit-plugin-2.3.16.2.jar
  • struts2-tiles-plugin-2.3.16.2.jar
  • xwork-core-2.3.16.2.jar

之后我尝试登录该网站,但没有成功。我无法从 Tomcat 控制台获取任何错误消息或日志。

以下是我的配置文件的一些部分:

web.xml

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!--Tiles-->
<listener>
    <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<servlet>
    <servlet-name>tiles</servlet-name>
    <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
    <init-param>
        <param-name>definitions-config</param-name>
        <param-value>/WEB-INF/tiles.xml</param-value>
    </init-param>
</servlet>

struts.xml

<struts>
  <constant name="struts.custom.i18n.resources" value="ApplicationResources,errors"/>
  <constant name="struts.devMode" value="true" />
  <constant name="struts.configuration.xml.reload" value="true" />
  <constant name="struts.action.extension" value="do" />
  <package name="tiles" extends="tiles-default" namespace="/test">
    <result-types>
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
    </result-types>
    <default-interceptor-ref name="myStack"/>
    <global-results>
        <result name="input">/error.jsp</result>
        <result name="success" type="tiles">global.setting.successMessage</result>
        <result name="error" type="tiles">global.setting.errorMessage</result>
        <result name="index" type="tiles">global.home.index</result>
    </global-results>
    <action name="Login" class="test.action.LoginAction">
        <result name="index">/index.jsp</result>
    </action>
  </package>
<struts>

login.jsp

<s:form action="Login.do">
    <s:textfield required="true" key="user.account"  />
    <s:password required="true" key="user.password" />
    <s:submit key="normal.login" align="right" method="login"/>
</s:form>

我关闭了 web.xml 中的其他过滤器和 struts.xml 中的拦截器。

最后,我无法登录网站,也没有从 Tomcat 控制台收到任何错误消息或日志。

最佳答案

如果您没有从 Tomcat 控制台收到任何错误消息或日志,那么您应该尝试调试应用程序来查找问题。您应该做的第一件事是打开开发人员模式:struts.devMode=true 然后您将在控制台上看到更多消息。

更接近您的问题:作为网站上发布的安全问题,DMI (Dynamic Method Invocation)默认配置设置已关闭。不过,您可以更改此设置以允许 params interceptor 接受 method: 参数。 。或者您应该重构您的应用程序以仅使用映射方法。例如

<action name="Login" class="test.action.LoginAction" method="login">
    <result name="index">/index.jsp</result>
</action>

关于java - 升级 Struts 2.3.16.2 库导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401627/

相关文章:

python - 配置文件名约定

java - 使用 jaxb 将 java 对象转换为 xml,反之亦然(marshal 和 unmarshal)

java - 使用 switch case 将字符串转换为 char

jsp - java.lang.AbstractMethodError : javax. servlet.jsp.JspFactory.getJspApplicationContext

java - JSP- 无法从不同的 JSP 页面调用 java 变量?

java - Freemarker 模板中的 JSP 标签

design-patterns - 什么设计模式可用于功能切换意大利面?

vim - 如何防止 <Esc> 在插入模式下等待更多输入

Java:将文本打印到控制台或文本文件的优雅方式

java - 初始化一个 HashMap<Integer, List<Object>>