springmvc视图解析器3 MVC 怎么配置同时使用多视图

二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
WEB-INF/html/a.jsp&&
WEB-INF/report/b.jsp&
且我配置了视图解析器:
&bean&class="org.springframework.web.servlet.view.InternalResourceViewResolver"&p:order="1"&&&
&&&&&property&name="viewClass"&value="org.springframework.web.servlet.view.JstlView"/&&&
&&&&&property&name="contentType"&value="text/html"/&&&
&&&&&property&name="prefix"&value="/WEB-INF/html/"/&&&
&&&&&property&name="suffix"&value=".jsp"/&&&
&bean&class="org.springframework.web.servlet.view.InternalResourceViewResolver"&p:order="2"&&&
&&&&&property&name="viewClass"&value="org.springframework.web.servlet.view.JstlView"/&&&
&&&&&property&name="contentType"&value="text/html"/&&&
&&&&&property&name="prefix"&value="/WEB-INF/report/"/&&&
&&&&&property&name="suffix"&value=".jsp"/&&&
&bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="1"&
&property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/&
&property name="contentType" value="text/html"/&
&property name="prefix" value="/WEB-INF/html/"/&
&property name="suffix" value=".jsp"/&
然后呢,我分别返回视图名为a和b;为什么a能找到,而b的时候是404;我配置了两个视图解析器,第一个找不到的话,第二个能找到啊?遇到过这个问题的朋友基本上会有类似的问题;
此处我们使用了InternalResourceViewResolver,其有一个buildView方法,该方法一定会创建一个View;所以呢View永远不为null(即使该jsp不存在);问题就是出在这;因为我们使用这个的时候默认是使用servlet forward转发的,此时并不知道该jsp是否存在。
3、解决方案:
3.1、最简单的办法是使用其viewNames属性,来指定一个是否可以处理的规则;
&property&name="viewNames"&value="html*"/&&&
&property&name="viewNames"&value="report*"/&
如上两个的意思是对html或report开头的视图名进行处理,比如返回的视图名为html/a 那么会交给viewNames为html*的那个解析器处理;支持的规则可以查看javadoc。
3.2、内容协商,根据请求时的MediaType来决定使用哪个View;比如根据不同的MediaType决定是JSON/XML/HTML展示时;可以搜索ContentNegotiatingViewResolver了解;
以上的方式对于请求的MediaType一样,且视图名没有规则时一点用没有。
3.3、如果仅有几个不同的视图需要特殊处理;可以考虑直接返回View对象进行处理;而直接不走ViewResolver;
3.4、如果以上都不满足;那只能自己实现自己相应的ViewResolver,可以覆盖两个方法进行处理:
3.4.1、覆盖UrlBasedViewResolver子类的canHandle;来决定哪些视图名不需要当前ViewResolver进行处理;自己可以得到prefix +&suffix进行判断具体的视图页面是否存在,当然这个可能会存在性能问题;考虑做缓存。
阅读(183)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Spring MVC中多视图解析器解析问题',
blogAbstract:'\r\n1、问题:\r\n假设我有两个jsp:\r\n\r\n\r\nJava代码\r\n\r\nWEB-INF/html/a.jsp&& \r\nWEB-INF/report/b.jsp&\r\n且我配置了视图解析器:\r\n\r\n\r\nJava代码\r\n\r\n&bean&class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\"&p:order=\"1\"&&& \r\n&&&&&property&name=\"viewClass\"',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:4,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Spring3 MVC 怎么配置同时使用多视图_百度知道
Spring3 MVC 怎么配置同时使用多视图
我有更好的答案
&!-- 配置freeMarker视图解析器 --&
&bean id=&viewResolverFtl&
class=&org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver&&
&property name=&viewClass&
value=&org.springframework.web.servlet.view.freemarker.FreeMarkerView& /&
&property name=&contentType& value=&text/ charset=utf-8& /&
&property name=&cache& value=&true& /&
&property name=&suffix& value=&.ftl& /&
&property name=&order& value=&0& /&
&property name=&exposeRequestAttributes& value=&true& /&
&property name=&exposeSessionAttributes& value=&true& /&
&property name=&exposeSpringMacroHelpers& value=&true& /&
class=&org.springframework...
其他类似问题
为您推荐:
spring3的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Spring3.2.3 MVC多视图解析范例 - VC/MFC当前位置:& &&&Spring3.2.3 MVC多视图解析范例Spring3.2.3 MVC多视图解析范例&&网友分享于:&&浏览:0次Spring3.2.3 MVC多视图解析实例
这个架构当中,没有整合进数据库连接及事务管理等的配置,单纯介绍采用ContentNegotiatingViewResolver来做视图解析的一个配置实例,其它的一些配置,相信也难不倒各位亲。源代码实例见附件。 好了,我们接下来将按 项目构建--&配置文件--&后端实现--&前端实现 来讲解。下面先从构建项目开始 采用Gradle做项目构建 这里只描述一些基本的要用到的构建语法,基础的应用是很简单的。 1. 命令行下进入项目的根目录,即build.gradle配置文件所在的目录。 2. 执行命令:gradle eclipse
自动下载build.gradle配置中的依赖包并生成eclipse的环境配置文件如:.project等等。 3. 上步完成后,在eclipse导入现成项目即可。 如果您想进一步了解gradle,可访问博文:/blog/1848990 或访问其官方网站:http://gradle.org
Spring MVC的配置 web.xml:
Dispatcher Servlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/spring-web.xml
Dispatcher Servlet
重点标注url-pattern部分,url的请求匹配,只要是满足的,都会被Spring mvc 适匹器捕获并处理。 mvc的配置 下面只是列出了主要的ContentNegotiatingViewResolver的相关配置:
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"
name="order" value="1"
name="favorParameter" value="false"
name="ignoreAcceptHeader" value="true"
name="defaultContentType" value="application/json"
name="mediaTypes"
key="atom" value="application/atom+xml"
key="html" value="text/html"
key="json" value="application/json"
key="xml" value="application/xml"
name="viewResolvers"
class="org.springframework.web.servlet.view.BeanNameViewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
name="cache" value="true"
name="prefix" value=""
name="suffix" value=".ftl"
name="exposeSpringMacroHelpers" value="true"
name="exposeRequestAttributes" value="true"
name="exposeSessionAttributes" value="true"
name="contentType" value="text/charset=UTF-8"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
name="viewClass"
value="org.springframework.web.servlet.view.JstlView"
name="prefix" value="/WEB-INF/jsp/"
name="suffix" value=".jsp"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
name="prefix" value="/WEB-INF/jsp/"
name="suffix" value=".jsp"
name="defaultViews"
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"
class="org.springframework.web.servlet.view.xml.MarshallingView"
class="org.springframework.oxm.jaxb.Jaxb2Marshaller"
name="packagesToScan"
com.sample.model
默认视图配置为json格式
name="defaultContentType" value="application/json"
这么做是因为现今Ajax技术用得比较多。 查看spring-web.xml配置,里面有较详细的注释。 后端REST注解实现 后端的实现实例详见SimpleController.java
text/html 需要mediaType为text/html 的数据时,采用*.htm的uri请求,如:/do/sample.html请求sample.ftl页面或是sample.jsp页面,因为ftl的视 图解析配置在jsp的视图解析之前,所以会先查找Freemarker的目录,没发现的话,则会继续查找jsp的目录。 application/json 因为默认配置数据格式为json,所以需要josn格式的数据时,uri可 以不加后缀。以下json的请求都是有效的 /do/sample
/do/sample.json
请求处理完成后,直接返回客户端需要的数据对象,spring 会自动调用jackson组件将其转换成json格式。不用加 @ResponseBody注解,是不是更清爽呀。 application/xml 配置采用JAXB做为xml数据的转换组件,只需要在javabean对象的getter方法上加上xml相关注解(详见TestModel.java),在返回该对象及其包装对象时Spring自动转换成xml格式文档。 前端实现 由于我们在web.xml配置文件的url-pattern配置了/do/*. 所以在Controller的注解uri前面需要加上”/do”. 更详细的实现见index.jsp
参考:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-multiple-representations
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有Spring3 MVC 怎么配置同时使用多视图_百度知道
Spring3 MVC 怎么配置同时使用多视图
提问者采纳
&text/true& value=&quot.ftl& value=& charset=utf-8&exposeSpringMacroHelpers&& &lt.
& value=&suffix& value=&quot.property name=&
&lt&!-- 配置freeMarker视图解析器 --&WEB-INF&#47!-- 定义视图前缀格式 --&true&quot.jsp&quot.suffix&
&;exposeSessionAttributes&;;contentType&quot.&#47!-- 解析器的优先级别 --&gt.freemarker.FreeMarkerView& &
&;;property name=& &#47.exposeRequestAttributes&quot.freemarker.property name=& //
value=&0&quot。优先级要不同;&order&& /jsp/property name=&&bean id=& /
&; value=&property name=&property name=&property name=&&gt. value=&property name=&bean&
&1&cache& value=& / &#47.FreeMarkerViewResolver&quot.;property name=&bean&property name=&org.
value=& value=& /
& /property name=&order&quot!-- 定义视图后缀格式 --&
&&property name=&quot.&viewClass&
&lt.view.InternalResourceViewResolver&order&
& /&&html.&&&关键是这个&true&prefix&quot!-- 配置视图层 使用jstl标签 --& / /viewClass&
&lt. /& /bean
class=&quot.JstlView&quot./ value=&
&viewResolverFtl&0&&property name=& value=&quot
来自团队:
其他类似问题
为您推荐:
spring3的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 springmvc4 html视图 的文章

 

随机推荐