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

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

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

    俊星的BLOG

    Web4J之試用

    Web4J是一個比較新潮的Web框架,具體信息可以參考官網(wǎng)的相關(guān)說明:http://www.web4j.com/,下面是我的簡單試用
    1、數(shù)據(jù)庫準備(MySQL):
    創(chuàng)建一個數(shù)據(jù)庫和一個單表:
    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>

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

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


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 四只虎免费永久观看| 337p日本欧洲亚洲大胆人人| 国产一区二区三区免费视频| 99国产精品免费观看视频| 老司机午夜性生免费福利| 久久精品国产亚洲AV久| 精品亚洲麻豆1区2区3区| 久久国产亚洲精品麻豆| 亚洲国产精品一区二区三区久久| 最近中文字幕免费mv视频8| 最近免费mv在线电影| 日韩电影免费在线观看| 国产男女爽爽爽免费视频 | 最近中文字幕高清免费中文字幕mv| 一级女性全黄久久生活片免费 | 59pao成国产成视频永久免费| 久久国产一片免费观看| 免费无遮挡无遮羞在线看| 亚洲丶国产丶欧美一区二区三区| 亚洲日本国产精华液| 久久久无码精品亚洲日韩按摩| 日韩亚洲一区二区三区| 国产gv天堂亚洲国产gv刚刚碰| 亚洲AV日韩精品一区二区三区| 日韩在线免费播放| 日韩免费高清视频网站| 国产一级做a爱免费视频| 国产国产成年年人免费看片| 在线观看永久免费视频网站| 午夜老司机免费视频| 日本人的色道www免费一区| 免费无码黄动漫在线观看| 在线观看免费大黄网站| 成人毛片18岁女人毛片免费看| 免费高清资源黄网站在线观看| 日韩中文字幕在线免费观看 | MM1313亚洲国产精品| 相泽南亚洲一区二区在线播放| 色天使亚洲综合一区二区| 免费人成在线观看播放a| xvideos永久免费入口|