问题描述
大家好!我是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("获取数据源失败");}}}