前段時間,朋友做了一個“基於MVC的JSP+Servlet+JavaBean整合開發的例子”,有老師質疑它這個是 不是真正的MVC標准?至於這個問題,我們在這裡不討論,本文目的是用Struts2.1.6來取代Servlet。經 我這位朋友同意,我把他所做的那個“JSP+Servlet+JavaBean”的例子,發布給大家,大家可以跟著我的 步驟,一步一步地,把這個Servlet的例子,改寫成Struts2.1.6的例子。
這是我朋友的例子,大家先下載下來,導入Eclipse-jee,並把相應的數據庫文件導入SQL Server 2000,運行一下他這個小項目。如果出現什麼問題,可以到他的技術博客給他留言。 http://www.blogjava.net/gdhqs。
本文重點是如何把他這個Servlet的小項目改寫成Struts2.1.6的項目。首先,下載Struts2.1.6的類庫 ,http://struts.apache.org/2.1.6/index.html, 下載下來後是這個文件:struts-2.1.6-all.zip,解 壓縮後,在lib目錄下,找到以下必需的jar包,把它們添加到我們項目的lib目錄下。這些jar有:
xwork-2.1.2.jar
struts2-core-2.1.6.jar
struts2-convention-plugin- 2.1.6.jar
ognl-2.6.11.jar
freemarker-2.3.13.jar
commons-loggin- 1.0.4.jar
commons-fileupload-1.2.1.jar
我還是在我朋友的項目基礎上做吧,先把“MvcModel”(他的項目名)項目下的web.xml修改一下。你 可以把他配置的所有Servlet給刪除掉,然後,配置是Struts2的過濾器,代碼如下:
<filter>
<filter-name>struts2</filter-name>
<filter- class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter- name>struts2</filter-name>
<url-pattern>/*</url- pattern>
</filter-mapping>
這樣,就簡潔了許多,比配置N個Servlet簡潔了。
接著,在項目的Web-INF目錄下,新建一個文件夾名為"content",這個目錄名要是這個,如果要改成 其它名的話,還得在相應的配置文件中配置,但初學的時候,就按它默認的吧。我們編寫的JSP文件,就 放在此目錄下。這樣做,目的之一為了提高安全性,因為在Web-INF下的所有文件,不能直接訪問的。
我們可以把我朋友的那個項目的主頁index.jsp文件移到content目錄下,或者,自己新建一個也可以 。以下是index.jsp的代碼,注意,這個是我朋友項目中的有所不同了,編碼改成了UTF-8.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http -equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>MVC MODEL</title>
</head>
<body>
<h1>MVC MODEL</h1>
<ul>
<li><a href="people!input.action">添加 人員</a></li>
<li><a href="people.action">人員列表 </a></li>
</ul>
</body>
</html>
我們在浏覽器中輸入地址http://localhost:8060/MvcModel/index, 注意,我的端口號與你的可能不 同,這個訪問路徑“index”不能帶".jsp"後綴,否則會報找不到action的錯誤。或者,你加個".action" 的後綴也可以。Struts2.1.6與Struts2.0不同之處之一是,Struts2.1.6中的“xxx.action”可以沒有 Action類與它對應,它如果找不到有相應的action類,它會去找xxx.jsp,xxx.htm等文件。
我們做到這一步,如果能夠通過上面的路徑預覽index.jsp的話,就說明,Struts2.1.6配置正確了。 繼續下面的步驟吧。
來寫一個Struts的action類,命名為"PeopleAction",代碼如下:
package cn.he.action;
import java.util.List;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import cn.he.manager.Manager;
import cn.he.pojo.People;
import com.opensymphony.xwork2.ActionSupport;
@Results({
@Result(name = "reload", location = "people.action", type = "redirect")
})
public class PeopleAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private Manager manager = new Manager();
private int id;
private People people;
private List<People> peoples;
//默認的操作
@Override
public String execute() throws Exception {
return list();
}
//查詢列表的操 作
public String list() throws Exception {
System.out.println ("list");
peoples = manager.queryAllPeople();
System.out.println("name = " + peoples.size());
return SUCCESS;
}
//進入編輯頁面前的操作
public String input() throws Exception {
System.out.println("input");
return INPUT;
}
//保存操作
public String save() throws Exception {
manager.addPeople(people);
return "reload";
}
//刪除操作
public String delete() throws Exception {
manager.delPeople(id);
return "reload";
}
//自動生 成相應的getter和setter方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
public List<People> getPeoples() {
return peoples;
}
public void setPeoples(List<People> peoples) {
this.peoples = peoples;
}
}
注意,這個類的包名“cn.he.action”,要有名為“action”或者"struts",或者"web"等,相關的命 名規范請參考 struts2采用convention-plugin實現零配置,Struts2.1.6默認會把這些包下或者這些包 的子包下的類,納入自己的管理范圍之內。
接著在content目錄下,寫兩個JSP文件,一是查詢列表的JSP頁面:people.jsp,代碼如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http -equiv="Content-Type" content="text/html; charset=utf-8">
<title>People列表頁 </title>
</head>
<body>
<table>
<tr>
<td>id</td>
<td>name</td>
<td>delete</td>
</tr>
<s:iterator value="peoples" var="peo">
<tr>
<td><s:property value="people.id"/> </td>
<td>${peo.name}</td>
<td><a href="people!delete.action?id=${peo.id}">刪除 </a></td>
</tr>
</s:iterator>
</table>
< ;/body>
</html>
另一個添加人員的頁面:people-input.jsp,代碼如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http -equiv="Content-Type" content="text/html; charset=utf-8">
<title>People添加頁 </title>
</head>
<body>
<form action="people!save.action" method="post">
名字:<input type="text" name="people.name"/> <br/>
<input type="submit" value="添 加"/>
</form>
</body>
</html>
運行一下看看效果吧!
隨文源碼:http://www.bianceng.net/java/201212/710.htm