欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

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

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

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

3、  減小Controler對頁(yè)面地址的依賴(lài)

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

首先在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的返回寫(xiě)為:

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寫(xiě)成這樣:

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)調用了,以給prodMan賦上值。

 

5、  單元測試

在WEB應用開(kāi)發(fā)中,我們習慣的測試方法是實(shí)際測試,即把WEB Module部署好了之后,用測試用例測試。這樣效率很低,因為編譯、打包、部署、測試的過(guò)程很費時(shí)間。

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

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

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());

    }

}

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

 

注意上面例子中的

    public void setUp() throws IOException {

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

    }

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


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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久