1.ViewResolver(解析成視圖對象View:jsp等) 01.配置的試圖解析器是InternalResourceViewResolver,那麼默認的View就是InternalResourceView <!-- 配置視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver"> <property name="prefix" value="/WEB-INF/view/"></property> <property name="suffix" value=".jsp"></property> </bean> 02.InternalResourceView主要是顯示jsp的;InternalResourceViewResolver主要是解析在同一個web應用下經過轉發的那個結果。 2.配置國際化資源文件,並使用jstl的fmt使用國際化資源(一旦加入了jstl的jar包,View就會變成jstlView) 01. <!-- 配置國家化資源文件 --> <bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource"> <property name="basename" value="i18n"></property>(i18n.properties等放在類路徑下) </bean> 02.(加入了jstl的jar包)導入fmt標籤<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 03.使用國際化資源 <fmt:message key="username"></fmt:message> 3.只經過配置實現轉發,不通過handler處理器(直接響應經過springMVC渲染的頁面) <!-- 不須要通過handler,直接轉。但若是隻寫這麼一句配置,以前那些通過handler的請求就是404了 --> <!-- 當請求爲http://localhost:8080/springMVC-view/testSuccess時轉發到/WEB-INF/view/success.jsp --> <mvc:view-controller path="/testSuccess" view-name="success"/> <!-- 要加上下面這一句,上面的問題才能解決 --> <mvc:annotation-driven></mvc:annotation-driven> 4.自定義視圖解析器 01.自定義一個類繼承View接口,並配置到IOC容器中 02.若想使用該視圖,能夠使用BeanNameViewResovler視圖解析器 <!-- 配置視圖解析器,能夠經過order屬性來配置解析器的優先級,值越小優先級越高,默認都是Integer.MAX_VALUE。 BeanNameViewResolver是從IOC容器中找以目標方法返回值爲名字的bean(View對象),調用其的render方法。 若解析不成功再用優先級比它低的解析器 每次請求都會產生一個新的view對象 --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" id="beanNameViewResolver"> <property name="order" value="100"></property> </bean> 5.重定向 只要在返回的字符串中寫上"redirect:/index.jsp"便可;"forward:/index.jsp"是轉發。(第一個/都表明web應用根目錄) 注意:一旦重定向就不能訪問WEB-INF下的頁面了,會報404。
MyView.javahtml
package views; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.servlet.View; //自定義視圖,繼承View。若要顯示Excel,能夠繼承AbstractExcelView會比較方便 @Component public class MyView implements View { //返回內容的類型 @Override public String getContentType() { return "text/html"; } //渲染視圖的過程 @Override public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.getWriter().print(model.get("user")); } }