国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Spring起步例子 “Developing a Spring Framework MVC application step-by-step” 剖析(二)

3、  減小Controler對(duì)頁(yè)面地址的依賴

在上面的Controler中,return new ModelAndView("WEB-INF/jsp/hello.jsp", "now", now);指出了jsp頁(yè)面的絕對(duì)路徑,這可以改變。

首先在springapp-servlet.xml中增加一個(gè)bean定義:

   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>

        <property name="prefix"><value>/WEB-INF/jsp/</value></property>

        <property name="suffix"><value>.jsp</value></property>

    </bean>

然后把Controler的返回寫為:

return new ModelAndView("hello", "now", now);

這樣InternalResourceViewResolver在返回頁(yè)面之前,會(huì)自動(dòng)加上prefix和suffix。

(。。。我不清楚這有什么用,如果我的路徑除了/WEB-INF/jsp之外還有多個(gè),那該怎么加呢?。。??磥?lái)只好都放到j(luò)sp下面了)

 

4、  bean定義中把其屬性定義成其他的bean

在springapp-servlet.xml中,我們做出如下定義

<beans>

    <bean id="springappController" class="web.SpringappController">

        <property name="productManager">

            <ref bean="prodMan"/>

        </property>

    </bean>

 

    <bean id="prodMan" class="bus.ProductManager">

        <property name="products">

            <list>

                <ref bean="product1"/>

                <ref bean="product2"/>

                <ref bean="product3"/>

            </list>

        </property>

    </bean>

 

    <bean id="product1" class="bus.Product">

        <property name="description"><value>Lamp</value></property>

        <property name="price"><value>5.75</value></property>

    </bean>

    <bean id="product2" class="bus.Product">

        <property name="description"><value>Table</value></property>

        <property name="price"><value>75.25</value></property>

    </bean>

    <bean id="product3" class="bus.Product">

        <property name="description"><value>Chair</value></property>

        <property name="price"><value>22.79</value></property>

    </bean>

 

</beans>       

 

有2點(diǎn)需要理解的:

1、  可以直接利用<property name="price"><value>75.25</value></property>為bean的屬性賦值,也可以用<property name="productManager"> <ref bean="prodMan"/> </property>將屬性賦為另一個(gè)定義的bean。

2、  這些被定義為屬性的bean是在Web Module被加載時(shí)同時(shí)被加載的并且賦給屬性的。一旦加載完成,就可以直接使用,因此沒(méi)有必要在Class定義中為這些屬性賦值(但必須有這些屬性的setter定義)。比如按照上面的XML定義,我們把SpringappController寫成這樣:

public class SpringappController implements Controller {

    private ProductManager prodMan;

 

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {

        Map myModel = new HashMap();

        myModel.put("products", getProductManager().getProducts());

 

        return new ModelAndView("hello", "model", myModel);

    }

 

    public void setProductManager(ProductManager pm) {

        prodMan = pm;

    }

 

    public ProductManager getProductManager() {

      return prodMan;

    }

}

可以看到,沒(méi)有為屬性private ProductManager prodMan賦值,但定義了它的setter――setProductManager,這個(gè)setter在<bean id="springappController">被加載的時(shí)候自動(dòng)調(diào)用了,以給prodMan賦上值。

 

5、  單元測(cè)試

在WEB應(yīng)用開(kāi)發(fā)中,我們習(xí)慣的測(cè)試方法是實(shí)際測(cè)試,即把WEB Module部署好了之后,用測(cè)試用例測(cè)試。這樣效率很低,因?yàn)榫幾g、打包、部署、測(cè)試的過(guò)程很費(fèi)時(shí)間。

Spring的思想是及早測(cè)試以發(fā)現(xiàn)問(wèn)題。

例子中,為測(cè)試SpringappController編寫了測(cè)試程序:

package tests;

 

import java.util.Map;

import java.util.List;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

import org.springframework.web.servlet.ModelAndView;

import web.SpringappController;

import bus.ProductManager;

import bus.Product;

 

public class TestSpringappController extends TestCase {

 

    private ApplicationContext ac;

 

    public void setUp() throws IOException {

        ac = new FileSystemXmlApplicationContext("src/tests/WEB-INF/springapp-servlet.xml");

    }

 

    public void testHandleRequest() throws ServletException, IOException {

        SpringappController sc = (SpringappController) ac.getBean("springappController");

        ModelAndView mav = sc.handleRequest((HttpServletRequest) null, (HttpServletResponse) null);

        Map m = mav.getModel();

        List pl = (List) ((Map) m.get("model")).get("products");

        Product p1 = (Product) pl.get(0);

        assertEquals("Lamp", p1.getDescription());

        Product p2 = (Product) pl.get(1);

        assertEquals("Table", p2.getDescription());

        Product p3 = (Product) pl.get(2);

        assertEquals("Chair", p3.getDescription());

    }

}

測(cè)試類繼承自junit.framework.TestCase。測(cè)試的時(shí)候,主要是測(cè)試controler產(chǎn)生的model對(duì)不對(duì)。當(dāng)然在上面的例子中,測(cè)試沒(méi)有多大的意義,因?yàn)閙odel的產(chǎn)生太簡(jiǎn)單了。但是如果model產(chǎn)生的邏輯非常復(fù)雜,那這種測(cè)試是非常有意義的。

 

注意上面例子中的

    public void setUp() throws IOException {

        ac = new FileSystemXmlApplicationContext ( "src/tests/WEB-INF/springapp-servlet.xml" );

    }

它為controler創(chuàng)建了一個(gè)類似于app server的環(huán)境(bean的加載就是在這里完成的)


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
開(kāi)發(fā)Spring MVC應(yīng)用程序(3-3)
***Spring MVC的多視圖解析器配置及與Freemarker的集成
使用spring mvc框架進(jìn)行文件上傳
Spring整合velocity
十八、多視圖控制器
Spring輸入驗(yàn)證與數(shù)據(jù)綁定
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服