本帖最后由 u011088871 于 2014-10-31 17:27:28 编辑

解决方案 »

  1.   

    (1)在index.jsp页面中添加<%@include file="loginCheck.jsp"%>(2)制作logincheck.jsp 页面 代码如下:
    <%
    String name = (String) session.getAttribute("name");
    if (name == null) {
    %>
    <jsp:forward page="login.jsp" />
    <%
    }(ps:前提,你session中有数据)
    %>
      

  2.   

    出现这个问题,说明你还没有理解struts2中action的搜索顺序啊,多看看基础吧!!!
    你的URL是:http://localhost:8080/home/xyz/index
    根据action的搜索顺序,首先查找是否存在命名空间为"/xyz"的package,如果不存在,则向上一级查找,即查找是否存在命名空间为"/"的package,同理如果没有找到这个包,那么再向上一级也就是查找命名空间为""或者不带命名空间参数的包,如果还不存在的话就提示action不存在。
    这里虽然不存在命名空间为"/xyz"的包,但是往上一级查找的时候找到了命名空间为"/"的包,并且该包下存在名称为"index"的action,所以根据配置文件服务器内部转发到了你的index.jsp文件!
    真挚回答,希望给分,有问题再探讨!
      

  3.   


    是的,这个问题其实我在礼拜六早上已经解决掉了,现在弄的就是刚看完SSH框架做的第一个试验性项目,所以遇到了不少低级障碍,之前看李刚的书的时候还以为命名空间是默认精确匹配的,后来发现的答案跟你给出的解释是一样的,最后发现只要加上一个被我忽略掉的常量和适当调整下action位置,就可以完美解决掉这个404问题,打算明天再把配置传上来,先不结贴,谢谢这位兄弟鼎力相助!另外李刚的书完全没提过这种情况,那个常量的解释也是糊里糊涂的,真恶心....
      

  4.   


    <struts>
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
    <constant name="struts.i18n.encoding" value="UTF-8" /> <package name="404" extends="struts-default">
    <action name="*">
    <result type="redirect">/404</result>
    </action>
    </package>
    <package name="root" namespace="/" extends="struts-default">
    <action name="404">
    <result>/not_found.html</result>
    </action>
    <action name="index" class="index">
    <result>/index.jsp</result>
    </action>
    </package>
    </struts>
    把配置精简了发上来,其实就alwaysSelectFullNamespace这个常量,默认是false的,设置为true才能精确匹配命名空间路径,不再自动逐级往前模糊搜索,然后配置下公共空间下的404转发到根路径404action就完事了,结贴,分数送上~~