在ssh2的开发过程中遇到一个很头疼的问题。struts2始终找不到action,在测试的工程里面有一处实例都能够找到action,可是我自己写的却始终找不到,一直报404错误。请求高手帮忙解决一下,是什么问题,我把相关的struts.xml、applicationContext.xml、web.xml所做的相关设置都贴出来,就大家帮忙看看是什么问题!1.web.xml
2.struts.xml
3.applicationContext.xml

解决方案 »

  1.   

    表面上没错,不过过滤器那种写法基本不用了,试试这个:
    web.xml:  <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    jar包:
      

  2.   

    你访问的路径 是不是 mytest/web/users/saveUserinfo.action 啊,后面有没有少action的后缀?action类中是否 有execute()方法啊?action类有没有继承 ActionSupport 类啊。。?另外你的 struts.xml配置有问题,,,既然已经用了spring 注入,,那么 
    <action name="saveUserinfo" class="">这里的class不应该是类的完整限定名,而是你在spring中注入的saveUserinfoAction
      

  3.   

    你把Servers中曾经部署过的其他项目都删了试试
      

  4.   

    我用的你说的过滤,不过现在又爆出了表映射文件的错误,我用的你说的common-lang3-1.1.jar把原来的common-lang.jar替换掉了;2013-6-8 16:37:36 org.apache.catalina.core.StandardContext listenerStart
    严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: An association from the table userinfo refers to an unmapped class: com.rzq.bean.Groupinfo
    Caused by: org.hibernate.MappingException: An association from the table userinfo refers to an unmapped class: com.rzq.bean.Groupinfo
    at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1252)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1170)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:805)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:745)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1203)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:189)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
    2013-6-8 16:37:36 org.apache.catalina.core.StandardContext start
    严重: Error listenerStart
    2013-6-8 16:37:36 org.apache.catalina.core.StandardContext start
    严重: Context [/mytest] startup failed due to previous errors
    2013-6-8 16:37:36 org.apache.catalina.core.ApplicationContext log
    信息: Closing Spring root WebApplicationContext
      

  5.   

    6楼的可以忽略了,是我忘记往spring注入group映射文件了继续求关于我1楼找不到action的问题,求高手!
      

  6.   

    struts2核心控制器 换成这个,你写的是struts1 的
     <filter-class>  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
               </filter-class>还有我上面说的你改过来没有 
      

  7.   


    换了过滤器,要换的jar包好多啊,除了要换你指的common-lang3-3.1.jar之外,还要更换struts2-core-2.2.3.jar和xwork-2.1.2各种报错,现在运行正常了。我的jar包都是老版本啊!继续求高手帮忙看看找不到struts2找不到action的问题!
      

  8.   


    我都是放在src目录下的啊!项目中有一个实例就可以用,新建的实例就用不了!
      

  9.   


    都改过来了,但是现在貌似页面的jsp页面也跟着报错了,按理说换了common-lang3-3.1是最新版了,不可能找不到stringUtil这个类啊。java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils换了过滤器,要换的jar包好多啊,除了要换你指的common-lang3-3.1.jar之外,还要更换struts2-core-2.2.3.jar和xwork-2.1.2各种报错,现在运行正常了。
      

  10.   


    都改过来了,但是现在貌似页面的jsp页面也跟着报错了,按理说换了common-lang3-3.1是最新版了,不可能找不到stringUtil这个类啊。java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils换了过滤器,要换的jar包好多啊,除了要换你指的common-lang3-3.1.jar之外,还要更换struts2-core-2.2.3.jar和xwork-2.1.2各种报错,现在运行正常了。jar 不要乱换 ,能运行就好 啦
      

  11.   


    我都是放在src目录下的啊!项目中有一个实例就可以用,新建的实例就用不了!也就是说现在struts.xml里有一个可以访问的,是不?那对照一下,看少配置什么了,因为你和spring整合了,所以原因可能很多。
      

  12.   


    我都是放在src目录下的啊!项目中有一个实例就可以用,新建的实例就用不了!也就是说现在struts.xml里有一个可以访问的,是不?那对照一下,看少配置什么了,因为你和spring整合了,所以原因可能很多。我的是整合好的,我前前后后对了一天了,都是一样的,所以就来这里求帮助了。
      

  13.   

    都改过来了,但是现在貌似页面的jsp页面也跟着报错了,按理说换了common-lang3-3.1是最新版了,不可能找不到stringUtil这个类啊。java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils换了过滤器,要换的jar包好多啊,除了要换你指的common-lang3-3.1.jar之外,还要更换struts2-core-2.2.3.jar和xwork-2.1.2各种报错,现在运行正常了。jar 不要乱换 ,能运行就好 啦
    关键是不换不行啊。不换就报错。你那个过滤器需要新的struts2-core-2.2.3.jar,我老的2.0里面没有那个类,然后接着报错xwork版本又低了,又缺类,现在是正常运行了。struts2的页面标签库有不行了,需要用到原来的更换lang3之前lang的类。汗死。
      

  14.   

    我建议你先随便定义一个action,在struts.xml配置好,然后去访问,看看行不行,判断到底是struts2的问题,还是spring映射的问题。
      

  15.   

    我都是放在src目录下的啊!项目中有一个实例就可以用,新建的实例就用不了!也就是说现在struts.xml里有一个可以访问的,是不?那对照一下,看少配置什么了,因为你和spring整合了,所以原因可能很多。不过你这个用法可以了。我不用struts2的jsp组件标签库,换成了常用的就可以进入到action里面了。(不然继续报StringUtil类找不到)但是我想问一个问题,换成普通的表单组件就是页面怎么取值?1、struts2的jsp标签库<s:form action="saveUser">
         <s:textfield name="user.firstname" label="%{getText('firstname')}"></s:textfield>
         <s:textfield name="user.lastname" label="%{getText('lastname')}"></s:textfield>
         <s:textfield name="user.age" label="%{getText('age')}"></s:textfield>
    <s:submit></s:submit>
        
        </s:form>
    2、常用页面组件<form action="saveUserinfo">
    <p><input type="text" name="T1" size="20"></p>
    <p><input type="text" name="T2" size="20"></p>
    <p><input type="text" name="T3" size="20"></p>
    <p><input type="text" name="T4" size="20"></p>
    <p><input type="submit" value="提交" name="B1"><input type="reset" value="重置" name="B2"></p>
    </form>
    3.action类中的业务逻辑 @Override
    public String execute() throws Exception
    {
    System.out.println("---------------进入userinfoAction------------------"+this.userinfo.getUserName());

    this.service.save(this.userinfo); return SUCCESS;
    }我的意思是如何获取页面这个对象所对应的每一个值日?
    <input type="text" name="T1" size="20">还是写成<p><input type="text" name="user.firstname" size="20">貌似是无效的
      

  16.   


    请看19楼我写的东西!普通的form中<input type="text" name="user.firstname" size="20">这样写不生效,已经失去struts2的特性,只能通过request去获取
      

  17.   


    请看19楼我写的东西!普通的form中<input type="text" name="user.firstname" size="20">这样写不生效,已经失去struts2的特性,只能通过request去获取主要是我觉得用struts2的网页标签用css样式不好控制,不美观!那如果这样的话,我struts2的action设置貌似就没有什么意义了!
      

  18.   

    我又抛弃2楼的方法,自己反复看了一边。是spring配置文件中的<bean id="saveUserinfoAction" class="com.rzq.action.userinfo.SaveUserinfoAction" scope="prototype">的saveUserinfoAction和struts.xml中<action name="saveUserinfo" class="saveUserinfoAction">
    <result name="success" type="redirect">listUserinfo.action</result>
    <result name="input">/web/users/usersave.jsp</result>
    </action>的class="saveUserinfoAction"不一致造成。我看是写的一样,但是有手复制了一下。结果就正确了。还有一个问题:
    jsp页面中的属性怎么我获取的是空值啊?<s:form action="saveUserinfo">
         <s:textfield name="userinfo.userId" label="用户名"></s:textfield>
         <s:textfield name="userinfo.userName" label="姓  名"></s:textfield>
         <s:textfield name="userinfo.userPassword" label="密  码"></s:textfield>
         <s:textfield name="userinfo.userSex" label="性  别"></s:textfield>
    <s:submit></s:submit>
        
         </s:form>
    我怎么取不到对应的属性值啊?
      

  19.   

    按原先的配置,按理也不会找不到,去掉spring,单纯地使用struts2试试
      

  20.   

    struts action配置package的namespace不要用分层, 就用/users好了.
      

  21.   

      楼主既然用了spring那就把action交给spring管理就行,那么struts.xml中的class和spring中bean的id对应就行了.....
      

  22.   

    你的放action的地方的包名 是不是就叫action啊   如果是就改掉