jello框架快速入门
李甫
2023-12-01
本文是开发基于jello框架的web应用的入门文章,无需使用其他任何框架即可完成应用构建。
简介:
这个例子是建立一个简单的web应用,叫ProductManage,完成产品管理操作,包含简单的数据库增,删,改,查,即CRUD(新建,访问,更新,删除)操作。这是一个三层的web应用,通过web控制器Controller访问业务层,业务层调用框架内置的持久层实现业务逻辑。流程顺序从web控制器(ProductController)到业务层(ProductService),然后将结果返回页面。
以下是完成这个例子的步骤:
1.配置jello框架
2.数据库建表
3.继承框架业务支持类Business生成业务类ProductService
4.继承框架控制器支持类Controller生成控制器类ProductController
5.建立JSP页面list.jsp和row.jsp用于显示列表和新增修改
6.运行实例
配置jello框架:
新建一个web project,在src目录下建立包com.figcn.simple.biz用于存放业务层代码,建立包com.figcn.simple.web用于存放web控制器代码,在WebRoot下新建文件夹product用于存放JSP页面。
从 http://sourceforge.net/projects/jelloframework 下载jello框架1.6.1包,解压后按UserManual说明将相关类库等文件复制到项目对应目录下。
数据库建表:
CREATE TABLE t_product (product_id int NOT NULL, product_name varchar(50) NULL ,product_type varchar(50) NULL, unit_price numeric(18, 2) NULL, add_date datetime NULL)
继承框架业务支持类Business生成业务类ProductService:
package com.figcn.simple.biz;
import java.util.List;
import com.figcn.jello.biz.Business;
import java.util.Map;
import com.figcn.jello.data.Linker;
import com.figcn.jello.data.Model;
public class ProductService extends Business {
public static ProductService getInstance() {
return new ProductService();
}
public List<Map> getList() {
return getTable("t_product");
}
public void save(Map map) {
Model row = new Model("t_product");
row.setData(map);
save(row);
}
public Map get(String id) {
return getRow("t_product", "product_id", Integer.parseInt(id));
}
public void delete(String id) {
delete("t_product", "product_id", Integer.parseInt(id));
}
public Object getRowCount()
{
Linker linker=getLinker();
linker.open();
Object ret=linker.executeScalar("select count(*) from t_product");
linker.close();
return ret;
}
}
继承框架控制器支持类Controller生成控制器类ProductController:
package com.figcn.simple.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import com.figcn.jello.web.WebUtil;
import com.figcn.jello.web.servlet.ControlTemplate;
import com.figcn.jello.web.servlet.Controller;
import com.figcn.simple.biz.ProductService;
public class ProductController extends Controller implements ControlTemplate{
public void toList(HttpServletRequest request, HttpServletResponse response) {
List list=ProductService.getInstance().getList();
request.setAttribute("list",list);
forward("list.jsp");
}
public void doDelete(HttpServletRequest request, HttpServletResponse response) {
String itemid=request.getParameter("itemid");
ProductService.getInstance().delete(itemid);
toList(request,response);
//forward("/product/ProductAction.jo?method=toList");
}
public void toEdit(HttpServletRequest request, HttpServletResponse response) {
String itemid=request.getParameter("itemid");
Map map=ProductService.getInstance().get(itemid);
request.setAttribute("foredit",map);
forwardToEdit("row.jsp");
}
public void toAdd(HttpServletRequest request, HttpServletResponse response) {
forwardToAdd("row.jsp");
}
public void doSave(HttpServletRequest request, HttpServletResponse response) {
Map map=WebUtil.getParameterMap(request);
ProductService.getInstance().save(map);
toList(request,response);
}
public void getCount(HttpServletRequest request, HttpServletResponse response)
{
ProductService ps=ProductService.getInstance();
Object count=ps.getRowCount();
StringBuilder sb=new StringBuilder();
sb.append("total rows count is:<br/>");
sb.append(count+"<br/>");
sb.append("<a href='javascript:history.back(-1);'>back to list</a>");
//show informations or return response to web invoker
print(sb.toString());
}
}
建立JSP页面list.jsp和row.jsp用于显示列表和新增修改:
List.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body bgcolor="#ffffff">
<div>
<a href="ProductController.co?method=toAdd">New Product</a>
<a href="ProductController.co?method=getCount">Get Products Count</a>
</div>
<table>
<tr bgcolor=green >
<td>Product ID</td>
<td>Product Name</td>
<td>Type</td>
<td>Price</td>
<td>Added Date</td>
<td>Edit</td>
<td>Delete</td>
</tr>
<c:forEach items="${list}" var="item">
<tr bgcolor=skyblue>
<td>${item.product_id }</td>
<td>${item.product_name }</td>
<td>${item.product_type }</td>
<td>${item.unit_price }</td>
<td>${item.add_date }</td>
<td><a href="ProductController.co?method=toEdit&itemid=${item.product_id}">Edit</a></td>
<td><a href="ProductController.co?method=doDelete&itemid=${item.product_id}">Delete</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
Row.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib prefix="jello" uri="http://www.figcn.com/jello/taglib" %>
<jello:inc src="../js/jello.js"/>
<jello:inc src="../js/calendar.js"/>
<html>
<body bgcolor="#ffffff">
<form action="ProductController.co?method=doSave" method=post name=frm>
<input name=intkey:product_id type=hidden value="${foredit.product_id }">
<input name="formtype" type="hidden" value="${formtype}"/>
<table>
<tr>
<td>ID</td>
<td>
<input name="int:product_id" value="${foredit.product_id}" />
</td>
</tr>
<tr>
<td>Name</td>
<td><input name="string:product_name" value="${foredit.product_name}" /></td>
</tr>
<tr>
<td>Type</td>
<td><input name="string:product_type" value="${foredit.product_type}" /></td>
</tr>
<tr>
<td>Price</td>
<td><input name="string:unit_price" value="${foredit.unit_price}" /></td>
</tr>
<tr>
<td>Added Date</td>
<td>
<A οnclick="showCalendar('../js/calendar.htm', document.all('date:add_date'));return false;" href="#">
<input name="date:add_date" value="${foredit.add_date}" /></a>format:yyyy-MM-dd
</td>
</tr>
<tr>
<td colspan=2 align=right>
<input type=submit value=Save >
<input type=button value=Back οnclick="_back()">
</td>
</tr>
</table>
</form>
</body>
</html>
运行实例。
这样一个简单的WEB应用就完成了,是不是比较方便呢?就算不写注释,我想N年后你一样可以很容易地看懂自己写的代码,当然写注释始终是一个良好的习惯。
好了,省下来的研究如何分层、配置XML文档等等的时间可以用来玩一局魔兽世界了。