推薦淘寶秋冬男裝熱賣網店

          追求無止境

          我的程序人生
          隨筆 - 31, 文章 - 2, 評論 - 20, 引用 - 0
          數據加載中……

          JSP Web框架研究:Struts

          在JSP 的各種Web框架中,據我看來Struts框架最為簡單。下面從Struts框架開始來研究JSP的web框架。

          1、MVC

          在研究這個框架之前,先要對MVC模式有所了解。幸好以前學習過設計模式,對MVC編程和模式了解一些,即將模型、視圖、控制器分開。使三者可以各負其責,處理自己的邏輯。

          2、Struts框架的介紹:

          Struts框架也采用了MVC結構:

          Model:在Struts框架中,Model模型的實現是JavaBean。在Struts框架中,通過使用JavaBean完成信息的存儲。

          Control:控制器即Java Servlet,由框架提供,負責視圖和模型之間的交互??刂破鞯拿總€入口都由名為struts-config.xml的配置文件設置。該文件把來自視圖的請求映射為特定的Java類

          以進行相應的處理,控制器還指定下一個視圖的位置。

          View:視圖,當然使用JSP了。

          是不是很簡單啊。

          下面的序列圖反映了一個簡單的Strut構架的運行過程:

           

          image (點擊看大圖)

          看到上面的序列圖,如果讓我們從頭來寫代碼,來實現Struts構架,這樣也太累了。Struts構架給我們提供了不少類,如果ActionServlet、Action、ActionForm等。通過繼承使用他們和使用框架,我們只需寫幾個繼承類,就可以寫出基于這個框架的代碼了。這就是框架的好處,他把一些細節給我們屏蔽了,我們只要實現了關鍵部分。OK,就可以了。結構又好,又方便。這就是框架的好處。

          通過上面的說明,或許你對框架會有些了解??蚣埽唵蔚睦斫?,就是我們小學時做的填空題,我們把重要的空填一下。就可以了。顯然,上面的描述不是很準確,但用來簡單的理解框架還是可以的。

          下面需要用一個實例來說明如何使用struts框架了。

          我們用Struts實現一個簡單的注冊信息頁面。

          需要注冊的信息只由用戶名和密碼。下面是具體的實現。

          首先定義一個User類:

             1: public class User {
             2:     private String userName;
             3:     private String password;
             4:  
             5:     public String getPassword() {
             6:         return password;
             7:     }
             8:  
             9:     public void setPassword(String password) {
            10:         this.password = password;
            11:     }
            12:  
            13:     public String getUserName() {
            14:         return userName;
            15:     }
            16:  
            17:     public void setUserName(String userName) {
            18:         this.userName = userName;
            19:     }
            20:     
            21: }
           
          User類定義了用戶的信息描述。下面的UserForm繼承了AcitonForm類,用于驗證請求信息并對表單信息進行檢查。
           
          public class UserForm extends ActionForm {
              private User user;
           
              public User getUser() {
                  return user;
              }
           
              public void setUser(User user) {
                  this.user = user;
              }
           
           
           
              public String getUserName() {
                  return user.getUserName();
              }
           
              public String getPassword() {
                  return user.getPassword();
              }
           
              @Override
              public void reset(ActionMapping a, HttpServletRequest r) {
                 this.user = new User(); 
              }
           
              @Override
              public ActionErrors validate(ActionMapping a, HttpServletRequest r) {
                 ActionErrors errors = new ActionErrors();
                 if(user.getUserName()==null||(user.getPassword()==null)){
                     errors.add("請填寫用戶名和密碼!",new ActionMessage("error.user.password"));
                     
                 }
                 return errors;
              }
              
          }
           
          UserAction類:繼承了Action,用來相應請求??纯磂xecute函數就知道請求相關的參數包括映射(ActionMapping)、請求表單(ActionForm)、servlet請求(HttpServletRequest)和響應(HttpServletResponse)。那么就很容易的寫出處理請求的函數。
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import org.apache.struts.action.Action;
           
          /*
           * To change this template, choose Tools | Templates
           * and open the template in the editor.
           */
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
           
          /**
           *
           * @author WangJing
           */
          public class UserAction extends Action {
           
              @Override
              public ActionForward execute(ActionMapping mapping, ActionForm arg1, HttpServletRequest request, HttpServletResponse arg3) throws Exception {
                  UserForm userForm = new UserForm();
                  try{
                      UserBean bean = new UserBean();
                      bean.addUser(userForm.getUser());
                  }catch(Exception e){
                      e.printStackTrace();
                  }
                  request.setAttribute("user",userForm.getUser());
                  return (mapping.findForward("userCreated"));
              }
              
          }
          UserBean:它實現了具體的業務邏輯,她被Action調用。完成數據的存儲。
          class UserBean {
          
              void addUser(User user) {
                  throw new UnsupportedOperationException("Not yet implemented");
              }
              
              private Connection conn;
          
              public UserBean() {
                  this.conn = DatabaseConn.getConnection();
              }
              public void addUser(User user){
                  Statement s = (Statement) conn.createStatement();
                  s.executeUpdate("insert into User values("+user.getUserName()+","+user.getPassword()+");");
              }
          }
          上面的代碼進行了數據的存儲處理。需要注意的是代碼中的DatabaseConn.getConnection()是沒有的。需要自己實現的。具體的實現可以參考本人的博客中關于連接數據庫的一篇文章。
          好了,下面就是最重要的顯示JSP文件代碼的編寫了:
          <%@page contentType="text/html" pageEncoding="UTF-8"%>
          <%@ taglib  uri="/struts-logic" prefix="logic" %>
          <%@ taglib  uri="/struts-bean" prefix="bean" %>
          <%@ taglib  uri="/struts-html" prefix="html" %>
          <!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>JSP Page</title>
              </head>
              <body>
                  <html:form aciton="createUser.do" method="GET">
                      userName:<html:text property="user.userName"/>
                      password:<html:text property="user.password"/>
                      <html:submit property="submit"/>
                  </html:form>
              </body>
          </html>
           
          下面用viewUser.jsp來作為響應頁面:
           
          <html>
              <head>
                  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                  <title>JSP Page</title>
              </head>
              <body>
                  <%
                  User user= (User)request.getAttribute("User");
                  
                  %>
                  已經創建了用戶:
                  name:<%=user.getUserName()%>
                  password:<%=user.getPassword()%>
                  
              </body>
          </html>

          ok,所有的文件編好之后,下面就是配置和運行了。(累了,配置運行休息一會在弄吧。待續中。。。呵呵。。。。)

          posted on 2008-09-14 10:06 追求無止境 閱讀(2316) 評論(2)  編輯  收藏

          評論

          # re: JSP Web框架研究:Structs  回復  更多評論   

          拜托,是struts。。。
          2008-09-14 14:26 | Lv Yuanfang

          # re: JSP Web框架研究:Struts  回復  更多評論   

          @Lv Yuanfang
          汗。。。。沒想到竟然犯了這樣的錯誤。看書不認真啊。謝謝啦!
          2008-09-14 15:09 | 追求無止境

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 丰镇市| 苗栗市| 阳山县| 丰都县| 六枝特区| 黎川县| 澄迈县| 马尔康县| 礼泉县| 邵阳县| 襄城县| 盐城市| 依兰县| 桃园市| 大冶市| 精河县| 绥宁县| 车致| 临泉县| 甘洛县| 沿河| 容城县| 宁化县| 靖远县| 依兰县| 乐业县| 永登县| 浪卡子县| 托克托县| 安庆市| 六安市| 绥芬河市| 甘南县| 富裕县| 新河县| 衡阳市| 海阳市| 神池县| 宁强县| 临邑县| 常熟市|