本系列教程將詳細介紹Struts
在這篇文章中將以一個簡單的例子(mystruts)來演示如何使用MyEclipse來開發
一
mystruts是一個錄入和查詢產品信息的程序
二
在編寫程序之前
# 建立數據庫struts
CREATE DATABASE IF NOT EXISTS struts DEFAULT CHARACTER SET GBK;
# 建立表t_products
CREATE TABLE IF NOT EXISTS struts
product_id varchar(
product_name varchar(
price float NOT NULL
PRIMARY KEY (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
用MyEclipse建立一個samples工程(Web工程)
首先選中samples工程
(
(
(
改完後的「New Struts Capabilities」對話框如圖
在設置完後
(
(
<?xml version=
<!DOCTYPE struts
<struts
<data
<form
<global
<global
<action
<message
</struts
(
<servlet>
<servlet
<servlet
<init
<param
<param
</init
<init
<param
<param
</init
<init
<param
<param
</init
<load
</servlet>
<servlet
<servlet
<url
</servlet
到目前為止
三
首先在<samples工程目錄>中建立一個mystruts目錄
<%@ page pageEncoding=
<%
<%@ taglib uri=
<html>
<head>
<title>主界面</title>
</head>
<body>
<table align=
<tr>
<td align=
<%
<html:link forward=
</td>
<td>
<html:link forward=
</td>
</tr>
</table>
</body>
</html>
在MyEclipse中啟動Tomcat(如果Tomcat處於啟動狀態
我們發現在輸入上面的URL後
這個異常表明程序並未找到一個叫newProduct的forward(forward將在後面詳細地講述)
<global
<forward name=
<forward name=
</global
上面的代碼中所示的newProduct
圖
如果想讓index
<welcome
這時在IE中只要輸入如下的URL就可以訪問index
//localhost
四
在本節中主要實現了用於輸入產品信息(newProduct
在newProduct
在<samples工程目錄>
<%@ page pageEncoding=
<%@ taglib uri=
<html>
<head>
<title>錄入產品信息</title>
</head>
<body>
<%
<html:form action=
<table width=
<tr>
<td align=
產品編號
<html:text property=
<p>
產品名稱
<html:text property=
<p>
產品價格
<html:text property=
</td>
</tr>
<tr>
<td align=
<br>
<html:submit value=
</td>
</tr>
</table>
</html:form>
</body>
</html>
在searchProduct
<%@ page pageEncoding=
<%@ taglib uri=
<html>
<head>
<title>查詢產品信息</title>
</head>
<body>
<%
<html:form action=
<table width=
<tr>
<td align=
產品名稱
<html:text property=
</td>
</tr>
<tr>
<td align=
<br>
<html:submit value=
</td>
</tr>
</table>
</html:form>
</body>
</html>
現在啟動Tomcat
在IE中輸入上面的兩個URL後
五
在這一節我們來編寫用於操作數據庫的模型類
配置連接池(用於連接數據庫struts)
<Resource name=
type=
driverClassName=
url=
username=
password=
maxActive=
maxIdle=
maxWait=
本例中提供了兩個可以操作數據庫的模型類
由於Product和SearchProduct都需要使用數據庫連接池來連接數據庫
package util;
import java
public class Struts
{
protected javax
protected javax
protected Connection conn;
public Struts() throws Exception
{
ds = (javax
conn = ds
}
}
在<samples工程目錄>
package mystruts
import java
import mystruts
public class Product extends util
{
private ProductForm form;
public Product(ProductForm form) throws Exception
{
super();
this
validate();
}
// 驗證客戶端提交的數據
public void validate() throws Exception
{
if (form
throw new Exception(
if(form
throw new Exception(
if (form
throw new Exception(
if (pare(form
throw new Exception(
}
// 將客戶端提交的產品信息保存到t_products中
public void save() throws Exception
{
try
{
String productID = form
String productName = form
float price = form
String sql =
+
PreparedStatement pstmt = conn
pstmt
pstmt
conn
}
catch (Exception e)
{
throw new Exception(e
}
}
}
在Product類中使用了一個ProductForm類
與Product類似
package mystruts
import java
import java
import mystruts
public class SearchProduct extends util
{
private ProductForm form;
public SearchProduct(ProductForm form) throws Exception
{
super();
this
}
// 查詢產品信息
public List<String[]> search() throws Exception
{
List<String[]> result = new LinkedList<String[]>();
String sql =
+ form
PreparedStatement pstmt = conn
ResultSet rs = pstmt
while(rs
{
String[] row = new String[
row[
row[
row[
result
}
rs
conn
return result;
}
}
在SearchProduct類也使用了ProductForm類
六
在這一節要實現的控制器是基於Struts的Web程序的核心部分之一
package mystruts
import org
public class ProductForm extends ActionForm
{
private String productID; // 產品ID
private String productName; // 產品名稱
private float price; // 產品價格
public String getProductID()
{
return productID;
}
public void setProductID(String productID)
{
this
}
public String getProductName()
{
return productName;
}
public void setProductName(String productName)
{
this
}
public float getPrice()
{
return price;
}
public void setPrice(float price)
{
this
}
}
從上面的代碼可以看出
光有ActionForm類還不夠
<form
<form
<form
</form
上面的代碼所配置的兩個ActionForm實際上指的是同一個ProductForm類
下面來實現saveProduct動作的代碼
package mystruts
import javax
import org
import mystruts
import mystruts
public class SaveProductAction extends Action
{
// 在客戶端訪問saveProduct動作時執行該方法
public ActionForward execute(ActionMapping mapping
HttpServletRequest request
{
ProductForm saveProductForm = (ProductForm) form;
try
{
Product product = new Product(saveProductForm);
product
request
}
catch (Exception e)
{
request
}
return mapping
}
}
在SaveProductAction類中使用了模型類Product驗證並保存產品信息
<action name=
<forward name=
</action>
從上面的代碼可以看出
<%@ page pageEncoding=
${}
在IE中輸入如下的URL
在文本框中輸入相應的信息後
SearchProductAction
package mystruts
import javax
import org
import mystruts
import mystruts
import java
public class SearchProductAction extends Action
{
public ActionForward execute(ActionMapping mapping
HttpServletRequest request
{
ProductForm searchProductForm = (ProductForm) form;
try
{
SearchProduct searchProduct = new SearchProduct(searchProductForm);
List<String[]> result = searchProduct
if (result
{
request
request
}
else // 沒有查到任何產品信息
request
}
catch (Exception e)
{
request
}
return mapping
}
}
在struts
<action name=
<forward name=
</action>
search
<%@ page pageEncoding=
<%@ taglib uri=
<%@ taglib uri=
<html>
<body>
<%
<c:set var=
<table width=
<tr align=
<td>
${}
</td>
</tr>
<tr align=
<td>
<logic:present name=
<table border=
<tr align=
<td> 產品ID </td>
<td> 產品名稱 </td>
<td> 價格 </td>
</tr>
<logic:iterate id=
<tr> <td> ${row[
<td> ${row[
<td> ${row[
</tr>
</logic:iterate>
</table>
</logic:present>
</td>
</tr>
</table>
</body>
</html>
在IE中輸入如下的URL
//localhost
在
七
到現在為止
EncodingFilter
package filter;
import java
import javax
public class EncodingFilter implements Filter
{
public void destroy() { }
public void doFilter(ServletRequest request
FilterChain chain) throws IOException
{
request
// 繼續處理客戶端提交的數據
chain
}
public void init(FilterConfig filterConfig) throws ServletException { }
}
Filter接口的doFilter方法是過濾器的核心方法
除了實現過濾器類
在web
<filter>
<filter
<filter
filter
</filter
</filter>
<filter
<filter
<url
</filter
在重新啟動Tomcat後
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28470.html