Posted on 2005-11-18 10:23
publisher luo 阅读(1731)
评论(0) 编辑 收藏 所属分类:
框架设计及应用
controller包提供了三个主要功能:
如下图:
1、 mvc的主控制servlet
Main Controller类提供了总体控制作用,所有的请求都先映射到此类上,然后在统一分发到各个部分控制类。由于servlet是支持多线程的,所以性能是可以保证的。
MainController类继承于HttpServlet类,主要方法有:
1)
init()方法,初始化方法,在此方法里面主要初始化一些公共的资源、服务,过滤器和一些系统基础配置参数等。初始化服务过程委托services包中的Service
Manager类来完成,初始化各种filter由filter包下的Filter Manager来完成。
2)
doPost()和doGet()方法,接收各种请求并交给processRequest()方法统一处理,统一了post, get两种请求方式。
通过在web.xml中注册和映射,使得各种符合要求的请求都直接转发到此控制类上,配置如下:
<servlet>
<servlet-name>mainCommand</servlet-name>
<servlet-class>
com.daosheng.blackfin.controller.MainController
</servlet-class>
<init-param>
<param-name>sysconfig</param-name>
<param-value>/WEB-INF/blackfin-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mainCommand</servlet-name>
<url-pattern>/command/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>mainCommand</servlet-name>
<url-pattern>/main/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>mainCommand</servlet-name>
<url-pattern>*.cmd</url-pattern>
</servlet-mapping>
|
这样碰到请求url以.cmd结尾的或者以/command/或/main/开头的都映射到此类上来做统一处理。实现了统一控制功能。
2、filter的接口和管理类
filter包主要包含filter接口和filter的管理类。FilterManager类负责初始化各注册的filter(开发人员可以自己开发并注册在注册文件中),系统控制类接收到各种请求先按需要交给过滤类(filter)来进行过滤,然后在由各自业务处理类完成业务处理。
统一过滤类可以用来完成一些需要每次请求都需要判断的逻辑,比如说登入校验(判断用户是否登入过,如果没有直接跳转到登入页面)还有一个比较关键的过滤就是CodeFilter类。一般的http请求分为两种类型,一种是普通类型,一种是为multipart 类型(form的enctype="multipart/form-data",可以上传文件)两种类型导致在后面服务器端接收form中的参数使用的方法各不相同,multipart类型的用getParameter()方法是没法取出提交上来的参数的,而是要得到一个Binary数组自己进行分拆才能得到。导致程序取参数的不一致性,可移植性减弱。所以使用CodeFilter对每个request进行过滤,将两种情况上传的各种参数都重新setAttribute到request中,这样就能够使后面的command类只使用getAttribute()方法就能取到实际的参数而不需要管是哪种方式提交的了,并且CodeFilter中还可以把一些字符过滤掉,比如说单引号等。
3、请求辅助类
请求辅助类(RequestHelper)主要有两个作用,一是将request,response和配置参数封装起来然后作为command的参数,使每个command都能够获取到前台请求的各种信息,第二个作用是查找command的各种配置参数信息。