在一个标准的BJAF框架Web应用中,一共涉及到3个配置文件,分别是: web.xml 、 WebController.xml 和 WebView.xml 。其中,web.xml是Servlet标准规范所必须的,不能省略;WebController.xml是控制器的配置文件,主要作用是在页面请求的URL与具体此请求的消费控制器类之间建立一个映射关系,为了省去这个配置文件,我们可以采取一种统一的编程约定来代替。我们BJAF框架采取的约定是:“ 控制器名称= $ + 实现类名称(含包路径) + 后缀 ”;“ 视图名称= 视图所在物理路径 + 视图文件名称 ”。
例如:WebDemo示例项目(参考框架开发包例子)中, login.html 登录页面的控制器定义是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title></title>
<link href="t-1.css" rel="stylesheet" type="text/css">
</head>
<body>
<form name="form1" method="post" action="LoginController.ctrl">[1]
<table width="34%" border="0" align="center">
<tr>
<td><div align="right">用户名:</div></td>
<td><input name="username" type="text" id="username" value="HenryYu"></td>
</tr>
<tr>
<td><div align="right">密 码:</div></td>
<td><input name="password" type="text" id="password" value="888888"></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<INPUT TYPE="hidden" NAME="veiwFlag" value="0">
<input type="submit" name="Submit" value="提交">
</div></td>
</tr>
</table>
</form>
</body>
</html>
在 WebController.xml 配置文件中的定义是:
<?xml version="1.0" encoding="UTF-8"?> <mappings> <controllers> <standard> <sItem name="LoginController.ctrl" class="com.beetle.WebDemo.presentation.LoginController" /> </standard> </controllers> </mappings>
那么,换成零配置模式,则 [1] 按照约定改成:
<form name="form1" method="post"
action="$com.beetle.WebDemo.presentation.LoginController.ctrl">[2]
即可。关于视图,LoginController控制器返回视图时候,标准模式写法是:
view = new View("MainView", vd); [3]
// 返回MainView视图
而名为“MainView”的视图是需要定义在配置文件 WebView.xml 中的,如:
<?xml version="1.0" encoding="UTF-8"?> <mappings> <views> <standard> <sItem name="MainView" url="/views/main.jsp" /> </standard> </views> </mappings>
那么换成零配置模式,则 [3] 按照约定,代码改成:
view = new View("/views/main.jsp", vd); // 直接返回视图的具体物理路径和文件名
即可。
可能读者注意到 [2] 把完整的实现类暴露在外,一,不利于安全,别人很容易就知道你的代码结构;二,写法上也不够优化,显得太长,太啰嗦,显然“ com.beetle.WebDemo ”包名称是公共的;那么有没有优化点定义方法呢?
当然,此时我们只要在web.xml应用配置中,添加一个“ CTRL_PREFIX ”参数,把公共包名部分定义在此参数值里面,同时在控制器名称上把公共部分删除即可,如:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>CTRL_PREFIX</param-name> <param-value>com.beetle.WebDemo</param-value> </context-param> </web-app>
[2] 改成:
<form name="form1" method="post" action="$presentation.LoginController.ctrl">
详细例子请参考BJAF框架 开发的 ZeroConfigWebDemo 示例项目。