当前位置:编程学习 > JAVA >>

求助,关于ssh2中无法找到action爆404错误

在ssh2的开发过程中遇到一个很头疼的问题。struts2始终找不到action,在测试的工程里面有一处实例都能够找到action,可是我自己写的却始终找不到,一直报404错误。

请求高手帮忙解决一下,是什么问题,我把相关的struts.xml、applicationContext.xml、web.xml所做的相关设置都贴出来,就大家帮忙看看是什么问题!

1.web.xml


2.struts.xml


3.applicationContext.xml

--------------------编程问答-------------------- 补加404错误页面
--------------------编程问答-------------------- 表面上没错,不过过滤器那种写法基本不用了,试试这个:
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包: --------------------编程问答-------------------- 你访问的路径 是不是 mytest/web/users/saveUserinfo.action 啊,后面有没有少action的后缀?action类中是否 有execute()方法啊?action类有没有继承 ActionSupport 类啊。。?

另外你的 struts.xml配置有问题,,,

既然已经用了spring 注入,,那么 
<action name="saveUserinfo" class="">这里的class不应该是类的完整限定名,而是你在spring中注入的saveUserinfoAction --------------------编程问答--------------------
引用 3 楼 ch656409110 的回复:
你访问的路径 是不是 mytest/web/users/saveUserinfo.action 啊,后面有没有少action的后缀?action类中是否 有execute()方法啊?action类有没有继承 ActionSupport 类啊。。?

另外你的 struts.xml配置有问题,,,

既然已经用了spring 注入,,那么 
<action name="saveUserinfo" class="">这里的class不应该是类的完整限定名,而是你在spring中注入的saveUserinfoAction


当然是有的啊 --------------------编程问答-------------------- 你把Servers中曾经部署过的其他项目都删了试试。。。 --------------------编程问答--------------------
引用 2 楼 splendid_java 的回复:
表面上没错,不过过滤器那种写法基本不用了,试试这个:
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包:



我用的你说的过滤,不过现在又爆出了表映射文件的错误,我用的你说的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






--------------------编程问答-------------------- 6楼的可以忽略了,是我忘记往spring注入group映射文件了

继续求关于我1楼找不到action的问题,求高手! --------------------编程问答-------------------- 你的struts.xml放在哪? --------------------编程问答-------------------- struts2核心控制器 换成这个,你写的是struts1 的
 <filter-class>  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
           </filter-class>

还有我上面说的你改过来没有 

--------------------编程问答--------------------
引用 1 楼 cnido 的回复:
补加404错误页面


换了过滤器,要换的jar包好多啊,除了要换你指的common-lang3-3.1.jar之外,还要更换struts2-core-2.2.3.jar和xwork-2.1.2各种报错,现在运行正常了。

我的jar包都是老版本啊!

继续求高手帮忙看看找不到struts2找不到action的问题! --------------------编程问答--------------------
引用 8 楼 splendid_java 的回复:
你的struts.xml放在哪?


我都是放在src目录下的啊!项目中有一个实例就可以用,新建的实例就用不了! --------------------编程问答--------------------
引用 9 楼 ch656409110 的回复:
struts2核心控制器 换成这个,你写的是struts1 的
 <filter-class>  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
           </filter-class>

还有我上面说的你改过来没有 


都改过来了,但是现在貌似页面的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各种报错,现在运行正常了。 --------------------编程问答--------------------
引用 12 楼 cnido 的回复:
Quote: 引用 9 楼 ch656409110 的回复:

struts2核心控制器 换成这个,你写的是struts1 的
 <filter-class>  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
           </filter-class>

还有我上面说的你改过来没有 


都改过来了,但是现在貌似页面的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 楼 cnido 的回复:
Quote: 引用 8 楼 splendid_java 的回复:

你的struts.xml放在哪?


我都是放在src目录下的啊!项目中有一个实例就可以用,新建的实例就用不了!
也就是说现在struts.xml里有一个可以访问的,是不?那对照一下,看少配置什么了,因为你和spring整合了,所以原因可能很多。 --------------------编程问答--------------------
引用 5 楼 lingdudeyanmou 的回复:
你把Servers中曾经部署过的其他项目都删了试试。。。


没有其他项目,目前就这一个项目 --------------------编程问答--------------------
引用 14 楼 splendid_java 的回复:
Quote: 引用 11 楼 cnido 的回复:

Quote: 引用 8 楼 splendid_java 的回复:

你的struts.xml放在哪?


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


我的是整合好的,我前前后后对了一天了,都是一样的,所以就来这里求帮助了。 --------------------编程问答--------------------
引用 13 楼 ch656409110 的回复:
Quote: 引用 12 楼 cnido 的回复:

Quote: 引用 9 楼 ch656409110 的回复:

struts2核心控制器 换成这个,你写的是struts1 的
 <filter-class>  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
           </filter-class>

还有我上面说的你改过来没有 



都改过来了,但是现在貌似页面的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的类。汗死。 --------------------编程问答-------------------- 我建议你先随便定义一个action,在struts.xml配置好,然后去访问,看看行不行,判断到底是struts2的问题,还是spring映射的问题。 --------------------编程问答--------------------


引用 14 楼 splendid_java 的回复:
Quote: 引用 11 楼 cnido 的回复:

Quote: 引用 8 楼 splendid_java 的回复:

你的struts.xml放在哪?


我都是放在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">貌似是无效的 --------------------编程问答--------------------
引用 18 楼 splendid_java 的回复:
我建议你先随便定义一个action,在struts.xml配置好,然后去访问,看看行不行,判断到底是struts2的问题,还是spring映射的问题。


请看19楼我写的东西! --------------------编程问答--------------------
引用 20 楼 cnido 的回复:
Quote: 引用 18 楼 splendid_java 的回复:

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


请看19楼我写的东西!
普通的form中<input type="text" name="user.firstname" size="20">这样写不生效,已经失去struts2的特性,只能通过request去获取 --------------------编程问答--------------------
引用 21 楼 splendid_java 的回复:
Quote: 引用 20 楼 cnido 的回复:

Quote: 引用 18 楼 splendid_java 的回复:

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


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


主要是我觉得用struts2的网页标签用css样式不好控制,不美观!

那如果这样的话,我struts2的action设置貌似就没有什么意义了! --------------------编程问答-------------------- 还是用原来的,新包的东西太麻烦,出一点错,都后怕! --------------------编程问答-------------------- 我又抛弃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>


我怎么取不到对应的属性值啊? --------------------编程问答-------------------- 刚学,不懂~~~,顶一下 --------------------编程问答-------------------- 按原先的配置,按理也不会找不到,去掉spring,单纯地使用struts2试试 --------------------编程问答-------------------- struts action配置package的namespace不要用分层, 就用/users好了.
--------------------编程问答--------------------   楼主既然用了spring那就把action交给spring管理就行,那么struts.xml中的class和spring中bean的id对应就行了..... --------------------编程问答-------------------- 顶一下 呀 --------------------编程问答-------------------- 你的放action的地方的包名 是不是就叫action啊   如果是就改掉
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,