风从海上来l 2015-03-02 10:39 采纳率: 0%
浏览 567

struts2 <s:action/>的问题

request -->HomeAction-->redirect或forward-->index.jsp

index.jsp页面包含如下:








如上所述,通过HomeAction再重定向或转发到jsp,jsp页面中包含头部与底部,头部与底问没有通过指令,而是通过struts2的 action标签来载入.

现在的问题是,在web.xml中

struts2
/*

这种拦截,web程序正确执行并显示 jsp页面

但如果如下拦截

struts2
*.action

web程序就报错,错误指向 <s:action

真的很奇怪。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 10:52
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    Struts2 中,当使用 <s:action> 标签时,它会将请求路由到对应的 Action 方法。在你的例子中,如果你希望在 HomeAction 的方法中处理一个名为 "home" 的请求,你可以这样做:

    <s:action name="home">
        <s:method name="handleRequest"/>
    </s:action>
    

    这样,每当用户访问 "/home" 时,就会调用 handleRequest() 方法。

    但是,如果你尝试直接将 /home 路径作为参数传递给 <s:action> 标签,例如:

    <s:action name="home" method="handleRequest">
        <s:param value="/home"/>
    </s:action>
    

    那么 Web 应用程序将会遇到错误,因为这表示你试图在同一个请求中同时发送两个不同的路径("/home" 和 "/home/actionName").

    解决这个问题的方法是在 <s:action> 前面加上一个 if 子句,检查传过来的 URL 是否匹配特定的路径模式。例如,如果要确保只有在 "/home" 路径下才能调用 "handleRequest()" 方法,你可以这样做:

    <s:action name="home" if="{pathInfo==\"/home\"}" method="handleRequest">
        <!-- 在这里添加处理逻辑 -->
    </s:action>
    

    在这个示例中,如果 pathInfo 参数等于 "/home",则触发 "handleRequest()" 方法。其他情况则跳过此操作。

    请注意,这种方式只适用于简单的路径模式。对于更复杂的路径模式,可能需要使用更复杂的方式来验证请求是否符合预期。

    评论

报告相同问题?