运行:index.jsp---->input.jsp----->details.jsp,但是在input.jsp到details.jsp的时候报错误。

异常如下:

严重: Could not find action or result
/
There is no Action mapped for namespace [/] and action name [] associated with c
ontext path []. - [unknown location]
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:1
85)
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsAct
ionProxyFactory.java:39)
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultA
ctionProxyFactory.java:58)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:534)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOper
ations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilt
er(StrutsPrepareAndExecuteFilter.java:91)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler
.java:1419)
at com.bjhit.eranges.utils.SetCharacterEncodingFilter.doFilter(SetCharacterEnco
dingFilter.java:39)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler
.java:1419)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137
)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java
:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java
:1075)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:
193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:
1009)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135
)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHand
lerCollection.java:255)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.
java:154)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:1
16)
at org.eclipse.jetty.server.Server.handle(Server.java:368)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpCo
nnection.java:489)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpC
onnection.java:942)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplet
e(AbstractHttpConnection.java:1004)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java
:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.
java:628)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.j
ava:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:
608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:5
43)
at java.lang.Thread.run(Thread.java:662)

代码如下:

web.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  3. <display-name>20161101-struts2-2</display-name>
  4.  
  5. <!-- 配置struts2的Filter -->
  6. <filter>
  7. <filter-name>struts2</filter-name>
  8. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  9. </filter>
  10.  
  11. <filter-mapping>
  12. <filter-name>struts2</filter-name>
  13. <url-pattern>/*</url-pattern>
  14. </filter-mapping>
  15.  
  16. </web-app>

struts.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5.  
  6. <struts>
  7. <!-- package:包,struts2使用package来组织模块
  8. name属性:必须,用于被其他包引用当前包
  9. extends:当前包继承哪个包,即可继承父包的所有配置,通常情况下继承struts-default
  10. -->
  11.  
  12. <package name="helloworld" extends="struts-default">
  13.  
  14. <!-- 配置一个action:一个struts2的请求就是一个action
  15. name:对应一个struts2的请求的名字(对应着servletPath,但去除/和扩展名)
  16. result:结果
  17. -->
  18. <action name="product-input">
  19. <result>/WEB-INF/pages/input.jsp</result>
  20. </action>
  21.  
  22. <action name="product-save" class="com.tt.struts2.helloworld.Product"
  23. method="save">
  24. <result name="details">/WEB-INF/pages/details.jsp</result>
  25. </action>
  26.  
  27. </package>
  28.  
  29. </struts>

index.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <!-- "product-input.action"就是servletPath -->
  11. <a href="product-input.action">Product Input</a>
  12. </body>
  13. </html>

input.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <!-- "product-save.action"就是servletPath -->
  11. <form action="product-save.action">
  12.  
  13. ProductName:<input type="text" name="productName"/>
  14. <br><br>
  15.  
  16. ProductDesc:<input type="text" name="productDesc"/>
  17. <br><br>
  18.  
  19. ProductPrice:<input type="text" name="productPrice"/>
  20. <br><br>
  21.  
  22. <input type="submit" value="Submit"/>
  23. <br><br>
  24. </form>
  25.  
  26. </body>
  27. </html>

details.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. ProductId:${productId }
  11. <br><br>
  12.  
  13. ProductName:${productName }
  14. <br><br>
  15.  
  16. ProductDesc:${productDesc }
  17. <br><br>
  18.  
  19. ProductPrice:${productPrice }
  20. <br><br>
  21. </body>
  22. </html>

Product.java:

  1. package com.tt.struts2.helloworld;
  2.  
  3. public class Product {
  4. private Integer productId;
  5.  
  6. private String productName ;
  7. private String productDesc ;
  8. private double productPrice ;
  9.  
  10. public String getProductName() {
  11. return productName;
  12. }
  13. public void setProductName(String productName) {
  14. this.productName = productName;
  15. }
  16. public String getProductDesc() {
  17. return productDesc;
  18. }
  19. public void setProductDesc(String productDesc) {
  20. this.productDesc = productDesc;
  21. }
  22. public double getProductPrice() {
  23. return productPrice;
  24. }
  25. public void setProductPrice(double productPrice) {
  26. this.productPrice = productPrice;
  27. }
  28.  
  29. public Integer getProductId() {
  30. return productId;
  31. }
  32. public void setProductId(Integer productId) {
  33. this.productId = productId;
  34. }
  35.  
  36. @Override
  37. public String toString() {
  38. return "Product [productId=" + productId + ", productName=" + productName + ", productDesc=" + productDesc
  39. + ", productPrice=" + productPrice + "]";
  40. }
  41.  
  42. public String save(){
  43.  
  44. System.out.println("sava: "+this);
  45. return "details";
  46. }
  47. }

原因分析:

猜测应该是struts.xml的问题,但是第一个product-input的action都可以正常跳转(index.jsp---->input.jsp),为什么第二个product-save(input.jsp----->details.jsp)的action无法正常呢?

二者唯一的区别就是第二个action明确指定需要利用反射调用Product类里的save( )方法。但save方法没问题,最后怀疑表单提交上的问题。

仔细看input.jsp页面,发现input.jsp里的form表单的提交方式没有设置method(注意:html提交表单的方式默认为get)。

解决办法:将input.jsp里的form添加method="post"问题就解决了。

那么get请求和post请求有何区别呢?见http://www.cnblogs.com/TTTTT/p/6650117.html

在网上查找的这个报错的常见原因如下:

1.struts.xml文件错误。

这种错误又分为以下几种:

1)struts.xml里配置action的class时,全类名要写正确。

2)struts.xml文件名错误。一定要注意拼写问题;

3)struts.xml文件放置路径错误。一定要将此文件放置在src目录下。编译成功后,要确认是否编译到classes目录中;

4)struts.xml文件内容错误:启动页面一定要是自己工程里有的jsp文件。

<welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
     </welcome-file-list>

如果你在Eclipse工程的WebContent文件夹下没有这个index.jsp文件,也会报同样的错误。
    比如我自己定义了一个login.jsp文件,放在WebContent文件夹下,就写成
    <welcome-file>login.jsp</welcome-file> 
    把login.jsp文件放在WEB-INF下自定义的jsp文件夹下,就写成
    <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>

2.表单提交页面的错误

比如上面我的错误。

报错:HTTP Status 404 - There is no Action mapped for namespace [/] and action name [product-save] associated with context path [/20161101-struts2-2].的更多相关文章

  1. Struts2-tomcat报错:There is no Action mapped for namespace / and action

    HTTP Status 404 - There is no Action mapped for namespace / and action name first. type Status repor ...

  2. TOMCAT报错:HTTP Status 404 -

    构建struts2工程师,tomcat报错: HTTP Status 404 - type Status report message description The requested resour ...

  3. struts2报错:There is no Action mapped for namespace [/] and action name [userAction!add]

    使用struts2.3进行动态方法调用时出现: There is no Action mapped for namespace [/user] and action name [user!add] a ...

  4. 在IE浏览器输入测试servlet程序报:HTTP Status 404(The requested resource is not available)错

    一.HTTP Status 404(The requested resource is not available)异常主要是路径错误或拼写错误造成的,请按以下步骤逐一排查: 1.未部署Web应用 2 ...

  5. http://localhost/ 或 http://127.0.0.1/ 报错:HTTP 404 的解决办法

    一些初次接触使用 Eclipse 工具来开发 JAVA Web 工程的开发人员,可能会对 Eclipse 和 Tomcat 的绑定产生一个疑惑. 那就是 在修改了 Tomcat 的8080端口为80后 ...

  6. 【Solr】新建core后,启动服务访问web报错 HTTP Status 503

    新建core collection2后,启动solr服务,访问solr web界面报错. HTTP Status 503 - Server is shutting down or failed to ...

  7. 报错HTTP Status 500 - Unable to instantiate Action

    报错如下: HTTP Status 500 - Unable to instantiate Action, visitAction, defined for 'visit_toAddPage' in ...

  8. 报错HTTP Status 500 - The given object has a null identifier: cn.itcast.entity.Customer; nested exception is org.hibernate.TransientObjectException: The given object has a null identifier:

    在使用模型驱动封装的时候,要保证表单中name属性名和类中属性名一致,否则将会报错如下: HTTP Status 500 - The given object has a null identifie ...

  9. 求教:Knife4jAggregationDesktop访问报错HTTP ERROR 404

    (1)Windows Server 2019下面,java版本:c:\Users\WinUser01\.jdks\corretto-1.8.0_292\bin\java.exe(2)Knife4jAg ...

随机推荐

  1. banner秒杀

    永远显示 未开始/进行中(需要用到两个for循环,第一个我没有想到,诗詹帮我写的) function timeList(){ myTime = new Date().getTime() var ite ...

  2. shell变量赋值 不能有空格的原因

    典型例子: a=date echo $a      成立 a =date echo $a     不成立 其实原因很简单 shell在解释命令时的原则是第一个符号标记只能是程序或者命令,有空格的时候第 ...

  3. 2016.9.18 --- Shenyang ol

    1001 Resident Evil 1002 List wants to travel 1003 hannnnah_j’s Biological Test 1004 Mathematician QS ...

  4. Oracle 字符串分割排序冒泡算法

    例子: 一个字符串"11,15,13,17,12",以逗号分割,现在要排序成"11,12,13,15,17". 写了一个实现方法,记录下来以备后用: ----- ...

  5. Xcode5 运行程序 提示IOS 模拟器未能安装此应用程序

    更新了Xcode5,结果模拟器各种不配合,首先遇到的问题就是提示“IOS 模拟器未能安装此应用程序” 上网查了一下,网友给出的解决办法“删除~/Library/Application Support/ ...

  6. node.js学习笔记【1】

    http://howtonode.org/how-to-install-nodejs http://www.mcclean-cooper.com/valentino/cygwin_install/

  7. hessionproxy

    from pyhessian.client import HessianProxy if __name__ == '__main__': params = {"a": " ...

  8. mac下XAMPP服务器配置多站点配置局域网配置 (转)

    原文:http://blog.csdn.net/wbw1985/article/details/9493989 Mac 上的软件大多是收费的,配置开源的东东也挺麻烦,网上搜索发现XAMPP软件是集成了 ...

  9. Python 基礎 - 數據類型

    標準數據類型 Python3 中有六個標準的數據類型 1 Number(數字) 2 String(字符串) 3 List (列表) 4 Tuple (元組) 5 Sets (集合) 6 Diction ...

  10. JSP 用户表单的简单实现

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...