nutz

功能

    (1) 加载网页时,从数据库中提取所有资料,显示在网页中

    (2) 在表格第二行输入资料,按新增,加把所录入资料添加到数据库中

    (3) 在其他行的“年龄”中输入资料,按更新,加用所录入资料列新数据库。

    (4) 在其他行按删除,将从数所库中删除相应资料

 

使用:调试newhtml3.html,按相应的按钮即可。

 

运行说明

按如新增之类的功能键,提交过服务器,服务器通过MainModule中找到子模块HelloWorld,同时加载数据源配置文件,生成dataSource对象,接着找到功能键所对应的入口函数(新增—insert;更新---update;删除—delete;显示---display;),入口函数得到网页提交时的参数、以及Ioc之类的参数,执行完毕,返回给网页。

其中:在执行口函数,dao需要得到MainModule中指定的dataSource对象,完成对数据库的相关操作。

 

说明:本人使用的是netbean6.9.1,tomcat6.0.26,nutz1.a.31

1.1.               准备工作

 

1.1.1.         安装好mysql,在mydb数据库中,创建一个表t_man

CREATE TABLE `t_man` (

  `name`varchar(45) NOT NULL DEFAULT '',

  `age`varchar(45) NOT NULL DEFAULT '""',

  PRIMARYKEY (`name`)

)

 

1.1.2.         下载数据源所需要的包,并引用到工程中去

 

1.1.2.1       配置dbcp所用的包:commonspool、commons-collections.jar

http://commons.apache.org/dbcp/download_dbcp.cgi

http://commons.apache.org/pool/download_pool.cgi

http://commons.apache.org/collections/download_collections.cgi

 

注:有的需要mysql驱动

http://mysql.cs.pu.edu.tw/Downloads/Connector-J/mysql-connector-java-5.1.6.zip

nutz好像可以不要,但是在配springsecurity3时,却需要,郁闷

 

 

1.1.2.2       下载log4j----便于调试dao

下载地址http://logging.apache.org/log4j/1.2/download.html

log4j的配置文件log4j.properties

#可以设置级别:debug>info>error

#debug:显示debug、info、error

#info:显示info、error

#error:只error

log4j.rootLogger=debug,appender1

#log4j.rootLogger=info,appender1 

#log4j.rootLogger=error,appender1

 

#输出到控制台

log4j.appender.appender1=org.apache.log4j.ConsoleAppender

#样式为TTCCLayout

log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout

 

 

1.1.2.3       下载nutz

http://code.google.com/p/nutz/downloads/list

 

1.2.               配置web.xml

完整代码:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <session-config>

       <session-timeout>

            30

       </session-timeout>

    </session-config>

   <filter>

     <filter-name>nutz</filter-name>

     <filter-class>org.nutz.mvc.NutFilter</filter-class>

     <init-param>

             <param-name>modules</param-name>

             <param-value>MainModule</param-value>

     </init-param>

</filter>

 

<filter-mapping>

     <filter-name>nutz</filter-name>

     <url-pattern>/*</url-pattern>

</filter-mapping>

 

    <welcome-file-list>

       <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

 

1.3.               html网页---ajax通讯,据备显示、添加、删除、更新操作

newhtml3.html全部源代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">

<html>

  <head>

    <title></title>

    <metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">

    <scriptlanguage="JavaScript">

        //ajax方式,与nutz通讯

        var xmlHttp=false;

        try {

            xmlHttp=newActiveXObject("Msxml2.XMLHTTP");

        } catch (e) {

        try {

            xmlHttp=newActiveXObject("Microsoft.XMLHTTP");

        } catch (e2) {

            xmlHttp=false;

        }

        }

        if (!xmlHttp&& typeof XMLHttpRequest != 'undefined') {

            xmlHttp=newXMLHttpRequest();

        }

 

        function init() {

           

            varurl="display";

           xmlHttp.open("POST",url,true);//提交数据

           xmlHttp.onreadystatechange=function(){//服务器返回状态

                //服务成功接收并受回数据

               if(xmlHttp.readyState==4){

                   eval("json=" + xmlHttp.responseText + ";");

                   eval("json=" + json + ";");

                    varlen=json.length;

 

                    //动态创建表

                    varstrTbody = ["<table border='1'><tbody>"];//定义数组

                   strTbody.push("<tr>");

                   strTbody.push("<td>姓名</td>");

                   strTbody.push("<td>年龄</td>");

                   strTbody.push("<td>&nbsp;</td>");

                   strTbody.push("<td>&nbsp;</td>");

                    strTbody.push("</tr>");

 

                   strTbody.push("<tr>");

                   strTbody.push("<td><input name='bs1' type='text'  ></td>");

                   strTbody.push("<td><input name='bs1' type='text'  ></td>");

                    strTbody.push("<td><inputname='add' type='button' id='add' value='增加'onClick='addLine(this)'></td>");

                   strTbody.push("<td>&nbsp;</td>");

                   strTbody.push("</tr>");

                   

                    for (vari=0;i<json.length;i++){

                       strTbody.push("<tr>");

 

                       strTbody.push("<td><input name='bs1' type='text'value='"+json[i].name+"' ></td>");

                       strTbody.push("<td><input name='bs2' type='text' value='"+json[i].age+"'></td>");

                       strTbody.push("<td>");

                       strTbody.push("<input name='add' type='button' id='add' value='更新'onClick='updata(this)'>");

                       strTbody.push("</td>");

                        strTbody.push("<td>");

                       strTbody.push("<input name='delete' type='button' id='delete'value='删除' onClick='deldata(this)'>");

                       strTbody.push("</td>");

 

                       strTbody.push("</tr>");

 

                    }

                   strTbody.push("</tbody></table>");

                    var obj =document.getElementById("tableDiv");

                   obj.innerHTML = strTbody.join("");

                   

                  

                }

            }

           xmlHttp.send(null);

        }

 

        function addLine(obj){

            varobjSourceRow=obj.parentNode.parentNode;

            varobjTable=obj.parentNode.parentNode.parentNode.parentNode;

            varrow_num=objTable.rows.length;

            varcell_num=objTable.rows[0].cells.length;

            varobjRow=objTable.insertRow(row_num);

 

            varstr="?name="+objSourceRow.cells[0].firstChild.value+"";

           str+="&age="+objSourceRow.cells[1].firstChild.value+"";

         

            varurl="insert"+str;

           xmlHttp.open("POST",url,true);//提交数据

           xmlHttp.onreadystatechange=function(){//服务器返回状态

                //服务成功接收并受回数据

               if(xmlHttp.readyState==4){

                   init();

                  alert(xmlHttp.responseText);

                }

            }

           xmlHttp.send(null);

        }

        function updata(obj){

            varobjSourceRow=obj.parentNode.parentNode;

            varobjTable=obj.parentNode.parentNode.parentNode.parentNode;

            varrow_num=objTable.rows.length;

            varcell_num=objTable.rows[0].cells.length;

           

            varstr="?name="+objSourceRow.cells[0].firstChild.value+"";

           str+="&age="+objSourceRow.cells[1].firstChild.value+"";

 

            varurl="update"+str;

           xmlHttp.open("POST",url,true);//提交数据

           xmlHttp.onreadystatechange=function(){//服务器返回状态

                //服务成功接收并受回数据

               if(xmlHttp.readyState==4){

                   init();

                  alert(xmlHttp.responseText);

                }

            }

           xmlHttp.send(null);

        }

        function deldata(obj){

            varobjSourceRow=obj.parentNode.parentNode;

            var objTable=obj.parentNode.parentNode.parentNode.parentNode;

            varrow_num=objTable.rows.length;

            varcell_num=objTable.rows[0].cells.length;

 

            varstr="?name="+objSourceRow.cells[0].firstChild.value+"";

           str+="&age="+objSourceRow.cells[1].firstChild.value+"";

 

            varurl="delete"+str;

           xmlHttp.open("POST",url,true);//提交数据

           xmlHttp.onreadystatechange=function(){//服务器返回状态

                //服务成功接收并受回数据

               if(xmlHttp.readyState==4){

                   init();

                  alert(xmlHttp.responseText);

                }

            }

           xmlHttp.send(null);

        }

        //-->

    </script>

  </head>

  <bodyοnlοad="init();">

    <divid="tableDiv"></div>

  </body>

</html>

 

1.4.               主模块文件----MainModule.java

位于源代码 根目录中。MainModule.java完整代码

import org.nutz.mvc.adaptor.PairAdaptor;

import org.nutz.mvc.annotation.*;

import org.nutz.mvc.ioc.provider.JsonIocProvider;

 

 @Modules({HelloWorld.class})

 @Fail("json")

@IocBy(type=JsonIocProvider.class, args={"dataSource.js"})

//注意,这里使用了Ioc,并加载了相关配文件。

public class MainModule {}

 

1.5.               数据源配置文件(使用nutz的ioc)--- dataSource.js,

位于源代码根目录中,即与MainModule.java同一位置。定义了一个名为dataSource的对象。

该配置文件在MainModule的注释中加载, 在HelloWorld中通过参数Ioc使用

 

dataSource.js完整源代码

var ioc={

    dataSource : {

        type:"org.apache.commons.dbcp.BasicDataSource",

        events:{

            depose:'close'

        },

        fields : {

           driverClassName:'com.mysql.jdbc.Driver',

           url:'jdbc:mysql://localhost:3306/mydb',

            username:'root',

            password:'123'

        }

    }

}

 

1.6.               Pojo----Man.java

Man.java源代码,省略了getter and setter

import org.nutz.dao.entity.annotation.Column;

import org.nutz.dao.entity.annotation.Name;

import org.nutz.dao.entity.annotation.Table;

 

@Table("t_man")   //声明了Man对象的数据表

public class Man {

   

    public Man() {}

   

    @Column

    @Name    // 表示该字段可以用来标识此对象,或者是字符型主键,或者是唯一性约束

    private String name;

    @Column

    private String age;

    //省略了getter and setter

}

 

1.7.               子模块类----接受网页的命令,并完成对数据库的操作

HelloWorld.java完整源代码

import java.sql.SQLException;

import java.util.List;

import org.apache.commons.dbcp.BasicDataSource;

import org.apache.log4j.Logger;

import org.nutz.dao.Dao;

import org.nutz.dao.impl.NutDao;

import org.nutz.ioc.Ioc;

import org.nutz.json.Json;

import org.nutz.mvc.annotation.At;

import org.nutz.mvc.annotation.Ok;

import org.nutz.mvc.annotation.Param;

 

 @Ok("json")

public class HelloWorld {

         private static Loggerlogger = Logger.getLogger(HelloWorld.class);

        @At("/display")

        public String diplay(

                    Ioc ioc)throws SQLException {

            //由于主模块使用了Ioc,而ioc配置中已经配置好了名为“dataSource”的实例,故这里仅需引用即可。

            BasicDataSource ds= ioc.get(BasicDataSource.class,"dataSource");         

            Dao dao = newNutDao(ds);

            Man p = new Man();

            List<Man>list=dao.query(Man.class, null, null);

 

            Stringstr=Json.toJson(list);

            return str;

        }

 

       @At("/insert")

        public Stringinsert(@Param("name") String name,

                @Param("age") String age,

                    Ioc ioc)throws SQLException {

            BasicDataSource ds= ioc.get(BasicDataSource.class,"dataSource");

           

            Dao dao = newNutDao(ds);

            Man p =new Man();

            p.setName(name);

            p.setAge(age);

 

            dao.insert(p);

//           logger.debug(dao.update(p));

            Stringstr="sucess:'ok'";

            return str;

        }

 

       @At("/update")

        public Stringupdate(@Param("name") String name,

                @Param("age") String age,

                    Ioc ioc)throws SQLException {

            BasicDataSource ds= ioc.get(BasicDataSource.class,"dataSource");

 

          

            Dao dao = newNutDao(ds);

            Man p =new Man();

            p.setName(name);

            p.setAge(age);

 

           // dao.update(p);

           logger.debug(dao.update(p));

            Stringstr="sucess:'ok'";

            return str;

        }

 

        @At("/delete")

        public Stringdelete(@Param("name") String name,

                @Param("age") String age,

                    Ioc ioc)throws SQLException {

            BasicDataSource ds= ioc.get(BasicDataSource.class,"dataSource");

           

            Dao dao = new NutDao(ds);

            Man p =new Man();

            p.setName(name);

            p.setAge(age);

 

            dao.delete(p);

//         logger.debug(dao.update(p));

            Stringstr="sucess:'ok'";

            return str;

        }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值