controller包提供了三个主要功能:

如下图:

controller.bmp

1、  mvc的主控制servlet

Main Controller类提供了总体控制作用,所有的请求都先映射到此类上,然后在统一分发到各个部分控制类。由于servlet是支持多线程的,所以性能是可以保证的。

MainController类继承于HttpServlet类,主要方法有:

1)        init()方法,初始化方法,在此方法里面主要初始化一些公共的资源、服务,过滤器和一些系统基础配置参数等。初始化服务过程委托services包中的Service Manager类来完成,初始化各种filterfilter包下的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 类型(formenctype="multipart/form-data",可以上传文件)两种类型导致在后面服务器端接收form中的参数使用的方法各不相同,multipart类型的用getParameter()方法是没法取出提交上来的参数的,而是要得到一个Binary数组自己进行分拆才能得到。导致程序取参数的不一致性,可移植性减弱。所以使用CodeFilter对每个request进行过滤,将两种情况上传的各种参数都重新setAttributerequest中,这样就能够使后面的command类只使用getAttribute()方法就能取到实际的参数而不需要管是哪种方式提交的了,并且CodeFilter中还可以把一些字符过滤掉,比如说单引号等。

3、请求辅助类

请求辅助类(RequestHelper)主要有两个作用,一是将requestresponse和配置参数封装起来然后作为command的参数,使每个command都能够获取到前台请求的各种信息,第二个作用是查找command的各种配置参数信息。



只有注册用户登录后才能发表评论。


网站导航:
 

posts - 9, comments - 27, trackbacks - 0, articles - 19

Copyright © publisher luo