2

我有一个 intercetpor 在执行请求的操作之前检查用户是否已登录。我尝试将其设置为所有操作的默认值。对于除一个以外的所有地址,这就像一个魅力。当我"http://localhost:8080/map/"出于某种原因访问我的根 URL 时,拦截器不会触发。我猜我 struts.xml 缺少一些东西,但我不知道是什么:

<struts>

    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources,DatabaseResources" />

    <package name="map" extends="struts-default">
        <interceptors>
            <interceptor name="loginintercept"
                class="se.contribe.intercept.LoginInterceptor" />
            <interceptor-stack name="defaultLoginStack">
                <interceptor-ref name="loginintercept" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="defaultLoginStack" />

        <default-action-ref name="index"></default-action-ref>

        <global-results>
            <result name="loginneeded">/login.jsp</result>
        </global-results>

        <action name="index" class="**.map.MapAction">
            <result>/index.jsp</result>
        </action>

        <action name="login">
            <result>/login.jsp</result>
        </action>

        <action name="loginInput" class="**.session.LoginAction">
            <result type="redirectAction">
                <param name="actionName">index</param>
            </result>
            <result name="input">/login.jsp</result>
            <result name="error">/login.jsp</result>
        </action>

        <action name="*" class="**.map.MapAction">
            <result>/index.jsp</result>
        </action>
    </package>

</struts>

我稍微混淆了类名,以防我的雇主反对。

4

2 回答 2

0

您的根 url 可能是http://localhost:8080/map/但包“地图”指的是http://localhost:8080/map/map

您可能想要一个为“/”定义的包,它的根位于http://localhost:8080/map/,并且您可能想要一个为“”定义的包,它允许从任何包中执行其中的操作。

编辑:在上面我混淆了命名空间的名称(似乎使用约定插件太多了!)

我强烈怀疑,如果您检查 web.xml 文件,您会发现类似:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

如果您将其更改为

<welcome-file-list>
    <welcome-file>index.action</welcome-file>
</welcome-file-list>

你会得到你所期望的,因为我可以同时拥有一个 index.jsp 和一个 index.action 并更改该设置选择一个或另一个。

于 2011-04-20T20:50:52.867 回答
0

我最终设法弄清楚了我自己。
我测试了在执行阶段编写一个简单的输出到控制台

<action name="index" class="**.map.MapAction">  

当我打开网页时,控制台中没有打印输出。这让我思考。我的主页被命名为 index.jsp,显然这个名称绕过了 Struts 的常规控件。将名称更改为 index2.jsp 解决了这个问题。
可能还有其他地方可以更改此行为,但更改名称更容易。

于 2011-04-21T09:57:20.797 回答