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

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

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

    俊星的BLOG

    Web4J之試用

    Web4J是一個比較新潮的Web框架,具體信息可以參考官網的相關說明:http://www.web4j.com/,下面是我的簡單試用
    1、數據庫準備(MySQL):
    創建一個數據庫和一個單表:
    create database test4j;
    use test4j;

    create table tbl_log(
        log_id mediumint unsigned auto_increment 
    primary key,
        log_msg 
    varchar(100not null,
        log_date date
    )type
    =innodb;

    insert into tbl_log values(1,'good job',curdate());

    2、web4j.jar改進:
    將AppInfo等7個類打包到web4j.jar中

    3、開始試用:
    配置web.xml:
    <servlet-name>Controller</servlet-name>
    <servlet-class>hirondelle.web4j.Controller</servlet-class>
    <init-param>
        
    <description>
    </description>
        
    <param-name>ImplicitMappingRemoveBasePackage</param-name>
        
    <param-value>test</param-value>
    </init-param>
    <init-param>
        
    <param-name>ImplementationFor.hirondelle.web4j.ApplicationInfo</param-name>
        
    <param-value>test.main.AppInfo</param-value>
        
    <description>
        
    </description>
    </init-param>
    <init-param>
        
    <description>
    </description>
        
    <param-name>LoggingDirectory</param-name>
        
    <param-value>E:\jdev\eclipse\workspace\My4JTest\log\</param-value>
    </init-param>
    <init-param>
        
    <param-name>DefaultDbConnectionString</param-name>
        
    <param-value>java:comp/env/jdbc/test4j</param-value>
    </init-param>
    ..
    <resource-ref>
    <description>DB Connection Pool For Main Application</description>
    <res-ref-name>jdbc/test4j</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

    相應的tomcat部署文件test4j.xml為:
    <Context path="/test4j" docBase="E:\jdev\eclipse\workspace\My4JTest\WebContent"
        debug
    ="5" reloadable="true" crossContext="true">
        
    <Resource name="jdbc/test4j" auth="Container" type="javax.sql.DataSource"
            username
    ="root" password="root" driverClassName="org.gjt.mm.mysql.Driver"
            url
    ="jdbc:mysql://localhost:3306/test4j?useServerPrepStmts=false"
            maxActive
    ="10" maxIdle="5" />
    </Context>

    主干文件的編寫:
    MODEL:
    package test.main;

    import static hirondelle.web4j.util.Consts.FAILS;
    import hirondelle.web4j.model.Check;
    import hirondelle.web4j.model.Id;
    import hirondelle.web4j.model.ModelCtorException;
    import hirondelle.web4j.model.ModelUtil;
    import hirondelle.web4j.security.SafeText;

    import java.util.Date;

    public final class Log {
        
    private Id logId;
        
    private SafeText logMsg;
        
    private Long logDate;

        
    private void validate() throws ModelCtorException {
            ModelCtorException ex 
    = new ModelCtorException();
            
    if (FAILS == Check.optional(logMsg, Check.range(0100))) {
                ex.add(
    "Message cannot be longer than 1,000 characters.");
            }


            
    if (ex.isNotEmpty()) {
                
    throw ex;
            }

        }


        
    public Id getLogId() {
            
    return logId;
        }


        
    public SafeText getLogMsg() {
            
    return logMsg;
        }


        
    public Date getLogDate() {
            
    return new Date(logDate);
        }


        
    public Log(Id id, SafeText msg, Date date) throws ModelCtorException {
            
    this.logId = id;
            
    this.logMsg = msg;
            
    this.logDate = date == null ? null : date.getTime();
            validate();
        }


        @Override
        
    public String toString() {
            
    return ModelUtil.toStringFor(this);
        }

    }

    ACTION:
    package test.main;

    import hirondelle.web4j.action.ActionTemplateListAndEdit;
    import hirondelle.web4j.action.ResponsePage;
    import hirondelle.web4j.database.DAOException;
    import hirondelle.web4j.database.SqlId;
    import hirondelle.web4j.model.ModelCtorException;
    import hirondelle.web4j.model.ModelFromRequest;
    import hirondelle.web4j.request.RequestParameter;
    import hirondelle.web4j.request.RequestParser;
    import hirondelle.web4j.util.Util;

    import java.util.logging.Logger;

    public final class LogAction extends ActionTemplateListAndEdit {
        
    private static final ResponsePage FORWARD = TmplPage.get("Log""view.jsp", LogAction.class);
        
    private static final ResponsePage REDIRECT = new ResponsePage("LogAction.list");
        
    private LogDAO fDAO = new LogDAO();
        
    private Log fModel;
        
    private static final Logger fLogger = Util.getLogger(LogAction.class);

        
    public static final RequestParameter MSG = RequestParameter.withLengthCheck("LogMsg");
        
    public static final RequestParameter ID = RequestParameter.withLengthCheck("LogId");
        
    public static final RequestParameter DATE = RequestParameter.withLengthCheck("LogDate");

        
    public static final SqlId LIST_LOG = new SqlId("LIST_LOG");
        
    public static final SqlId FETCH_LOG = new SqlId("FETCH_LOG");
        
    public static final SqlId ADD_LOG = new SqlId("INSERT_LOG");
        
    public static final SqlId CHANGE_LOG = new SqlId("UPDATE_LOG");
        
    public static final SqlId DELETE_LOG = new SqlId("DELETE_LOG");

        
    public LogAction(RequestParser aRequestParser) {
            
    super(FORWARD, REDIRECT, aRequestParser);
        }


        @Override
        
    protected void attemptAdd() throws DAOException {
            fLogger.fine(
    "Attempting to add new Spending item.");
            fDAO.add(fModel);
            addMessage(
    "Item added successfully.");
        }


        @Override
        
    protected void attemptChange() throws DAOException {
            fLogger.fine(
    "Attempting to change an existing log item.");
            
    boolean success = fDAO.change(fModel);
            
    if (success) {
                addMessage(
    "Item changed successfully.");
            }
     else {
                addError(
    "No update occurred. Item likely deleted by another user.");
            }

        }


        @Override
        
    protected void attemptDelete() throws DAOException {
            fLogger.fine(
    "Attempting to delete an existing log item.");
            fDAO.delete(getIdParam(ID));
            addMessage(
    "Item deleted successfully.");
        }


        @Override
        
    protected void attemptFetchForChange() throws DAOException {
            fLogger.fine(
    "Attempting to fetch an existing log item.");
            Log model 
    = fDAO.fetch(getIdParam(ID));
            
    if (model == null{
                addError(
    "Item no longer exists. Likely deleted by another user.");
            }
     else {
                addToRequest(ITEM_FOR_EDIT, model);
            }

        }


        @Override
        
    protected void doList() throws DAOException {
            fLogger.fine(
    "Listing all log items.");
            addToRequest(ITEMS_FOR_LISTING, fDAO.list());
        }


        @Override
        
    protected void validateUserInput() {
            fLogger.fine(
    "Validating user input.");
            ModelFromRequest builder 
    = new ModelFromRequest(getRequestParser());
            
    try {
                fModel 
    = builder.build(Log.class, ID, MSG, DATE);
            }
     catch (ModelCtorException ex) {
                addError(ex);
            }

        }


    }


    DAO:
    package test.main;

    import static test.main.LogAction.ADD_LOG;
    import static test.main.LogAction.CHANGE_LOG;
    import static test.main.LogAction.DELETE_LOG;
    import static test.main.LogAction.FETCH_LOG;
    import static test.main.LogAction.LIST_LOG;
    import hirondelle.web4j.database.DAOException;
    import hirondelle.web4j.database.Db;
    import hirondelle.web4j.model.Id;
    import hirondelle.web4j.util.Util;

    import java.util.List;

    final class LogDAO {
        
    private Object[] baseParamsFrom(Log aLog) {
            
    return new Object[] { aLog.getLogMsg() };
        }


        List
    <Log> list() throws DAOException {
            
    return Db.list(Log.class, LIST_LOG);
        }


        Log fetch(Id aId) 
    throws DAOException {
            
    return Db.fetch(Log.class, FETCH_LOG, aId);
        }


        
    void add(Log aLog) throws DAOException {
            Db.add(ADD_LOG, baseParamsFrom(aLog));
        }


        
    boolean change(Log aLog) throws DAOException {
            Object[] params 
    = Db.addIdTo(baseParamsFrom(aLog), aLog.getLogId());
            
    return Util.isSuccess(Db.edit(CHANGE_LOG, params));
        }


        
    void delete(Id aId) throws DAOException {
            Db.delete(DELETE_LOG, aId);
        }


    }


    statements.sql文件:
    LIST_LOG {
     
    SELECT log_id, log_msg, log_date
     
    FROM tbl_log
     
    ORDER BY log_date DESC
    }

    FETCH_LOG {
     
    SELECT log_id, log_msg, log_date
     
    FROM tbl_log
     
    WHERE log_id =
    }

    INSERT_LOG  {
     
    INSERT INTO tbl_log (log_msg, log_date) VALUES (?,curdate())
    }

    UPDATE_LOG {
      
    UPDATE tbl_log SET log_msg=WHERE log_id=?
    }

    DELETE_LOG {
      
    DELETE FROM tbl_log WHERE log_id=?
    }

    視圖view.jsp文件:
    <%-- List-and-edit form for Electricity Spending. --%>
    <%@ include file="/JspHeader.jsp"%>

    <c:set value='LogAction' var='baseURL' />
    <tags:setFormTarget using='${baseURL}' />

    <%-- Form for adds and edits. --%>

    <form action='${formTarget}' method="post" class="user-input">
    <table align="center">
        
    <w:populate using="itemForEdit">
            
    <input name="LogId" type="hidden">
            
    <input name="LogDate" type="hidden">
            
    <tr>
                
    <td><label>LOG MSG:</label></td>
                
    <td><input name="LogMsg" type="text" maxlength='100'></td>
            
    </tr>
        
    </w:populate>
        
    <tr>
            
    <td align="center"><input type="submit" value="Add/Edit">
            
    </td>
        
    </tr>
    </table>
    </form>

    <P><%-- Listing of all items. --%>
    <table class="report" align="center">
        
    <caption>Here is The Logs</caption>
        
    <tr>
            
    <th title="Line Number">#</th>
            
    <th title='Log Msg'>Log Msg</th>
            
    <th title='Log Date'>Log Date</th>
            
    <th></th>
        
    </tr>
        
    <w:alternatingRow>
            
    <c:forEach var="item" items="${itemsForListing}" varStatus="index">
                
    <tr class="row_highlight">
                    
    <td title="Line Number">${index.count}</td>
                    
    <td>${item.logMsg}</td>
                    
    <td align='right'><c:set value="${item.logDate}" var="paidOn" />
                    
    <w:showDate name='paidOn' pattern='yyyy-MM-dd' /></td>
                    
    <tags:editLinks baseURL='${baseURL}' id='${item.logId}' />
                
    </tr>
            
    </c:forEach>
        
    </w:alternatingRow>
    </table>

    更多內容請參考附件,接下就是將test4j.xml文件拷貝到conf\Catalina\localhost路徑下,啟動tomcat之后,訪問http://localhost:8080/test4j即可看到效果
    下載附件請點擊此處(內容為eclipse工程的壓縮包):MyWeb4JTest

    posted on 2009-05-16 18:57 俊星 閱讀(919) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 久久精品国产亚洲网站| 在线观看免费播放av片| 亚洲美女视频网站| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲精品第一综合99久久| 亚洲福利在线观看| 亚洲色成人网站WWW永久| 免费一级做a爰片久久毛片潮喷| 无码国产精品一区二区免费式直播 | 三年片免费高清版 | 成年女人喷潮毛片免费播放| 亚洲免费精彩视频在线观看| 中文永久免费观看网站| 欧洲乱码伦视频免费国产| 亚洲精品蜜夜内射| 亚洲乱码一二三四区乱码| 亚洲高清在线mv| 亚洲avav天堂av在线不卡| 狠狠色伊人亚洲综合成人| 91麻豆国产自产在线观看亚洲| 一本久久综合亚洲鲁鲁五月天| 日本不卡视频免费| 日本免费一二区在线电影| 韩国二级毛片免费播放| 全免费一级午夜毛片| 日韩欧美一区二区三区免费观看| ww在线观视频免费观看| 亚洲毛片免费观看| 亚洲一区二区三区免费在线观看| 亚洲毛片免费观看| 一二三四免费观看在线电影| 欧洲精品成人免费视频在线观看| 成人免费大片免费观看网站| 韩国免费一级成人毛片| 免费a级毛片高清视频不卡| 最近高清国语中文在线观看免费| 午夜精品在线免费观看| 国产一级淫片a视频免费观看| 免费人成激情视频| 亚洲综合AV在线在线播放| 久久久久久久尹人综合网亚洲|