No action config found for the specified url,急……

budali 2008-10-13 07:11:55
刚开始学习struts,用的是eclipse从入门到精通,想看下struts和eclipse是怎样结合的,现在利用书上的一个实例,出现了很烦人的问题,寻找了一个下午,也没有找到问题的所在,现在把情况贴出来,各位高手帮忙解答,谢谢!
这是struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="userForm" type="cn.com.chengang.sms.user.UserForm"/>
</form-beans>

<action-mappings>
<action path="/user/logonAction" type="cn.com.chengang.sms.user.LogonAction" name="userForm" scope="request">
<forward name="success" path="/user/userList.jsp"/>
<forward name="fail" path="/user/logon.jsp"/>
</action>
</action-mappings>

<message-resources parameter="cn.com.chengang.sms.MessageResources" />
</struts-config>
下面是web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd ">
<web-app>
<display-name>myweb</display-name>

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
下面是index.jsp
<%@ page contentType="text/html; charset=GBK"%>
<html>
<body>
<A HREF="user/userList.jsp">显示用户列表</A>
</body>
</html>
下面是logonAction.java
package cn.com.chengang.sms.user;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import cn.com.chengang.sms.Constants;
import cn.com.chengang.sms.model.IUser;
import cn.com.chengang.sms.system.SmsFactory;

public class LogonAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserForm actionForm = (UserForm) form;
String userId = actionForm.getUserId();
String password = actionForm.getPassword();
IUser user = SmsFactory.getDbOperate().getUser(userId);// 从数据库中根据userId取得此用户
ActionMessages messages = new ActionMessages();
if (user == null) {
ActionMessage am = new ActionMessage("LogonAction.fail.userId",
userId);
messages.add("userId", am);
saveErrors(request, messages);
return (mapping.findForward("fail"));
}
String dbPassword = user.getPassword();
if (dbPassword == null || !dbPassword.equals(password)) {
ActionMessage am = new ActionMessage("LogonAction.fail.password");
messages.add("password", am);
saveErrors(request, messages);
return (mapping.findForward("fail"));
}
HttpSession session = request.getSession();
session.setAttribute(Constants.CURRENT_USER, user);// 将当前登录用户缓存起来
return (mapping.findForward("success"));
}
}
下面是userForm.java
package cn.com.chengang.sms.user;
import org.apache.struts.action.ActionForm;
public class UserForm extends ActionForm {
private static final long serialVersionUID = 3238501586467275260L;
private String userId_abc;
private String password;

public String getUserId() {return userId_abc;}
public void setUserId(String userId) {this.userId_abc = userId; }
public String getPassword() {return password; }
public void setPassword(String password) {this.password = password;}

}
编译之后,运用tomcat5.5的服务器,出现下面问题
exception

javax.servlet.ServletException: No action config found for the specified url.
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
org.apache.struts.chain.commands.AbstractSelectAction.execute(AbstractSelectAction.java:68)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

是不是struts-config.xml没有配置好,还是其他问题,请各位给指点下
...全文
2921 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
芒果先生 2012-03-20
  • 打赏
  • 举报
回复
如出现这种情况,则在使用ActionForward的execute方法时,写全要捕获的IOException和ServletException应该就可以了
Zaga10086 2010-04-25
  • 打赏
  • 举报
回复
帮顶是大方大方打发
lhlove271015 2010-02-25
  • 打赏
  • 举报
回复
楼主怎么解决的?我也碰到这样的问题
a404125339 2009-10-12
  • 打赏
  • 举报
回复
11楼的兄弟说的很对,原先我也遇到这样的问题,楼主得检查检查
blackboy_my 2008-10-16
  • 打赏
  • 举报
回复
path你都没写。。。。。人家咋认到你action呢
java__king 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 budali 的回复:]
未在struts.config.xml中配置index.jsp之前,
在eclipse中内测时,右键->运行->run on server,之后,eclipse中的内部浏览器的地址栏中
出现http://localhost:8080/myweb/index.do,为何最后面是index.do而不是index.jsp
[/Quote]
因为你的请求是用action处理的啊
budali 2008-10-15
  • 打赏
  • 举报
回复
未在struts.config.xml中配置index.jsp之前,
在eclipse中内测时,右键->运行->run on server,之后,eclipse中的内部浏览器的地址栏中
出现http://localhost:8080/myweb/index.do,为何最后面是index.do而不是index.jsp
tiyuzhongxin789 2008-10-14
  • 打赏
  • 举报
回复
现在的问题是这样的,在浏览器中直接敲入http://localhost:8080/myweb/index.jsp就可以访问
zidasine 2008-10-14
  • 打赏
  • 举报
回复
以 *.do结尾的请求会被ServletAction拦截
所以*.do的要在struts.config.xml中配置
不是以*.do结尾的请求不需要 所以不会出问题
budali 2008-10-14
  • 打赏
  • 举报
回复
budali 2008-10-13
  • 打赏
  • 举报
回复
还是不怎么清楚,书中及源代码都没有写这部分,为什么就可以运行?
chllcy 2008-10-13
  • 打赏
  • 举报
回复
不知道理解了没,说一下.
index.do会传给struts的actionservlet处理,而你也没有path="/index"的action,所以当然说找不到了.
index.jsp不会被actionservlet处理的.
accp206 2008-10-13
  • 打赏
  • 举报
回复
关注中...帮顶!
budali 2008-10-13
  • 打赏
  • 举报
回复
现在发现问题的根源,但还不知怎样解决,是这样的,在eclipse中内测时,是右键->运行->run on server,之后,eclipse中的内部浏览器的地址栏中
出现http://localhost:8080/myweb/index.do,注意,最后面是index.do而不是index.jsp,然后就会出现javax.servlet.ServletException: No action config found for the specified url.异常。这就是症结所在,为什么在eclipse中run on server会出现index.do呢,这在struts-config.xml 和web.xml中是怎样体现的,该怎样修改?
budali 2008-10-13
  • 打赏
  • 举报
回复
现在的问题是这样的,在浏览器中直接敲入http://localhost:8080/myweb/index.jsp就可以访问,但是在eclipse内部测试时就出现上述错误
这又是咋回事呢

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧