struts1.2问题

问题描述

大家好!我是struts新手,刚按照网上的一个教程做了一个产品数据录入和查询的实例,可运行的时候出现:Therequestedresource(/samples/saveProduct)isnotavailable.恳请大家帮帮忙,问题出在哪里?谢谢。开发平台:myeclipse8.5+mysql5.0,项目工程名为:samples1.newProduct.jsp页面,所在目录,samples/WebRoot<%@pagepageEncoding="GBK"%><html><head><title>产品信息录入</title></head><body><center><formmethod="post"action="saveProduct.do"><tablewidth="100%"border="0"><tr><td><divalign="center"><label>产品编号:<inputtype="text"name="productID"id="textfield"/></label><p><label>产品名称:<inputtype="text"name="productName"id="textfield2"/></label></p><p><label>产品价格:<inputtype="text"name="price"id="textfield3"/></label></p></div></td></tr><tr><td><divalign="center"><label><inputtype="submit"name="button"id="button"value="保存"/></label></div></td></tr></table></form></center></body></html>2.ProductForm.java,对应newProduct.jsp页面的ActionForm,所在目录:samples/src/actionformpackageactionform;importorg.apache.struts.action.*;publicclassProductFormextendsActionForm{privateStringproductID;//产品IDprivateStringproductName;//产品名称privatefloatprice;//产品价格publicStringgetProductID(){returnproductID;}publicvoidsetProductID(StringproductID){this.productID=productID;}publicStringgetProductName(){returnproductName;}publicvoidsetProductName(StringproductName){this.productName=productName;}publicfloatgetPrice(){returnprice;}publicvoidsetPrice(floatprice){this.price=price;}}3.业务处理类Product.java,所在目录:/samples/src/modelpackagemodel;importjava.sql.*;importactionform.*;importstruts.Struts;publicclassProductextendsStruts{privateProductFormform;publicProduct(ProductFormform)throwsException{super();this.form=form;validate();}//验证客户端提交的数据publicvoidvalidate()throwsException{if(form.getProductID().trim().equals(""))thrownewException("产品ID不能为空!");if(form.getProductID().length()>4)thrownewException("产品ID最长为4位!");if(form.getProductName().trim().equals(""))thrownewException("产品名称不能为空");if(Float.compare(form.getPrice(),0)<=0)thrownewException("产品价格必须大于0");}//将客户端提交的产品信息保存到t_products中publicvoidsave()throwsException{try{StringproductID=form.getProductID();StringproductName=form.getProductName();floatprice=form.getPrice();Stringsql="INSERTINTOt_productsVALUES('"+productID+"',"+"'"+productName+"',"+String.valueOf(price)+")";PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.executeUpdate();//执行INSERT语句pstmt.close();conn.close();}catch(Exceptione){thrownewException(e.getMessage());}}}4.struts-config.xml配置<struts-config><data-sources><data-sourcekey="sql"type="org.apache.commons.dbcp.BasicDataSource"><set-propertyproperty="driverClassName"value="com.mysql.jdbc.Driver"></set-property><set-propertyproperty="url"value="jdbc:mysql://localhost:3306/struts"></set-property><set-propertyproperty="maxActive"value="5"></set-property><set-propertyproperty="username"value="root"></set-property><set-propertyproperty="password"value="admin"></set-property><set-propertyproperty="autoCommit"value="true"></set-property></data-source></data-sources><form-beans><form-beanname="SaveProductForm"type="actionform.ProductForm"/><form-beanname="SearchForm"type="actionform.ProductForm"/></form-beans><global-exceptions/><global-forwards><forwardname="newProduct.jsp"path="/newProduct.jsp"></forward><forwardname="searchProduct.jsp"path="/searchProduct.jsp"></forward></global-forwards><action-mappings><actionname="SaveProductForm"path="/saveProduct"scope="request"type="action.SaveProductAction"><forwardname="save"path="/save.jsp"/></action><actionname="SearchForm"path="/searchProduct"type="action.SearchProductAction"><forwardname="search"path="/search.jsp"/></action></action-mappings><message-resourcesparameter="struts.ApplicationResources"/></struts-config>5.web.xml文件配置<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"version="2.4"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><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><init-param><param-name>debug</param-name><param-value>3</param-value></init-param><init-param><param-name>detail</param-name><param-value>3</param-value></init-param><load-on-startup>0</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>有关查询的类就不复制上来了,请大家帮帮忙,问题到底出在哪里,不胜感激。

解决方案

解决方案二:
Therequestedresource(/samples/saveProduct)isnotavailable这句话很明确,找不到路径``检查你的请求的url对不对```
解决方案三:
我检查好几遍了,觉得没问题啊。能打开newProduct.jsp页面,提交表单时就给出请求资源不可用的错误。
解决方案四:
path="/saveProduct"把/去掉试试!
解决方案五:
form中的action要与配置文件中的一致点击按钮后,看url就知道你实际action是什么了
解决方案六:
你这是配置路径问题不是页面代码问题
解决方案七:
path="/saveProduct"把/去掉试过了,也不行。从错误提示看,是找不到action,也就是配置路径问题。可我检查过好几遍都觉得没问题。newProduc.jsp页面中的表单action="saveProduct",struts-config.xml文件配置中的信息:<action-mappings><actionname="SaveProductForm"path="/saveProduct"scope="request"type="action.SaveProductAction"><forwardname="save"path="/save.jsp"/>/action>配置文件中path的值已经和表单的action属性值一致了。
解决方案八:
怎么没人遇到这种问题吗?大家帮我解答一下啊
解决方案:
引用1楼witcheryne的回复:

Therequestedresource(/samples/saveProduct)isnotavailable这句话很明确,找不到路径``检查你的请求的url对不对```

up问题很明确啊
解决方案:
type="action.SaveProductAction">贴出来看看路劲写的没有问题如果按你所说就是找不到这个action
解决方案:
<formmethod="post"action="saveProduct.do">改为<formmethod="post"action="/saveProduct.do">
解决方案:
“publicclassProductextendsStruts{}"你的Product继承了Struts类,对吧?那Struts类是怎么写的?贴出来看看!
解决方案:
看来是没有理解到用法你这个需要forwardaction的支持才行也就是说你需要配置成forwardaction才行
解决方案:
业务类Product是否该继承Action或者DispatchAction吧?好像没有见过直接继承Struts的!
解决方案:
谢谢大家的回答。由于是采用struts的DataSources标签来连接数据库的,使用myeclipse8.5添加strutslib不会有commons-pool.jar和commons-dbcp-1.2.1.jar这两个包,我把这两个包手动添加进来后,把页面的action值改为/saveProduct.do之后就不会出现这个错误了。我自己写了一个Struts类来连接数据库,Product类继承了Struts类,不过连不上数据库。Struts.java:packagestruts;importjava.sql.*;importjavax.servlet.http.*;importjavax.servlet.ServletContext;importjavax.sql.DataSource;importorg.apache.struts.action.*;publicclassStruts{protectedDataSourcedatasource=null;protectedConnectionconn=null;protectedActionServletservlet;publicStruts(){ServletContextctx=servlet.getServletContext();datasource=(DataSource)ctx.getAttribute("sql");try{conn=datasource.getConnection();System.out.println("获取数据源成功");}catch(Exceptionex){System.out.println("获取数据源失败");}}}

时间: 2024-09-22 11:48:31

struts1.2问题的相关文章

Struts1.1 介绍

前一段时间好象有人问关于Struts的事情,本人留意了一下.请有兴趣的同志不防研究研究.(1)1. 介绍 1.1 Model-View-Controller (MVC) 设计模式 FIXME - 需要一个对该模式一般性的介绍.(译注:可以参考机械工业出版社的<设计模式>.) 1.2 将MVC概念映射到Struts组件中 Struts 的体系结构实现了Model-View-Controller设计模式的概念,它将这些概念映射到web应用程序的组件和概念中. 这一体系结构中每个主要的组件都将在下面

struts1和spring整合的方法

struts1和spring有两种整合的方法  一种是action和spring bean映射:一种是将action交给 spring初始化 第一种方式:访问.do的URL->tomcat接收到request-〉到Struts配置文件里找对应的action-〉找 到对应的action组件(Action那个类)-〉这个类对request进行一系列处理-〉调用spring提供的某个 service的注入实例的方法->由这个方法返回值-〉响应输出 第二种方式:访问.do的URL->tomcat

层层递进Struts1(八)之总结

先来看一下Struts1学习总结的思维导图,画的主要是Struts1中的重点和博客分布,如下所示: 系列博客的侧重点是: Struts1是什么? 为什么要使用它? 如何使用Struts1? Struts1源码分析 ? 总结 学完后综合看来,所谓的Struts1框架,实际是利用java已存在的函数二次封装所得,它侧重于解 决MVC中V和部分C的控制问题,较多使用配置文件,很大程度上减少了文件个数和代码重复,使得开发和维护 相对于不使用框架而言要简单的多.当然因为它只是封装和重组Java函数,如果你

层层递进Struts1(七)详解DispatchAction

通过前面几篇博客,不知道大家有没有发现这个问题,虽然现在可以灵活控制跳转了,但是Action的数量 还是比较多,如何既能保证跳转灵活,还能减少Action的数量?这就是我们这篇博客所说的DispatchAction, 如其名,可以理解为"分发式Action",使用它可以避免为每个Action创建一个类. 我们先来看一下 实例. UserAction DispatchAction继承的是Action,它的特点就是把以前的多个Action合并为 一个,当多个Action关联较大时,可以像这

层层递进Struts1(六)自定义转换器

Struts提供的类型转换有限,如果我们强行使用没有的类型转换,则会出现错误,以Date类型为例: org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet action threw exception java.lang.IllegalArgumentException: Cannot invoke com.tgb.struts1.TypeCovertActionForm.set

层层递进Struts1(五)之处理流程

这篇博客我们深入Struts框架执行部分源码,从ActionServlet的process函数开始,看一下其内在的执行 过程. 流程图 以下流程图展示的是ActionServlet和RequestProcessor两个类用到的函数,如RequestProcessor调用的 其它类的函数不再说明. 函数说明 我们选择几个重要的函数说明,其它函数则简单说明一下即可. ActionServlet process /** * <p>Perform the standard request proces

层层递进Struts1(四)之预加载ActionServlet

Struts的执行相当于分为两个阶段,预加载阶段和执行阶段,预加载阶段是指在Tomcat启动之时就开始执 行的内容,而此时我们并未真正进入跳转逻辑,这篇博客我们来分析一下预加载阶段. 配置文件 还记得web.xml中关于Struts的Servlet是如何配置的吗? <servlet- name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-c

层层递进Struts1(三)之Struts组成

这篇博客我们来说一下Struts的主要组成我们,通过前几篇博客,我们知道这个框架最重要的几个步骤: 获取路径.封装表单.获取转向列表.转向逻辑处理.转向,与此对应的是:ActionServlet.ActionForm. ActionMapping.Action.ActionForward. ActionServlet 这个在上篇博客已经说明,可以访 问< 预加载ActionServlet>. ActionForm ActionForm的主要作用是对表单数据进行封装,这 个.NET开发中的实体类

层层递进Struts1(二)之Struts1简介及登录实例

上篇博客由Servlet的几个版本的例子,引出在页面跳转控制方面要解决的问题,在文章最后提到了 Struts1,这篇文章目的是解释一下什么是Struts1,及如何使用的问题. 什么是Struts1 说一 下我的理解:它符合MVC思想,使用Java二次开发封装的一个框架,主要简化.解决页面请求分发.跳转的问 题.Stuts1的优点是使用了丰富的配置文件使得灵活性大大提高:因为已经封装成框架,使得缩短了开发时间 .提高了开发效率,同时适量使用抽象,使得代码冗余减低.文件冗余减少,维护更加简单. St

层层递进Struts1(一)之由Servlet引入Struts

在说Struts1之前,我们先来使用Servlet编写一个程序从而了解Struts产生原因和用途:一个简单的增删 改查,我们来看一下使用Servlet是如何实现的,为了形象说明,我们从最基本的开始写,然后逐步递进. 第一版 这一版我们使用最常规的做法,增删改查每个功能都使用自己的Servlet,内容如下: 文件树 index.jsp <form action="servlet/AddUserServlet" method="post"> 姓名:<i