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

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
開發(fā)Spring MVC應用程序(2)

2、開發(fā)和配置應用程序

13)改進index.jsp

l         我們要在JSP中使用JSTL,所以將lib/j2ee/jstl.jarlib/jakarta-taglibs/standard.jar導入到springapp/WEB-INF/lib目錄下

l         創(chuàng)建include.jsp包含對Taglibs的引用,以便其它JSP包含引用:

<%@ page session="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

l         為了這些文件不讓用戶直接訪問,可以將文件放在/WEB-INF目錄下,這里將文件放在/WEB-INF/jsp目錄下

l         修改index.jsp,使用<c:redirect>重定向到控制器

<%@ include file="/WEB-INF/jsp/include.jsp" %>
<%-- Redirected because we can‘t set the welcome page to a virtual URL. --%>
<c:redirect url="/hello.htm"/>

14)改進視圖和控制器

l         include.jsp一樣,hello.jsp也是不能直接訪問的,所以將hello.jsp移動到/WEB-INF/jsp目錄下

l         hello.jsp中,我們增加當前日期和事件的輸出,這是從后面講到的Model中獲取的

<%@ include file="/WEB-INF/jsp/include.jsp" %>
 
<html>
<head><title>Hello :: Spring Application</title></head>
<body>
<h1>Hello - Spring Application</h1>
<p>Greetings, it is now <c:out value="${now}"/>
</p>
</body>
</html>

l         由于hello.jsp的路徑改變,并且需要Model數據,因此需要修改控制器來調整輸出視圖的路徑并提供Model數據

import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.io.IOException;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public class SpringappController implements Controller {
 
    /** Logger for this class and subclasses */
    protected final Log logger = LogFactory.getLog(getClass());
 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        String now = (new java.util.Date()).toString(); 
        logger.info("returning hello view with " + now);
 
        return new ModelAndView("/WEB-INF/jsp/hello.jsp", "now", now);
    }
}

l         在瀏覽器中輸入http://localhost:8888/springapp,就會顯示帶當前日期和時間的歡迎頁面

15)減少視圖和控制器的耦合

l         上面的例子中視圖和控制器存在依賴關系。我們的想法是使用邏輯名字來映射視圖。這就允許在改變視圖(如名字、路徑)時不需要修改控制器。

l         簡單的映射就是使用InternalResourceViewResolver設置前綴和后綴

l         修改springapp-servlet.xml,增加viewResolver條目

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
<!--
  - Application context definition for "springapp" DispatcherServlet.
  -->
 
<beans>
    <bean id="springappController" class="SpringappController"/>
 
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello.htm">springappController</prop>
            </props>
        </property>
    </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>
</beans>

l         這樣就可以在控制器中去掉視圖的前綴和后綴

import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.io.IOException;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public class SpringappController implements Controller {
 
    /** Logger for this class and subclasses */
    protected final Log logger = LogFactory.getLog(getClass());
 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        String now = (new java.util.Date()).toString(); 
        logger.info("returning hello view with " + now);
 
        return new ModelAndView("hello", "now", now);
    }
}

16)增加業(yè)務邏輯類

l         Product類提供業(yè)務數據,ProductManager類用來管理Product(即業(yè)務數據);它們都實現(xiàn)為JavaBean

package bus;
 
import java.io.Serializable;
 
public class Product implements Serializable {
 
    private String description;
    private Double price;
 
    public void setDescription(String s) {
        description = s;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setPrice(Double d) {
        price = d;
    }
 
    public Double getPrice() {
        return price;
    }
 
}

 

package bus;
 
import java.io.Serializable;
import java.util.List;
 
public class ProductManager implements Serializable {
 
    private List products;
 
    public void setProducts(List p) {
        products = p;
    }
 
    public List getProducts() {
        return products;
    }
 
}

l         為了將Web表示和業(yè)務邏輯分離,這些類和控制器放在不同的包中busweb;注意將SpringappController移動到web包中

l         修改SpringappController,保存ProductManager的引用,以便向視圖傳遞業(yè)務數據;由于需要傳遞多個對象,使用Map結構

package web;
 
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
import bus.ProductManager;
 
public class SpringappController implements Controller {
 
    /** Logger for this class and subclasses */
    protected final Log logger = LogFactory.getLog(getClass());
 
    private ProductManager prodMan;
 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        String now = (new java.util.Date()).toString();
        logger.info("returning hello view with " + now);
 
        Map myModel = new HashMap();
        myModel.put("now", now);
        myModel.put("products", getProductManager().getProducts());
 
        return new ModelAndView("hello", "model", myModel);
    }
 
    public void setProductManager(ProductManager pm) {
        prodMan = pm;
    }
 
    public ProductManager getProductManager() {
        return prodMan;
    }
}

17)修改視圖顯示業(yè)務數據,同時提供消息束支持

l         使用<c:forEach>遍歷顯示業(yè)務數據,使用<fmt:message>從后面介紹的的消息文件中獲得消息顯示

<%@ include file="/WEB-INF/jsp/include.jsp" %>
 
<html>
<head><title><fmt:message key="title"/></title></head>
<body>
<h1><fmt:message key="heading"/></h1>
<p><fmt:message key="greeting"/> <c:out value="${model.now}"/>
</p>
<h3>Products</h3>
<c:forEach items="${model.products}" var="prod">
  <c:out value="${prod.description}"/> <i>$<c:out value="${prod.price}"/></i><br><br>
</c:forEach>
</body>
</html>

18)增加測試數據以自動組裝業(yè)務對象

l         上面的例子還沒有增加從數據庫來裝載業(yè)務對象的功能代碼,所以使用SpringBean和應用程序context功能來實例化,這需要在springapp-servlet.xml中加一些Bean條目

l         增加messageSource指定消息資源束保存的文件messages.properties

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
<!--
  - Application context definition for "springapp" DispatcherServlet.
  -->
 
<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>
 
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename"><value>messages</value></property>
    </bean>
 
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello.htm">springappController</prop>
            </props>
        </property>
    </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>
</beans>

19)增加消息束

l         springapp/WEB-INF/classes目錄下創(chuàng)建messages.properties文件,注意key值與<fmt:message>中引用的一致

title=SpringApp
heading=Hello :: SpringApp
greeting=Greetings, it is now

l         重新部署,在瀏覽器中輸入http://localhost:8888/springapp,就會顯示帶當前日期和時間以及業(yè)務數據的頁面

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Spring起步例子 “Developing a Spring Framework MVC application step-by-step” 剖析(二)
Spring MVC 入門
開發(fā)NetBeans Spring MVC過程分析
jar包與war包的差異
spring security 3.1配置過程從簡單到復雜詳細配置
spring Mvc 教程框架實例以及系統(tǒng)演示下載
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服