程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 從Servlet到Struts 2.1.6

從Servlet到Struts 2.1.6

編輯:關於JAVA

前段時間,朋友做了一個“基於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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved