`
kgd924
  • 浏览: 43078 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JS 服务端编程 + JSTL 的留言板例子

阅读更多

最近要做一个WEB的小工具, 已有的代码都是用JSP写的。 又想用我自己实现的js-web,所以就想到了用javascript写后台的代码,用JSTL来表现。 javascript在服务器端运行的问题前面解决了,但是用JSTL来输出javascript的对象和在JSP中如何调用服务端的JS是这次才实现的。

 

1。 在JSP中调用服务器端的javascript使用了一个自自定义标签:

 

<%@ taglib uri="http://www.jsweb.org/tag/js-web" prefix="js" %>

<!--运行一个服务器端 javascript -->
<js:exec file="/js/jstl.js" />

 

2。 如何将JavaScript的对象转换为,JSTL能识别的Java对象呢? 定义了一个JavaScriptMap和JavaScriptCollection分别实现了Map和Collection两个接口。 可以将任意的Javascript对象以MAP/Collection方式传到JSP上面。

 

//取一个HTTP的参数,
var username = web.param('name');

//保存到HTTPRequest 的attribute中。
web.attr('username', username);

web.attr('map', {foo:'foo value', foo2:'foo2 value'});

//保存到Session中。
web.session('list', ['one', 'two', 'three', 'four']);

print("Hello, this a javascript running server side");

 3。 再看JSP中的代码:

<%@ taglib uri="http://www.jsweb.org/tag/js-web" prefix="js" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<div>
<h1><js:exec file="/js/jstl.js" /></h1>
<div>
<div>
<h1>Request parameter</h1>
Hello, <c:out value="${username}" />
<div>
<div>
<h1>Javascript map</h1>
Map:<br/>
foo-><c:out value="${map.foo}" /><br/>
foo2-><c:out value="${map.foo2}" /><br/>
<div>
<h1>Javascript list</h1>
<c:forEach items="${list}" var="e">
    <c:out value="${e}" /><br/>
</c:forEach>
<div>
 

4。如何实现JavaScript服务器端访问数据库:

 

function init_connection(){
    if (!dbd){
                //导入数据操作Library, 在js-shell项目中实现。
                var dbd = __import__('DB', null, {})
		dbd.driver('org.sqlite.JDBC');
	}
	
	return dbd.connect("jdbc:sqlite:" + web.realpath("/WEB-INF/") + "/message.db");
}

//一个查询的例子
function list_message(){
    var conn = init_connection();
    .....
        //the two lines can combine to one,
        //var list = conn.select_list("select * from messages");
		var rs = conn.select("select * from messages");
		var list = rs.fetch_rows();
        	
     ......
    
    return list;    
}

//一个插入纪录的例子
function add_message(){
    var conn = init_connection();
     ....        
        conn.insert("messages", web.param(), ['title', 'message', 'username']);
      conn.close()   
}
 

5。 完整的代码下载地址:  http://js-web.googlecode.com/files/message-board.war

 

最先在考虑数据库操作的时候,想调用JPA,发现相关联的包太多了。最后使用了简单的JDBC方式操作。最近兴趣转移了,很久没有更新了,前几天需要做一个小工具的时候,才又想起了js-shell。加入了一些新的功能,包括数据库操作和Logging方面的Library.

 

 

 

4
0
分享到:
评论
2 楼 kgd924 2009-01-12  
jindw 写道

想法不错,只是,有那些运用场景呢?我最近也在搞一个基于js表达式语法的模板引擎:http://www.xidea.org/project/lite/有空多多交流。

没有考虑什么应用场景,使用js作服务端编程也就是个人的想法而已。

前段时间做js-web的时候就是没有找到好的js模板引擎,所以停止了一段时间。本来想用common-template的,没有想到js对象到java对象转换的办法。现在还是在考虑用common-template了。
1 楼 jindw 2009-01-11  
想法不错,只是,有那些运用场景呢?
我最近也在搞一个基于js表达式语法的模板引擎:
http://www.xidea.org/project/lite/
有空多多交流。

相关推荐

Global site tag (gtag.js) - Google Analytics