最近要做一个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.