controller包提供了三個(gè)主要功能:

          如下圖:

          controller.bmp

          1、  mvc的主控制servlet

          Main Controller類(lèi)提供了總體控制作用,所有的請(qǐng)求都先映射到此類(lèi)上,然后在統(tǒng)一分發(fā)到各個(gè)部分控制類(lèi)。由于servlet是支持多線程的,所以性能是可以保證的。

          MainController類(lèi)繼承于HttpServlet類(lèi),主要方法有:

          1)        init()方法,初始化方法,在此方法里面主要初始化一些公共的資源、服務(wù),過(guò)濾器和一些系統(tǒng)基礎(chǔ)配置參數(shù)等。初始化服務(wù)過(guò)程委托services包中的Service Manager類(lèi)來(lái)完成,初始化各種filterfilter包下的Filter Manager來(lái)完成。

          2)        doPost()doGet()方法,接收各種請(qǐng)求并交給processRequest()方法統(tǒng)一處理,統(tǒng)一了post, get兩種請(qǐng)求方式。

          通過(guò)在web.xml中注冊(cè)和映射,使得各種符合要求的請(qǐng)求都直接轉(zhuǎn)發(fā)到此控制類(lèi)上,配置如下:

                 <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>

          這樣碰到請(qǐng)求url.cmd結(jié)尾的或者以/command//main/開(kāi)頭的都映射到此類(lèi)上來(lái)做統(tǒng)一處理。實(shí)現(xiàn)了統(tǒng)一控制功能。

          2、filter的接口和管理類(lèi)

          filter包主要包含filter接口和filter的管理類(lèi)。FilterManager類(lèi)負(fù)責(zé)初始化各注冊(cè)的filter(開(kāi)發(fā)人員可以自己開(kāi)發(fā)并注冊(cè)在注冊(cè)文件中),系統(tǒng)控制類(lèi)接收到各種請(qǐng)求先按需要交給過(guò)濾類(lèi)(filter)來(lái)進(jìn)行過(guò)濾,然后在由各自業(yè)務(wù)處理類(lèi)完成業(yè)務(wù)處理。

          統(tǒng)一過(guò)濾類(lèi)可以用來(lái)完成一些需要每次請(qǐng)求都需要判斷的邏輯,比如說(shuō)登入校驗(yàn)(判斷用戶是否登入過(guò),如果沒(méi)有直接跳轉(zhuǎn)到登入頁(yè)面)還有一個(gè)比較關(guān)鍵的過(guò)濾就是CodeFilter類(lèi)。一般的http請(qǐng)求分為兩種類(lèi)型,一種是普通類(lèi)型,一種是為multipart 類(lèi)型(formenctype="multipart/form-data",可以上傳文件)兩種類(lèi)型導(dǎo)致在后面服務(wù)器端接收form中的參數(shù)使用的方法各不相同,multipart類(lèi)型的用getParameter()方法是沒(méi)法取出提交上來(lái)的參數(shù)的,而是要得到一個(gè)Binary數(shù)組自己進(jìn)行分拆才能得到。導(dǎo)致程序取參數(shù)的不一致性,可移植性減弱。所以使用CodeFilter對(duì)每個(gè)request進(jìn)行過(guò)濾,將兩種情況上傳的各種參數(shù)都重新setAttributerequest中,這樣就能夠使后面的command類(lèi)只使用getAttribute()方法就能取到實(shí)際的參數(shù)而不需要管是哪種方式提交的了,并且CodeFilter中還可以把一些字符過(guò)濾掉,比如說(shuō)單引號(hào)等。

          3、請(qǐng)求輔助類(lèi)

          請(qǐng)求輔助類(lèi)(RequestHelper)主要有兩個(gè)作用,一是將request,response和配置參數(shù)封裝起來(lái)然后作為command的參數(shù),使每個(gè)command都能夠獲取到前臺(tái)請(qǐng)求的各種信息,第二個(gè)作用是查找command的各種配置參數(shù)信息。


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

          Copyright © publisher luo

          主站蜘蛛池模板: 金阳县| 仁怀市| 元氏县| 湘乡市| 大名县| 马山县| 宜兰县| 酒泉市| 宝鸡市| 香格里拉县| 财经| 思南县| 肇州县| 黔西| 英吉沙县| 汉阴县| 静安区| 台江县| 五家渠市| 启东市| 长岭县| 眉山市| 太保市| 浦江县| 崇仁县| 临桂县| 禹城市| 新野县| 南召县| 扬中市| 方山县| 葫芦岛市| 南安市| 阿拉善右旗| 习水县| 绩溪县| 隆德县| 繁昌县| 九龙城区| 西乡县| 台前县|