建一个web工程, 名为test_struts2,然后
struts2配置文件中:
<action name="aa" class="com.view.Test" method="test">
其中 name="aa",在WebRoot下创建一个包,名字为aa,然后运行http://127.0.0.1:8080/test_struts2/aa
就会出现错误提示
Stacktraces
There is no Action mapped for namespace / and action name aa/. - [unknown location]   什么原因呢

解决方案 »

  1.   

    http://127.0.0.1:8080/test_struts2/aa这样的话就是访问该目录了
    改成http://127.0.0.1:8080/test_struts2/aa.action
      

  2.   

    既然建了一个文件夹aa,package的namespace就该成"/aa"
      

  3.   

    之所以把action的name的名字配置成和WebRoot下包名相同,我的目的是想要拦截WebRoot下某个包.
    比如把struts2的配置文件配置成:
    <action name="manager" class="com.view.TestAction">
      <result>/index.jsp</result>
    </action>然后在WebRoot下建一个包,名字为manager,然后在manager包中创建文件delete.jsp,我想达到的效果是,当直接输入
    http://127.0.0.1:8080/test_struts2/manager/delete.jsp的时候,转到index.jsp页面,
    但是结果却是能直接访问delete.jsp文件。com.view.TestAction.java的代码如下:
    public class TestAction extends ActionSupport{
            public String execute() {
    return Action.SUCCESS;
    }
    }
      

  4.   

    这是怎么回事呢?为什么直接输入http://127.0.0.1:8080/test_struts2/manager/delete.jsp能直接访问manager包里的文件呢?
    <action name="manager" class="com.view.TestAction">
      <result>/index.jsp</result>
    </action>
    并没有起作用
      

  5.   

    http://127.0.0.1:8080/test_struts2/manager/delete.jsp直接访问jsp根本没有走action,页面跳转是看整个url,不是其中一部分,不过可以用拦截器把/manager/*全部转到index.jsp
      

  6.   

    怎么用拦截器拦呢
    我原本是用拦截器拦的,但是发现没有走配置拦截器的action。
    struts2我是这样配置的,不知道错在哪,代码如下:<struts>
         <constant name="struts.devMode" value="true" />
            <package name="Myinterceptor" namespace="/" extends="struts-default">
    <interceptors>
                <interceptor name="my" class="interceptor.MyInterceptor">
             </interceptor>

             <action name="manager" class="view.InterceptorAction" >
                 <result name="hasLogin">/manage/manage.jsp</result>
                 <result name="noLogin">/index.jsp</result> <!--用户没有登陆>               <interceptor-ref name="my"></interceptor-ref>
                 <interceptor-ref name="defaultStack"></interceptor-ref>
             </action>
         </package>
    </struts>
      

  7.   

    在web.xml里配置
    <filter>
    <filter-name>MyInterceptor</filter-name>
    <filter-class>interceptor.MyInterceptor</filter-class>
    </filter><filter-mapping>
    <filter-name>MyInterceptor</filter-name>
    <url-pattern>/manage/*</url-pattern>
    </filter-mapping>
    这样才能禁止非法访问jsp
    struts.xml只能拦截action,对jsp无效
      

  8.   

    在interceptor.MyInterceptor里public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request=(HttpServletRequest)sreq;
            HttpServletResponse response =(HttpServletResponse)sres;
            if(request.getSession().getAttribute("userName")==null) {
            response.sendRedirect("/index.jsp");
                }
            chain.doFilter(request,response);
            }我在7楼说的不对,不是用拦截器,应该是过滤器,9楼和该楼是代码
      

  9.   

    web.xml代码:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

        <filter>
             <filter-name>struts2</filter-name>
             <filter-class>
                  org.apache.struts2.dispatcher.FilterDispatcher
             </filter-class>
        </filter>

        <filter>
             <filter-name>MyInterceptor</filter-name>
             <filter-class>interceptor.MyInterceptor</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

        <filter-mapping>
             <filter-name>MyInterceptor</filter-name>
             <url-pattern>/manager/*</url-pattern>
        </filter-mapping>    <welcome-file-list>
             <welcome-file>index.jsp</welcome-file>
        </welcome-file-list></web-app>运行tomcat后出现如下异常:
    严重: Exception starting filter MyInterceptor
    java.lang.ClassCastException: interceptor.MyInterceptor还有一个疑问,如果这样配置web.xml的话,web.xml里有
        <filter-mapping>
           <filter-name>struts2</filter-name>
           <url-pattern>/*</url-pattern>
        </filter-mapping>
    ,这样不是走不到
         <filter-mapping>
            <filter-name>MyInterceptor</filter-name>
            <url-pattern>/manager/*</url-pattern>
         </filter-mapping>
    吗?
      

  10.   

    过滤器是按照web.xml中的定义顺序执行的,所以要把MyInterceptor写在struts2的前面。chain.doFilter(request,response);就是继续执行
    java.lang.ClassCastException 可能是interceptor.MyInterceptor类的代码有问题,代码如下public class MyInterceptor implements Filter {
         public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request=(HttpServletRequest)sreq;
            HttpServletResponse response =(HttpServletResponse)sres;
            if(request.getSession().getAttribute("userName")==null) {
            response.sendRedirect("/index.jsp");
                }
            chain.doFilter(request,response);
            }
    }