今天总结一下这个系统软件使用的系统架构。
这个软件使用的mvc框架有点类似于struts,我是在2005年开始接触java的,在维护这个系统软件之前使用的mvc框架包括struts和webwork两种,相比较之下,与strtus更为类似,或许也是因为strus中控制类部分也是直接操作request吧。
这个mvc框架自身的特点大致有这么几个:
1.这个mvc框架没有使用配置文件,在webconfig文件中配置有一个总控的servlet,负责接受页面提交的请求,进行转发。
页面提交请求方式是直接请求这个总控servlet,在提交请求到这个servlet的同时,提交两个固定的参数,分别是class和method参数,通知servlet将请求转到相应的类,并调用参数中的方法。
2.总控servlet调用的类为普通的java类,没有特殊的要求,比如struts中要继承action父类,方法写法有严格的要求,为静态方法,不允许有返回参数,接受的参数也固定,如下:
public static void expMethod(HttpServletRequest req,
HttpServletResponse res,
RequestHash reh) throws Exception {}
因为没有使用配置文件,方法调用结束后返回到哪个页面,在该方法中直接赋值该页面的具体路径。这样修改起来有点复杂,需要重新编译类,并且在调试的时候,如果需要找到该请求调用的页面的具体路径,必须找到这个类和方法,不如使用配置文件一目了然。
3.获取页面上的参数,这个框架提供两种不同的选择。
框架提供一个Common的对象,该对象封装了对request的部分操作,提供了一个RequestHash对象,该对象为一个Vector集合,页面表单提交的数据已经封装到该集合中,参数获取方式为,创建一个字符串数组,将需要获取的参数名称赋值到该数组中,Common的toData方法返回与字符串数组相对应的参数值,如下
Common common = new Common(req,res);//req request对象,res为response对象
String[] keys = {"param1","param2"};
String[] values = common.toData(reh, keys);
此时values数组中,values【0】中的值为param1表单值,相应的为param2的表单值。
如果需要获取一个数组值,request的操作是getParamValues方法,例如表单中的复选框值,RequestHash对象提供了类似于request的这个操作。
reh.getParameterValues("params");
4.为显示页面赋值也使用了Common对象。
a、 赋值简单的字符串对象:common.addString("showParam", param);
第一个参数为页面获取该参数值使用的名称,第二个为该对象名称。
b、一次性赋值多个字符串对象:common.addArray(keys, values);
相对应的,keys为页面获取参数值的名称,values为参数的值。
c、赋值一个复杂的对象,例如自定义对象或者一个List对象:
common.addObject("voname", vo);
用法一致。
该框架提供一套通用的js脚本库和一些统一的赋值规则,例如登录用户对象名称,子系统名称和提示名称,因此common对象赋值也提供了一些特殊的方法,只接受参数的值,参数名称为已定义名称,因此在为页面赋值也要注意不要与系统框架已定义对象名称冲突。
今天写到这里,下一篇写写这个mvc框架的页面逻辑,标签还有这个脚本库的内容吧。