本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅《Struts 2系列教程》来比较Struts 1.x和Struts 2.x的相同点和不同点。
在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发、运行Struts程序,并给出了解决ActionForm出现乱码问题的方法。
读者可以从本文中了解开发Struts 1.x程序的基本过程。
一、本文给出的程序要实现什么功能mystruts是一个录入和查询产品信息的程序。
为了方便起见,本例中的产品信息表只包括了产品ID、产品名称和产品价格三个字段。
mystruts的主要功能如下:1. 接受用户输入的产品ID、产品名称和产品价格。
2. 验证这些字段的合法性。
如果某些字段的输入不合法(如未输入产品ID),程序会forward到一个信息显示页,并显示出错原因。
3. 如果用户输入了正确的字段值,程序会将这些字段值保存到数据库中,并显示“保存成功”信息。
4. 用户输入产品名称,并根据产品名称进行模糊查询。
如果存在符合要求的产品信息。
程序会以表格形式显示这些产品的信息,同时显示记录数。
如果未查到任何记录,会显示“没有符合要求的记录!”信息。
二、编写程序前的准备工作1. 建立数据库在编写程序之前,需要建立一个数据库(struts)和一个表(t_products),建立数据库和表的SQL脚本如下所示:# 建立数据库strutsCREATE DATABASE IF NOT EXISTS struts DEFAULT CHARACTER SET GBK;# 建立表t_productsCREATE TABLE IF NOT EXISTS struts.t_products (product_id varchar(4) NOT NULL,product_name varchar(50) NOT NULL,price float NOT NULL,PRIMARY KEY (product_id)) ENGINE=InnoDB DEFAULT CHARSET=gbk;2 建立一个支持struts1.x的samples工程用MyEclipse建立一个samples工程(Web工程),现在这个samples工程还不支持Struts1.x (没有引入相应的Struts jar包、struts-config.xml文件以及其他和Struts相关的配置)。
然而,在MyEclipse中这一切并不需要我们手工去加入。
而只需要使用MyEclipse的「New Struts Capabilities」对话框就可以自动完成这些工作。
首先选中samples工程,然后在右键菜单中选择「MyEclipse」> 「New Struts Capabilities」,启动「New Struts Capabilities」对话框。
对默认的设置需要进行如下的改动:(1)将Struts specification改为Struts 1.2.(2)将Base package for new classes改为struts.(3)将Default application resources改为struts.ApplicationResources.改完后的「New Struts Capabilities」对话框如图1所示。
点击查看大图在设置完后,点击Finish按钮关闭对话框。
在向samples工程添加支持Struts的功能后,主要对samples工程进行了三个操作。
(1)引入了Struts 1.2 的jar包(在samples的工程树中多了一个Struts 1.2 Libraries节点)。
(2)在WEB-INF目录中添加了一个struts-config.xml文件。
文件的默认内容如下面的代码所示:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN""/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans /><global-exceptions /><global-forwards /><action-mappings /><message-resources parameter="struts.ApplicationResources" /></struts-config>(3)在WEB-INF中的web.xml文件中添加了处理Struts动作的ActionServlet的配置,代码如下:<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>到目前为止,samples工程已经完全支持Struts了。
读者可以看到,如果不使用MyEclipse,那么上面所列出的配置文件的内容都必须手工输入。
因此,使用MyEclipse来开发Struts程序可以省去很多配置xml文件的工作。
三、实现程序的首页(index.jsp)首先在<samples工程目录>中建立一个mystruts目录,然后在<samples工程目录>" mystruts 目录中建立一个index.jsp文件,这个文件的内容如下。
<%@ page pageEncoding="GBK"%><%-- 引用Struts tag--%><%@ taglib uri="/tags-html" prefix="html"%><html><head><title>主界面</title></head><body><table align="center" cellpadding="10" width="100%"><tr><td align="right" width="50%"><%-- 使用Struts tag--%><html:link forward="newProduct">录入产品信息</html:link></td><td><html:link forward="searchProduct">查询产品信息</html:link></td></tr></table></body></html>在MyEclipse中启动Tomcat(如果Tomcat处于启动状态,在修改完配置文件后,建议在MyEclipse的Servers页重新发布samples工程,以使修改生效)。
在IE中输入如下的URL:http://localhost:8080/samples/mystruts/index.jsp我们发现在输入上面的URL后,在IE中并未显示正确的运行结果,而是抛出了如下的异常:.MalformedURLException:Cannot retrieve ActionForward named newProduct 这个异常表明程序并未找到一个叫newProduct的forward(forward将在后面详细地讲述)。
因此,可以断定,在JSP中使用forward时,这个forward必须存在。
下面我们来添加index.jsp 页面中所使用的两个forward:newProduct和searchProduct.这两个forward分别引向了建立产品信息的页面(newProduct.jsp)和查询产品信息的页面(searchProduct.jsp)。
我们可以在struts-config.xml文件中<struts-config>节点中添加两个全局的forward,代码如下:<global-forwards><forward name="newProduct" path="/mystruts/newProduct.jsp" /><forward name="searchProduct" path="/mystruts/searchProduct.jsp" /></global-forwards>上面的代码中所示的newProduct.jsp和searchProduct.jsp目前并不存在(将在以后实现这两个JSP页面),现在重新输入上述的URL,会得到如图2所示的效果。