隨筆-42  評(píng)論-578  文章-1  trackbacks-0
                  前段時(shí)間,朋友做了一個(gè)“基于MVC的JSP+Servlet+JavaBean整合開(kāi)發(fā)的例子”,有老師質(zhì)疑它這個(gè)是不是真正的MVC標(biāo)準(zhǔn)?至于這個(gè)問(wèn)題,我們?cè)谶@里不討論,本文目的是用Struts2.1.6來(lái)取代Servlet。經(jīng)我這位朋友同意,我把他所做的那個(gè)“JSP+Servlet+JavaBean”的例子,發(fā)布給大家,大家可以跟著我的步驟,一步一步地,把這個(gè)Servlet的例子,改寫(xiě)成Struts2.1.6的例子。
                  附件下載:/Files/rongxh7/MvcModel.rar
                  這是我朋友的例子,大家先下載下來(lái),導(dǎo)入Eclipse-jee,并把相應(yīng)的數(shù)據(jù)庫(kù)文件導(dǎo)入SQL Server 2000,運(yùn)行一下他這個(gè)小項(xiàng)目。如果出現(xiàn)什么問(wèn)題,可以到他的技術(shù)博客給他留言。http://www.aygfsteel.com/gdhqs
                  本文重點(diǎn)是如何把他這個(gè)Servlet的小項(xiàng)目改寫(xiě)成Struts2.1.6的項(xiàng)目。首先,下載Struts2.1.6的類(lèi)庫(kù),http://struts.apache.org/2.1.6/index.html, 下載下來(lái)后是這個(gè)文件:struts-2.1.6-all.zip,解壓縮后,在lib目錄下,找到以下必需的jar包,把它們添加到我們項(xiàng)目的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

                  我還是在我朋友的項(xiàng)目基礎(chǔ)上做吧,先把“MvcModel”(他的項(xiàng)目名)項(xiàng)目下的web.xml修改一下。你可以把他配置的所有Servlet給刪除掉,然后,配置是Struts2的過(guò)濾器,代碼如下:
              <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>
                 這樣,就簡(jiǎn)潔了許多,比配置N個(gè)Servlet簡(jiǎn)潔了。
                 接著,在項(xiàng)目的Web-INF目錄下,新建一個(gè)文件夾名為"content",這個(gè)目錄名要是這個(gè),如果要改成其它名的話(huà),還得在相應(yīng)的配置文件中配置,但初學(xué)的時(shí)候,就按它默認(rèn)的吧。我們編寫(xiě)的JSP文件,就放在此目錄下。這樣做,目的之一為了提高安全性,因?yàn)樵赪eb-INF下的所有文件,不能直接訪問(wèn)的。
                 我們可以把我朋友的那個(gè)項(xiàng)目的主頁(yè)index.jsp文件移到content目錄下,或者,自己新建一個(gè)也可以。以下是index.jsp的代碼,注意,這個(gè)是我朋友項(xiàng)目中的有所不同了,編碼改成了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>


                  我們?cè)跒g覽器中輸入地址http://localhost:8060/MvcModel/index, 注意,我的端口號(hào)與你的可能不同,這個(gè)訪問(wèn)路徑“index”不能帶".jsp"后綴,否則會(huì)報(bào)找不到action的錯(cuò)誤。或者,你加個(gè)".action"的后綴也可以。Struts2.1.6與Struts2.0不同之處之一是,Struts2.1.6中的“xxx.action”可以沒(méi)有Action類(lèi)與它對(duì)應(yīng),它如果找不到有相應(yīng)的action類(lèi),它會(huì)去找xxx.jsp,xxx.htm等文件。
                  我們做到這一步,如果能夠通過(guò)上面的路徑預(yù)覽index.jsp的話(huà),就說(shuō)明,Struts2.1.6配置正確了。繼續(xù)下面的步驟吧。
            
                來(lái)寫(xiě)一個(gè)Struts的action類(lèi),命名為"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;
              
              
          //默認(rèn)的操作
              @Override
              
          public String execute() throws Exception {
                  
          return list();
              }

              
              
          //查詢(xún)列表的操作
              public String list() throws Exception {
                  System.out.println(
          "list");
                  peoples 
          = manager.queryAllPeople();
                  System.out.println(
          "name = " + peoples.size());
                  
          return SUCCESS;
              }

              
              
          //進(jìn)入編輯頁(yè)面前的操作
              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";
              }


              
          //自動(dòng)生成相應(yīng)的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;
              }


          }
                   注意,這個(gè)類(lèi)的包名“cn.he.action”,要有名為“action”或者"struts",或者"web"等,相關(guān)的命名規(guī)范請(qǐng)參考  struts2采用convention-plugin實(shí)現(xiàn)零配置,Struts2.1.6默認(rèn)會(huì)把這些包下或者這些包的子包下的類(lèi),納入自己的管理范圍之內(nèi)。
           
                 接著在content目錄下,寫(xiě)兩個(gè)JSP文件,一是查詢(xún)列表的JSP頁(yè)面: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列表頁(yè)</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>

                 另一個(gè)添加人員的頁(yè)面: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添加頁(yè)</title>
          </head>
          <body>
          <form action="people!save.action" method="post">
          名字:
          <input type="text" name="people.name"/> <br/>
          <input type="submit" value="添加"/>
          </form>
          </body>
          </html>
           
                運(yùn)行一下看看效果吧!



          本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)
              

          posted on 2009-06-10 02:37 心夢(mèng)帆影 閱讀(2908) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): Struts2.x

          評(píng)論:
          # re: 從Servlet到Struts 2.1.6 2009-06-10 09:03 | HiMagic!
          servlet不是指xml中的那些定義,2.1.6的實(shí)現(xiàn)是為site弄了一個(gè)同一個(gè)的gate,相當(dāng)于一個(gè)general controller。盡管JSP的本質(zhì)就是servlet,似乎可以不再寫(xiě)單獨(dú)的servlet類(lèi),但在具體業(yè)務(wù)上,其還是有存在的必要性的。  回復(fù)  更多評(píng)論
            
          # re: 從Servlet到Struts 2.1.6 2009-06-10 21:03 | 小人物
          學(xué)習(xí)了!受益匪淺!  回復(fù)  更多評(píng)論
            
          # re: 從Servlet到Struts 2.1.6[未登錄](méi) 2009-06-12 15:26 | 逍遙
          Struts.xml 你沒(méi)有配置?
          好像freemarker不用加載吧  回復(fù)  更多評(píng)論
            
          # re: 從Servlet到Struts 2.1.6 2009-07-03 00:04 | 心夢(mèng)帆影
          freemarker用于加載Struts2內(nèi)部的配置文件struts-defualt.xml,如果沒(méi)有的話(huà),就會(huì)拋異常.Struts2應(yīng)用無(wú)法啟動(dòng).  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 襄城县| 平罗县| 健康| 星座| 通州区| 都兰县| 鹰潭市| 且末县| 钟山县| 萍乡市| 文水县| 金湖县| 玛曲县| 忻州市| 普安县| 留坝县| 阿图什市| 明溪县| 浦东新区| 建阳市| 肇东市| 安吉县| 德清县| 太仆寺旗| 玛曲县| 茶陵县| 宁海县| 乌苏市| 邹平县| 东光县| 三穗县| 龙游县| 五峰| 兴业县| 屏东县| 平陆县| 工布江达县| 朝阳区| 广丰县| 福贡县| 丰镇市|