<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

       :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

    Spring技術手冊筆記(五):Spring MVC 中

    Posted on 2009-11-16 15:49 codingliyi 閱讀(1086) 評論(0)  編輯  收藏 所屬分類: Java EE

    Controller實現類

    AbstractController:使用Template Method模式,包括了對緩存標頭的處理、檢驗對請求方法(POSTGET)的支持,Session的取得與同步化等。

    使用方式:繼承AbstractController類,覆蓋handleRequestInternal()方法。

    MultiActionControllerParameterMethodNameResolver

    在一個Controller類中定義多個方法,并根據使用者的請求來執行當中的某個方法,相當于StrutsDispatcherAction

    使用MultiActionController需要配個一個MethodNameResolver實例,默認使用ParameterMethodNameResolver,他會根據所給的網址中,最后請求的文件名稱來判斷執行Controller中的哪一個方法,示例:

    multiMethodController.java
     1public class MultiMethodController extends MultiActionController {
     2    private String viewPage;
     3    
     4    public ModelAndView add(HttpServletRequest request, HttpServletResponse response){
     5        return new ModelAndView(viewPage, "method""add");
     6    }

     7    
     8    public ModelAndView delete(HttpServletRequest request, HttpServletResponse response){
     9        return new ModelAndView(viewPage, "method""delete");
    10    }

    11    
    12    public ModelAndView update(HttpServletRequest request, HttpServletResponse response){
    13        return new ModelAndView(viewPage, "method""update");
    14    }

    15    
    16    public void setViewPage(String viewPage){
    17        this.viewPage = viewPage;
    18    }

    19}
    applicationContext.xml
     1 <bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     2     <property name="mappings">
     3         <props>
     4             <prop key="/sayHello.do">sayHelloController</prop>
     5             <prop key="/method.do">multiMethodController</prop>
     6             <prop key="/login.do">loginController</prop>
     7             <prop key="/wizard.do">wizardController</prop>
     8         </props>
     9     </property>
    10 </bean>
    11 
    12 <bean id="parameterMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    13     <property name="paramName" value="action" />
    14     <property name="defaultMethodName" value="add" />
    15 </bean>
    16     
    17<bean id="multiMethodController" class="SpringMVC.MultiMethodController">
    18    <property name="methodNameResolver" ref="parameterMethodResolver" />
    19    <property name="viewPage" value="multiMethodTest" />
    20</bean>

    PatameterizableViewController

    可以直接在Bean文件中定義,設定它的viewName屬性,當這個Controller執行時,會根據viewName的設定直接導向指定的網頁,使用它的好處是可以用來避免直接對JSP頁面請求。

    AbstractCommandController

    繼承該類,并提供一個Command對象(如常見的User類),當請求來時,AbstractCommandController會試著對比請求參數名稱與Command上的Setter方法名稱,設定請求參數值。

    SimpleFormController

    SimpleFormController繼承自AbstractFormController,對于簡單的表單可以直接繼承這個類,并重新定義onSubmit()doSubmitAction()方法處理請求。以下是一個簡單的登錄頁面示例:

    LoginController.java
     1public class LoginController extends SimpleFormController {
     2
     3    public LoginController(){
     4        this.setCommandClass(LoginForm.class);
     5    }

     6
     7    protected ModelAndView onSubmit(Object command) throws Exception {
     8        LoginForm form = (LoginForm)command;
     9        if("codingliyi".endsWith(form.getUsername()) &&
    10                "123456".endsWith(form.getPassword())){
    11            return new ModelAndView(getSuccessView(), "username", form.getUsername());
    12        }
    else return new ModelAndView(getFormView());
    13    }

    14}

    15

    applicationContext.xml

    1<bean id="loginController" class="SpringMVC.LoginController">
    2    <property name="successView" value="loginSuccess" />
    3    <property name="formView" value="login" />
    4</bean>

    login.jsp

    1<form name="loginForm" action="login.do" method="POST">
    2    用戶名:<input type="text" name="username"/><br/>
    3    密碼:<input type="text" name="password"/><br/>
    4    <input type="submit" value="登錄" />
    5</form>

     

    AbstractWizardFormController

    AbstractWizardFormController用于設計多頁表單。

    可以繼承該類,并重寫processFinish()方法。一個多頁表單的示例如下:

    WizardController.java

     1public class WizardController extends AbstractWizardFormController {
     2
     3    private String viewPage;
     4    
     5    public WizardController(){
     6        this.setCommandClass(LoginForm.class);
     7    }

     8    @Override
     9    protected ModelAndView processFinish(HttpServletRequest arg0,
    10            HttpServletResponse arg1, Object command, BindException arg3)
    11            throws Exception {
    12        LoginForm form = (LoginForm)command;
    13        Map model = new HashMap();
    14        model.put("username", form.getUsername());
    15        model.put("password", form.getPassword());
    16        return new ModelAndView(viewPage, model);
    17    }

    18
    19    public void setViewPage(String viewPage){
    20        this.viewPage = viewPage;
    21    }

    22}

    applicationContext.xml

     1<bean name="wizardController" class="SpringMVC.WizardController">
     2    <property name="viewPage" value="wizardResult"/>
     3    <property name="pages">
     4        <list>
     5            <value>question1</value>
     6            <value>question2</value>
     7        </list>
     8    </property>
     9    <property name=""></property>
    10</bean>

    question2.jsp

    1<form action="wizard.do" method="POST">
    2    你的密碼:<input type="text" name="password" /><br/>
    3    <input type="submit" value="previous" name="_target0" />
    4    <input type="submit" value="finish" name="_finish" />
    5</form>

    也可以在問卷中涉及一個cancel按鈕,在按下該按鈕后,送出"_cancel"請求參數,當請求中帶有"_cancel"參數時,會執行processCancel()方法。

    ThrowawayController

    ThrowawayController并不在Controller的繼承架構中,而是一個獨立的接口定義。實現該接口的類不是以單例的方式產生并重復使用。ThrowawayController在每一次請求中都會產生新的對象,而且用了就丟,不會重復使用。

    在設定Bean定義文件中,ThrowawayController必須將"singleton"屬性設為false



    主站蜘蛛池模板: 亚洲中文字幕久在线| 亚洲AV午夜成人片| 亚洲日韩一中文字暮| 国产成人无码免费看视频软件 | 色欲A∨无码蜜臀AV免费播| 亚洲精品无码永久在线观看你懂的| 污视频网站在线免费看| 亚洲人成影院在线观看| 亚洲精品成人在线| 精品国产污污免费网站入口| 亚洲人成中文字幕在线观看 | 88av免费观看| 亚洲二区在线视频| 成人免费777777| 国产大陆亚洲精品国产| 色噜噜亚洲精品中文字幕| 免费观看一区二区三区| 久久久久无码精品亚洲日韩| 亚洲一区二区三区免费在线观看| 久久久久亚洲av无码专区| 免费一本色道久久一区| 亚洲色大18成人网站WWW在线播放| 国产在线观看免费完整版中文版 | 国产三级在线免费| 77777_亚洲午夜久久多人| 最近中文字幕mv手机免费高清| 亚洲国产成人综合精品| 中文字幕亚洲图片| 成年人视频免费在线观看| 亚洲精品无码你懂的| 在线观看午夜亚洲一区| 成人免费大片免费观看网站| 美女羞羞喷液视频免费| 亚洲精品国精品久久99热一| 日韩在线免费视频| 国产成人不卡亚洲精品91| 亚洲AV日韩AV鸥美在线观看| 日韩版码免费福利视频| 久久国产乱子伦精品免费午夜| 亚洲国产精品久久久久| 成人免费无码精品国产电影|