<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)航:
     
    主站蜘蛛池模板: 免费观看国产小粉嫩喷水| 亚洲精品少妇30p| 伊人久久国产免费观看视频| 亚洲国产婷婷六月丁香| 成人浮力影院免费看| WWW亚洲色大成网络.COM| 国产成人无码综合亚洲日韩| 毛片大全免费观看| 中文字字幕在线高清免费电影| 亚洲人成毛片线播放| 国产偷国产偷亚洲高清日韩| 亚洲免费在线视频观看| 成人免费网站久久久| 亚洲同性男gay网站在线观看| 亚洲精品无码久久毛片| 波多野结衣免费在线观看| 无码AV动漫精品一区二区免费| 久久精品亚洲精品国产色婷| 亚洲成人一区二区| 国产又大又粗又长免费视频| 国产久爱免费精品视频| 亚洲色大成网站WWW国产| 亚洲永久永久永久永久永久精品| 亚洲国产精品人人做人人爽| 最新欧洲大片免费在线| a级毛片免费全部播放| 性色av极品无码专区亚洲| 亚洲毛片免费视频| 亚洲日韩精品无码专区网址| 国产精品99久久免费| 久久国内免费视频| 午夜精品射精入后重之免费观看| 日韩免费在线中文字幕| 久久综合久久综合亚洲| 中文字幕亚洲第一在线| 国产亚洲一区二区三区在线| 亚洲第一区精品观看| 好大好深好猛好爽视频免费| 久久久久免费看成人影片| a级毛片在线免费| 一级特黄a大片免费|