【程序编程相关:文章管理系统 V1.0.35】
【推荐阅读:CASSINI源代码分析(5)——总结 】
velocity 的介绍请参考 velocity -- java web 开发新技术.这里是它的一个应用示例. 【扩展信息:JBoss和Apache因共享代码问题硝】
velocity 是一个基于 java 的通用模板工具,来自于 jakarta.apache.org .这个例子参照了 php-nuke 的结构, 即所有 http 请求都以 http://www.some.com/xxx/modules?name=xxx&arg1=xxx&bbb=xxx 的形式进行处理.例子中所有文件都是 .java 与 .html , 没有其他特殊的文件格式.除了 modules.java 是 java servlet, 其余的 .java 文件都是普通的 java class.
所有 http 请求都通过 modules.java 处理.modules.java 通过 velocity 加载 modules.htm. modules.htm 有页头,页脚,页左导航链接,页中内容几个部分.其中页头广告.页中内容是变化部分.页头广告由 modules.java 处理,页中内容部分由 modules.java dispatch 到子页面类处理.
1) modules.java
import javax.servlet.*;
import javax.servlet.http.*; import org.apache.velocity.*; import org.apache.velocity.context.*; import org.apache.velocity.exception.*; import org.apache.velocity.servlet.*; import commontools.*;public class modules
extends velocityservlet { public template handlerequest(httpservletrequest request, httpservletresponse response, context context) { //init response.setcontenttype("text/html; charset=utf-8"); response.setcharacterencoding("utf-8");//prepare function page
processsubpage page = null; processsubpage mainpage = new homesubpage(); string requestfunctionname = (string) request.getparameter("name"); boolean logined = false;string loginaccount = (string) request.getsession(true).getattribute(
"loginaccount"); if (loginaccount != null) { logined = true; }//default page is mainpage
page = mainpage; if (requestfunctionname == null||requestfunctionname.equalsignorecase("home")) { page = mainpage; }//no login , can use these page
else if (requestfunctionname.equalsignorecase("login")) { ... 下一页