本文是开发基于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 onclick="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 onclick="_back()">
</td>
</tr>
</table>
</form>
</body>
</html>
运行实例。
这样一个简单的WEB应用就完成了,是不是比较方便呢?就算不写注释,我想N年后你一样可以很容易地看懂自己写的代码,当然写注释始终是一个良好的习惯。
原文地址:http://blog.csdn.net/jelloframework/archive/2007/01/22/1489783.aspx
分享到:
相关推荐
《Outlook插件Jello的汉化文件详解与应用指南》 Outlook是一款广泛使用的电子邮件管理软件,其强大的功能和易用性深受用户喜爱。在日常使用中,为了提升用户体验,许多用户会选择安装各种插件以增强其功能。其中,...
总结起来,fis3-jello是fis3框架的一个扩展,专为使用JSP和Velocity的前端工程提供了一套完整的解决方案。它集成了fis3的强大功能,同时针对特定的模板引擎进行了优化,以提升开发效率和项目质量。通过使用fis3-...
《Unity中的Jello-Physics:实现生动果冻效果的插件详解》 Unity,作为一款广泛应用的游戏开发引擎,因其强大的3D渲染能力和易用性,深受开发者喜爱。在游戏开发中,模拟真实物理效果是提升游戏体验的重要手段之一...
总的来说,"jello-1.3.1-py3-none-any.whl"是一个针对Python 3开发的库,它提供了预编译的二进制形式,便于快速安装和使用。尽管我们无法提供具体的功能细节,但根据其命名和Python库的一般模式,我们可以推测它可能...
**Jello Dashboard 5 开源项目详解** Jello Dashboard 5 是一款专为Microsoft Outlook设计的全面的任务管理工具,遵循了Getting Things Done(GTD)的理念。GTD是一种时间管理和生产力提升方法,它强调将任务从脑海...
尝试新的jello ! 果冻 使用Python语法过滤JSON和JSON Lines数据 jello与jq相似之处在于,它处理JSON和JSON Lines数据,除了jello使用标准的python dict和list语法。 可以将JSON或JSON Lines传递到jello (JSON ...
标题中的"Python库 | jello-1.2.9-py3-none-...综上所述,"jello-1.2.9-py3-none-any.whl"是一个Python库,用于在Python 3环境中快速部署和使用,无需额外编译步骤。开发者和用户可以通过pip轻松地安装和利用这个库。
尽管没有提供详细信息,但我们可以推测"jello"可能是一个框架或者库,用于构建Web应用。框架通常会提供一套结构和规则,帮助开发者组织代码,提高开发速度,并确保代码的可维护性。"jello-preprocessor-components...
在Python的生态系统中,...它通过whl格式提供,简化了安装流程,用户只需通过pip即可快速集成到他们的项目中。这个库可能包含了各种函数、类或模块,提供了特定的功能,具体功能需要查看库的文档或源代码才能详细了解。
jello-demoJello demo & doc, you can .如何使用安装 jellonpm install -g jello安装插件npm install -g fis-parser-markednpm install -g fis-parser-utcnpm install -g fis-parser-sassnpm install -g fis-package...
资源分类:Python库 所属语言:Python 资源全名:jello-1.1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Jello express服务端api映射框架要解决的问题前后端分离的开发方案中,前端的数据层被剥离出来而独立存在,通常数据层由服务端的api来提供,这就导致我们需要在Express的路由层反复的配置;一方面会导致重复劳动,...
使用安装npm install -g jello-optimizer-velocity-xss启用插件fis.config.set('modules.optimizer.vm', 'velocity-xss');然后使用 release 命令的时候,记得带上 -o 参数。jello release -o配置项目前只有 ...
python库。 资源全名:jello-0.1.7-py3-none-any.whl
标题“jello-command-server:在fis中嵌入tomcat 7”涉及到的是一个项目集成场景,其中jello命令服务器被构建为在FIS(Fast Internet Service)框架中运行,通过嵌入Tomcat 7作为其应用服务器。FIS是一个用于快速开发...
资源来自pypi官网。 资源全名:jello-1.3.1-py3-none-any.whl
jello-optimizer-velocity-xss 与FIS组@2betop发布的类似 自动将JSP内容区的变量加 fn:escapeXml 包裹,用于防止恶意代码执行。 另外,对于标签强制加入属性escapeXml="true" 使用 安装 npm install -g jello-...