功能:
(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
CREATE TABLE `t_man` (
`name`varchar(45) NOT NULL DEFAULT '',
`age`varchar(45) NOT NULL DEFAULT '""',
PRIMARYKEY (`name`)
)
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时,却需要,郁闷
下载地址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
http://code.google.com/p/nutz/downloads/list
完整代码:
30
newhtml3.html全部源代码
//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 = ["
姓名 | ");年龄 | ");"); | "); |
"); | "); | "); | |
"); | "); | ");
strTbody.push(""); strTbody.push(" | ");
");
strTbody.push(""); strTbody.push(" | ");
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);
}
//-->
位于源代码 根目录中。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 {}
位于源代码根目录中,即与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'
}
}
}
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
}
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
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;
}
}