亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spring MVC同時使用多種試圖解析器的解決方案

系統 2834 0

Spring提供的試圖解析器大致分為兩類
一類是需要ViewResolver,如
? 解析JSP的InternalResourceViewResolver?
? 解析Velocity的VelocityViewResolver
? 解析freemarker的FreeMarkerViewResolver
另一類是直接使用View生成試圖對象,如
? 繼承AbstractExcelView的子類
? 繼承AbstractPdfView的子類

我們如果想為我們的系統配置多個試圖解析器,可以參考使用試圖解析器鏈這個功能

分兩種情況,如果第一類和第二類混合使用,可以使用如下的方法

??

< bean? id ="viewResolverOne" ?class ="org.springframework.web.servlet.view.BeanNameViewResovler" >
??
< property? name ="order" >< value > 1 </ value ></ property >
</ bean >

<!-- -繼承AbstractExcelView或者其他抽象view->
<bean?name="listShows"?class="com.springinaction.view.ListShowsView">


<bean?id="viewResolverTwo"?class="org.springframework.web.servlet.view.InternalResourceViewResolver">
??<property?name="prefix">
????<value>/jsp/</value>
??</property>
??<property?name="suffix">
????<value>.jsp</value>
??</property>
??<property?name="viewClass">
????<value>org.springframework.web.servlet.view.JstlView</value>
??</property>
</bean>

? 這樣,當一個Controller訪問一個邏輯名時,spring mvc會自動先從order小的解析器尋找,如果找不到,再一次增大order進行尋找,這樣,就可以使用試圖解析器鏈

?

但是,如果我們需要兩個第一類的解析器共同使用,用上述方法是不行的,因為那三個解析器都繼承自UtlBasedViewResovler,這種情況下,如果發現資源不存在的情況,這種機制不會去通知下一個解析器
所以,就會出現,spring mvc總按照order最小的去解析,及時資源不存在(404錯誤)為了解決這個問
題,我們可以使用org.springframework.web.servlet.view.ResourceBundleViewResolver來解決

?

JSP頁面(用作輸入用),路徑/jsp

register.jsp

?

<% ... @?page?language = " java " ?import = " java.util.* " ?pageEncoding = " GB18030 " %>
<% ... @?taglib?prefix = " spring " ?uri = " http://www.springframework.org/tags " ? %>
<% ... @?taglib?uri = " http://java.sun.com/jsp/jstl/core " ?prefix = " c " ? %>
<! DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN" >
< html >
??
< head >
????
???
?
??
</ head >
??
??
??
< body >

??

???
< form? action ="<%=request.getContextPath()?%>/register.mvc" ?method ="post" >
????
??????name:? < input? type ="text" ?name ="name" ?value ="<c:out?value=" ${status.value}" /> "/>(必須輸入)
??????
</ br >
??
?????sex:?? < input? type ="text" ?name ="sex" /> (必須輸入,且為0或1) br >
???????????
< input? type ="submit" ?value ="submit" />
???
</ form >
??
</ body >
</ html >

?

輸入結果顯示,使用Velocity 路徑/velocity

successV.vm

?

< html >
??
< body >
???????this is in velocity template ??
</ body >
????
< table >
???
???????
< tr >
?????????
??????????
< td > ${student.name} </ td >
??????????
< td > ${student.sex} </ td >
???????
</ tr >
??
?????
</ talbe >
??
</ body >
</ html >

?

控制器:

?

package ?Action;

import ?model.Student;
import ?org.springframework.web.servlet.mvc.AbstractController;
import ?org.springframework.validation.BindException;
import ?org.springframework.web.servlet.ModelAndView;
import ?org.springframework.web.servlet.mvc.SimpleFormController;

public ? class ?RegisterStudentController? extends ?SimpleFormController? ... {



????
public ?RegisterStudentController() ... {

????????
this .setCommandClass(Student. class );
????}



????
protected ?ModelAndView?onSubmit(Object?object,?BindException?arg1)? throws ?Exception? ... {
????????
return ? new ?ModelAndView(getSuccessView(), " student " ,stu);
????}



}

?

在classpath建立資源文件views_zh_CN.properties(這是spring的默認名,可以更改,但需要額外配置)

success.class=org.springframework.web.servlet.view.velocity.VelocityView
success.url=/velocity/successV.vm

表示當邏輯名是success的時候,使用這里定義的試圖解析器

web.xml

?

<? xml?version="1.0"?encoding="UTF-8" ?>
< web-app? version ="2.4" ?
????xmlns
="http://java.sun.com/xml/ns/j2ee" ?
????xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" ?
????xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee?
????http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
??
< context-param >
????
< param-name > contextConfigLocation </ param-name >
????
< param-value > /WEB-INF/train-servlet.xml </ param-value >
??
</ context-param >
??
< servlet >
????
< servlet-name > train </ servlet-name >
????
< servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >
????
< load-on-startup > 0 </ load-on-startup >
??
</ servlet >
??
< servlet-mapping >
?????
< servlet-name > train </ servlet-name >
?????
< url-pattern > *.mvc </ url-pattern >
??
</ servlet-mapping >

???
< listener >
?????
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
???
</ listener >
????
??
< filter >
????
< filter-name > character </ filter-name >
????
< filter-class > Action.CharacterFilter </ filter-class >
??
</ filter >
??
< filter-mapping >
????
< filter-name > character </ filter-name >
????
< url-pattern > /* </ url-pattern >
??
</ filter-mapping >
??
< welcome-file-list >
????
< welcome-file > index.jsp </ welcome-file >
??
</ welcome-file-list >
</ web-app >

?

spring配置文件:

?

< bean? id ="RegisterStudentController" ?class ="Action.RegisterStudentController" >
??
< property? name ="commandClass" >
????
< value > model.Student </ value >
??
</ property >
??
< property? name ="formView" > ?? <!-- -輸入頁面采用jsp解析器->
????<value>register</value>
??</property>
??<property?name="successView">??<!---顯示頁面使用Velocity解析器->
????<value>success</value>
??</property>
</bean>


<bean?id="simpleUrlMapping"?

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
?<property?name="mappings">
???<props>
????<prop?key="/register.mvc">RegisterStudentController</prop>
???</props>
?</property>
</bean>


<!---jsp解析器->
<bean?id="viewResolver"?

class="org.springframework.web.servlet.view.InternalResourceViewResolver">
??<property?name="prefix">
????<value>/jsp/</value>
??</property>
??<property?name="suffix">
????<value>.jsp</value>
??</property>
??<property?name="viewClass">
????<value>org.springframework.web.servlet.view.JstlView</value>
??</property>
</bean>

<!---配置Velocity->
<bean?id="velocityConfigurer"?class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
??<property?name="resourceLoaderPath">
????<value>/</value>??
??</property>
</bean>

<!--配置ResourceBundle,使用配置文件為classpath下的views.properties,views_zh_CN.properties等
-->
< bean? id ="viewResouceResolver" ?class ="org.springframework.web.servlet.view.ResourceBundleViewResolver" >
??
< property? name ="basename" ?value ="views" />
</ bean >

?

運行頁面,可以看到,我們輸入的調用的是jsp頁面,顯示結果調用的是Velocity,如果采用第一種order的方式

spring mvc會找register.jsp和success.jsp或者register.vm或者success.vm,這樣總有一步是錯誤的

?



Spring MVC同時使用多種試圖解析器的解決方案


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 伊人色综合久久天天爱 | 国产亚洲欧美另类久久久 | 欧美日韩亚洲国产无线码 | 热99这里有精品综合久久 | 久久久91精品国产一区二区 | 99精品视频不卡在线观看免费 | 国产精品视频国产永久视频 | 亚洲成人网在线播放 | 日本高清中文字幕视频在线 | 色婷婷精品大视频在线蜜桃视频 | 成人精品视频在线 | 午夜精品久久久久久99热 | 女人l8毛片a一级毛片 | 91成人精品 | 精品视频免费播放 | 狠狠色噜噜噜噜狠狠狠狠狠狠奇米 | 久久99热只有频精品6不卡 | 九九热在线视频观看 | 日本一区二区三区欧美在线观看 | 4虎在线观看 | 欧美激情精品久久久久久久久久 | 日本免费不卡视频 | 久久一区二区精品 | 一区二区不卡在线观看 | 日日爽夜夜操 | japanese60成熟老妇 | 青青热久免费精品视频精品 | 国产精品一 | 欧美理论在线 | 久久精品视频在线 | 97欧美 | 欧美一级片免费 | 亚洲国产精品久久久久婷婷老年 | 99久久免费国产精精品 | 精品国产亚一区二区三区 | 高h女| 日韩国产精品视频 | 成年视频免费 | 在线精品免费视频 | 激情婷婷在线 | 朴妮唛禁福利视频在线 |