隨筆-42  評論-578  文章-1  trackbacks-0
                  前段時間,朋友做了一個“基于MVC的JSP+Servlet+JavaBean整合開發的例子”,有老師質疑它這個是不是真正的MVC標準?至于這個問題,我們在這里不討論,本文目的是用Struts2.1.6來取代Servlet。經我這位朋友同意,我把他所做的那個“JSP+Servlet+JavaBean”的例子,發布給大家,大家可以跟著我的步驟,一步一步地,把這個Servlet的例子,改寫成Struts2.1.6的例子。
                  附件下載:/Files/rongxh7/MvcModel.rar。
                  這是我朋友的例子,大家先下載下來,導入Eclipse-jee,并把相應的數據庫文件導入SQL Server 2000,運行一下他這個小項目。如果出現什么問題,可以到他的技術博客給他留言。http://www.aygfsteel.com/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><href="people!input.action">添加人員</a></li>
              
          <li><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><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.aygfsteel.com/rongxh7(心夢帆影JavaEE技術博客)
              

          posted on 2009-06-10 02:37 心夢帆影 閱讀(2905) 評論(4)  編輯  收藏 所屬分類: Struts2.x

          評論:
          # re: 從Servlet到Struts 2.1.6 2009-06-10 09:03 | HiMagic!
          servlet不是指xml中的那些定義,2.1.6的實現是為site弄了一個同一個的gate,相當于一個general controller。盡管JSP的本質就是servlet,似乎可以不再寫單獨的servlet類,但在具體業務上,其還是有存在的必要性的。  回復  更多評論
            
          # re: 從Servlet到Struts 2.1.6 2009-06-10 21:03 | 小人物
          學習了!受益匪淺!  回復  更多評論
            
          # re: 從Servlet到Struts 2.1.6[未登錄] 2009-06-12 15:26 | 逍遙
          Struts.xml 你沒有配置?
          好像freemarker不用加載吧  回復  更多評論
            
          # re: 從Servlet到Struts 2.1.6 2009-07-03 00:04 | 心夢帆影
          freemarker用于加載Struts2內部的配置文件struts-defualt.xml,如果沒有的話,就會拋異常.Struts2應用無法啟動.  回復  更多評論
            
          主站蜘蛛池模板: 忻州市| 久治县| 金沙县| 肥东县| 马鞍山市| 新龙县| 安溪县| 西盟| 凯里市| 奎屯市| 定襄县| 翼城县| 浮山县| 房山区| 综艺| 汽车| 怀安县| 安达市| 托克托县| 紫阳县| 元阳县| 吴堡县| 蒙阴县| 郑州市| 达拉特旗| 阜康市| 抚顺县| 香格里拉县| 平果县| 开鲁县| 渭南市| 兖州市| 南安市| 甘泉县| 怀仁县| 安丘市| 溆浦县| 赤水市| 新疆| 商城县| 大埔区|