gpt4 book ai didi

java - 为什么 URL 中的正斜杠会导致对 Stripes Action Bean 的无限循环调用?

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:08 24 4
gpt4 key购买 nike

我已经实现了一个基于 Stripes 的网站。我想避免在其 URL 中使用 .action 附录。在我的每个 Action Bean 中,我添加了以下类型的 url 绑定(bind):@URLBinding("/home")

然后,在我的 web.xml 中,我配置了 DynamicMappingFilter,如 http://stripes.sourceforge.net/docs/current/javadoc/net/sourceforge/stripes/controller/DynamicMappingFilter.html 中所述。 .

该网站已上线,并且运行良好...除非有人尝试像 http://example.com/home/anything 这样的网址。这会导致对我的 HomeActionBean 的无限循环调用,直到最后我得到 StackOverflowError!

有人经历过同样的事情吗?你知道如何防止这种情况发生吗?

非常感谢。爱德华多

附注以下是有关实现的一些细节。我创建了一个演示,其中包含一个简单的测试操作 bean 和 JSP。

TestActionBean
@UrlBinding("/test")
public class TestActionBean extends BaseActionBean implements ActionBean {

@DefaultHandler
public Resolution test() {
return new ForwardResolution("test.jsp");
}
}

测试.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test infinite loop</title>
</head>
<body>
blabla
</body>
</html>`

WEB.XML

<filter>
<display-name>Stripes Filter</display-name>
<filter-name>StripesFilter</filter-name>
<filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>
<init-param>
<param-name>ActionResolver.Packages</param-name>
<param-value>pt.company.commons.stripes.action</param-value>
</init-param>
<init-param>
<param-name>ActionBeanContext.Class</param-name>
<param-value>pt.company.commons.stripes.action.CustomActionBeanContext</param-value>
</init-param>

<!-- The parameter tells Stripes to use the Spring interceptor -->
<init-param>
<param-name>Interceptor.Classes</param-name>
<param-value>net.sourceforge.stripes.integration.spring.SpringInterceptor</param-value>
</init-param>
...

<filter-mapping>
<filter-name>StripesFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

<filter-mapping>
<filter-name>StripesFilter</filter-name>
<servlet-name>StripesDispatcher</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

<filter>
<description>Dynamically maps URLs to ActionBeans.</description>
<display-name>Stripes Dynamic Mapping Filter</display-name>
<filter-name>DynamicMappingFilter</filter-name>
<filter-class>
net.sourceforge.stripes.controller.DynamicMappingFilter
</filter-class>
<init-param>
<param-name>ActionResolver.Packages</param-name>
<param-value>pt.company.common.stripes.action</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>DynamicMappingFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>

<servlet>
<servlet-name>StripesDispatcher</servlet-name>
<servlet-class>net.sourceforge.stripes.controller.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>StripesDispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>

最佳答案

无法对此行为给出解释,但我在一个 actionBean 上注意到它一次,它显示了一个包含 iframe 的页面,该 iframe 具有相对路径作为其 src 属性。 src 属性本身指向其他操作 bean。

        <iframe src="imagelist"></iframe>
<iframe src="mastertable/collections"></iframe>

一旦我更改为绝对路径,重定向循环就消失了。

        <iframe src="${pageContext.request.contextPath}/imagelist"></iframe>
<iframe src="${pageContext.request.contextPath}/mastertable/collections"></iframe>

关于java - 为什么 URL 中的正斜杠会导致对 Stripes Action Bean 的无限循环调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26550400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com