<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    推薦淘寶秋冬男裝熱賣網(wǎng)店

    追求無止境

    我的程序人生
    隨筆 - 31, 文章 - 2, 評(píng)論 - 20, 引用 - 0
    數(shù)據(jù)加載中……

    JSP Web框架研究:Struts

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

    1、MVC

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

    2、Struts框架的介紹:

    Struts框架也采用了MVC結(jié)構(gòu):

    Model:在Struts框架中,Model模型的實(shí)現(xiàn)是JavaBean。在Struts框架中,通過使用JavaBean完成信息的存儲(chǔ)。

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

    以進(jìn)行相應(yīng)的處理,控制器還指定下一個(gè)視圖的位置。

    View:視圖,當(dāng)然使用JSP了。

    是不是很簡(jiǎn)單啊。

    下面的序列圖反映了一個(gè)簡(jiǎn)單的Strut構(gòu)架的運(yùn)行過程:

     

    image (點(diǎn)擊看大圖)

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

    通過上面的說明,或許你對(duì)框架會(huì)有些了解??蚣?,簡(jiǎn)單的理解,就是我們小學(xué)時(shí)做的填空題,我們把重要的空填一下。就可以了。顯然,上面的描述不是很準(zhǔn)確,但用來簡(jiǎn)單的理解框架還是可以的。

    下面需要用一個(gè)實(shí)例來說明如何使用struts框架了。

    我們用Struts實(shí)現(xiàn)一個(gè)簡(jiǎn)單的注冊(cè)信息頁面。

    需要注冊(cè)的信息只由用戶名和密碼。下面是具體的實(shí)現(xiàn)。

    首先定義一個(gè)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類,用于驗(yàn)證請(qǐng)求信息并對(duì)表單信息進(jìn)行檢查。
     
    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("請(qǐng)?zhí)顚懹脩裘兔艽a!",new ActionMessage("error.user.password"));
               
           }
           return errors;
        }
        
    }
     
    UserAction類:繼承了Action,用來相應(yīng)請(qǐng)求。看看execute函數(shù)就知道請(qǐng)求相關(guān)的參數(shù)包括映射(ActionMapping)、請(qǐng)求表單(ActionForm)、servlet請(qǐng)求(HttpServletRequest)和響應(yīng)(HttpServletResponse)。那么就很容易的寫出處理請(qǐng)求的函數(shù)。
    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:它實(shí)現(xiàn)了具體的業(yè)務(wù)邏輯,她被Action調(diào)用。完成數(shù)據(jù)的存儲(chǔ)。
    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()+");");
        }
    }
    上面的代碼進(jìn)行了數(shù)據(jù)的存儲(chǔ)處理。需要注意的是代碼中的DatabaseConn.getConnection()是沒有的。需要自己實(shí)現(xiàn)的。具體的實(shí)現(xiàn)可以參考本人的博客中關(guān)于連接數(shù)據(jù)庫的一篇文章。
    好了,下面就是最重要的顯示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來作為響應(yīng)頁面:
     
    <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");
            
            %>
            已經(jīng)創(chuàng)建了用戶:
            name:<%=user.getUserName()%>
            password:<%=user.getPassword()%>
            
        </body>
    </html>

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

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

    評(píng)論

    # re: JSP Web框架研究:Structs  回復(fù)  更多評(píng)論   

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

    # re: JSP Web框架研究:Struts  回復(fù)  更多評(píng)論   

    @Lv Yuanfang
    汗。。。。沒想到竟然犯了這樣的錯(cuò)誤??磿徽J(rèn)真啊。謝謝啦!
    2008-09-14 15:09 | 追求無止境

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 午夜老司机免费视频| 人人狠狠综合久久亚洲 | 亚洲成人网在线播放| 久久亚洲AV永久无码精品| 免费看的黄色大片| 久草视频免费在线| 久久午夜夜伦鲁鲁片无码免费| 一级中文字幕乱码免费| 亚洲风情亚Aⅴ在线发布| 亚洲一区精品视频在线| 亚洲邪恶天堂影院在线观看| 91麻豆精品国产自产在线观看亚洲 | 99热这里有免费国产精品| 二个人看的www免费视频| 国产精品成人亚洲| 亚洲国产精品无码第一区二区三区 | 亚洲成a人片在线观看中文app| 亚洲va无码va在线va天堂| 一本色道久久综合亚洲精品高清| 国产男女猛烈无遮挡免费视频| 成人午夜视频免费| 成年女人18级毛片毛片免费| 久久精品免费一区二区| 6080午夜一级毛片免费看| 91人成网站色www免费下载| 特级无码毛片免费视频尤物| 国内精品久久久久影院免费| 久久99青青精品免费观看| 97公开免费视频| 1000部拍拍拍18勿入免费视频下载 | 亚欧免费一级毛片| 无码av免费一区二区三区试看| 成人无码WWW免费视频| 日本黄色动图免费在线观看| 无人在线观看免费高清| 久久久久久毛片免费播放| 亚洲免费在线视频观看| 久九九精品免费视频| 毛片a级毛片免费观看品善网| 日韩a在线观看免费观看| 免费国产a国产片高清|