- 浏览: 285975 次
- 性别:
- 来自: 上海
最新评论
-
javatozhang:
风间苍月 写道wddgfzs 写道使用JSR-303 Vali ...
Spring MVC 学习笔记 十 使用jsr 303进行校验 -
Fron:
...
Spring MVC 学习笔记 五 controller与requestmapping -
dwangel:
freemailfjgh 写道请问怎么才能获取dispatch ...
ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别 -
di1984HIT:
学习了~~
Spring MVC 学习笔记 八 文件上传 -
di1984HIT:
学习了~~
Spring MVC 学习笔记 九 json格式的输入和输出
Spring mvc 中对于输出格式为pdf和xsl的view,提供了两个abstract的view类供继承分别为AbstractPdfView和AbstractExcelView。
Pdf格式输出
对于pdf格式的输出,spring 缺省提供的模板类为AbstractPdfView,并利用iText来实现pdf的输出。但此类只支持iText 2.x的版本,而目前iText最新的版本是5.x,为支持最新版本的iText类库,需要根据AbstractPdfView的内容依样画葫芦自己实现一个PdfView模板类。
修改pom.xml,增加对iText 5 的类库引用。
继承AbstractIText5PdfView ,实现自己的pdf输出实现类
修改MultiAction controll类,增加对pdf输出的handler method测试代码
这里我们将使用ResourceBundleViewResolver来作为pdf view的ViewResolver,修改servlet context xml配置文件如下
表示spring mvc将在classpath根目录下查找名为views.properties的配置文件来根据view name匹配对应的view实现类。
views.properties中的配置如下
helloPDF.(class)=net.zhepu.web.view.Pdfview
其中helloPDF与之前handler method返回的viewName相匹配,(class)表示此行配置是要将viewName和view实现类关联。
最后访问url http://localhost:8080/springmvc/pdf 以查看输出的pdf文件
Excel格式输出
Spring mvc利用POI或jExcel来实现对excel输出的支持,如果使用POI需要继承AbstractExcelView类,如果使用jExcel则需要继承AbstractJExcelView类。这里以POI为例。
首先修改pom.xml,增加对POI的引用。
再增加一个继承自AbstractExcelView的实现类,来实际输出excel
修改MultiAction controll类,增加对excel输出的handler method测试代码
同样可以使用ResourceBundleViewResolver来实现view name和view class的关联,但这里我们使用XmlViewResolver来实现。
修改servlet context xml配置文件,增加如下配置
以上配置表示XmlViewResolver将在views.xml中查找viewname和view class的对应关系。Views.xml配置文件实际上就是一个标准的spring bean的配置文件。内容如下
这样将bean name “excel”与view实现类相关联。
最后访问url http://localhost:8080/springmvc/excel 查看excel输出内容。
使用XmlViewResolver 和ResourceBundleViewResolver可能存在的问题
使用XmlViewReslover和ResourceBundleViewResolver后,访问sample工程的首页面helloWorld会发现页面出现报错信息 Bean named 'helloworld' must be of type [org.springframework.web.servlet.View], but was actually of type [net.zhepu.web.Helloworld]
,原因是这两个viewResolver本质上都是在配置文件中定义一个spring bean,并将bean name 和view name相关联来实现view mapping。因此实际上只要context中存在对应名字的bean name,spring 就可以根据相应的viewName找到匹配的view bean来生成视图。而这也导致类似如下的配置出现问题。
对应的controller代码如下
此时访问/helloworld原意是要返回对应/WEB-INF/helloworld.jsp,
但spring mvc在解析viewname时,根据配置文件中的order顺序,先找到ResourceBundleViewResolver来解析viewname,且发现此时context中存在bean name 为 helloWorld的bean,就试图使用helloWorld这个bean来解析view,因此出现了上述的报错。
因此在使用ResourceBundleViewResolver或XmlViewResolver时需要注意返回的viewname不要和当前工程中已经定义的beanName存在冲突。
Pdf格式输出
对于pdf格式的输出,spring 缺省提供的模板类为AbstractPdfView,并利用iText来实现pdf的输出。但此类只支持iText 2.x的版本,而目前iText最新的版本是5.x,为支持最新版本的iText类库,需要根据AbstractPdfView的内容依样画葫芦自己实现一个PdfView模板类。
public abstract class AbstractIText5PdfView extends AbstractView { public AbstractIText5PdfView() { setContentType("application/pdf"); } @Override protected boolean generatesDownloadContent() { return true; } @Override protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { ByteArrayOutputStream baos = createTemporaryOutputStream(); Document document = newDocument(); PdfWriter writer = newWriter(document, baos); prepareWriter(model, writer, request); buildPdfMetadata(model, document, request); document.open(); buildPdfDocument(model, document, writer, request, response); document.close(); writeToResponse(response, baos); } protected Document newDocument() { return new Document(PageSize.A4); } protected PdfWriter newWriter(Document document, OutputStream os) throws DocumentException { return PdfWriter.getInstance(document, os); } protected void prepareWriter(Map<String, Object> model, PdfWriter writer, HttpServletRequest request) throws DocumentException { writer.setViewerPreferences(getViewerPreferences()); } protected int getViewerPreferences() { return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage; } protected void buildPdfMetadata(Map<String, Object> model, Document document, HttpServletRequest request) { } protected abstract void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception; }
修改pom.xml,增加对iText 5 的类库引用。
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.1.0</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.1.0</version> </dependency>
继承AbstractIText5PdfView ,实现自己的pdf输出实现类
public class Pdfview extends AbstractIText5PdfView { @Override protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception { Paragraph header = new Paragraph(new Chunk("PDF 输出测试", getChineseFont(24))); document.add(header); document.add(new Paragraph("测试",getChineseFont(12))); } private static final Font getChineseFont(float size) { Font FontChinese = null; try { BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); FontChinese = new Font(bfChinese, size, Font.NORMAL); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } return FontChinese; } }
修改MultiAction controll类,增加对pdf输出的handler method测试代码
@RequestMapping("/pdf") public String helloPDF(){ return "helloPDF"; }
这里我们将使用ResourceBundleViewResolver来作为pdf view的ViewResolver,修改servlet context xml配置文件如下
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver" p:basename="views" p:order="2" />
表示spring mvc将在classpath根目录下查找名为views.properties的配置文件来根据view name匹配对应的view实现类。
views.properties中的配置如下
helloPDF.(class)=net.zhepu.web.view.Pdfview
其中helloPDF与之前handler method返回的viewName相匹配,(class)表示此行配置是要将viewName和view实现类关联。
最后访问url http://localhost:8080/springmvc/pdf 以查看输出的pdf文件
Excel格式输出
Spring mvc利用POI或jExcel来实现对excel输出的支持,如果使用POI需要继承AbstractExcelView类,如果使用jExcel则需要继承AbstractJExcelView类。这里以POI为例。
首先修改pom.xml,增加对POI的引用。
<!-- excel export support --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.7</version> </dependency> <!-- excel export support -->
再增加一个继承自AbstractExcelView的实现类,来实际输出excel
protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { HSSFSheet sheet; HSSFCell cell; sheet = workbook.createSheet("Spring"); sheet.setDefaultColumnWidth((short) 12); // write a text at A1 cell = getCell(sheet, 0, 0); setText(cell, "Spring-Excel 测试"); }
修改MultiAction controll类,增加对excel输出的handler method测试代码
@RequestMapping("/excel") public String helloExcel(){ return "excel"; }
同样可以使用ResourceBundleViewResolver来实现view name和view class的关联,但这里我们使用XmlViewResolver来实现。
修改servlet context xml配置文件,增加如下配置
<!-- excel output setting using XmlViewResolver --> <bean id="excelViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver"> <property name="order" value="3" /> <property name="location" value="classpath:views.xml" /> </bean>
以上配置表示XmlViewResolver将在views.xml中查找viewname和view class的对应关系。Views.xml配置文件实际上就是一个标准的spring bean的配置文件。内容如下
<bean name="excel" class="net.zhepu.web.view.ExcelView" />
这样将bean name “excel”与view实现类相关联。
最后访问url http://localhost:8080/springmvc/excel 查看excel输出内容。
使用XmlViewResolver 和ResourceBundleViewResolver可能存在的问题
使用XmlViewReslover和ResourceBundleViewResolver后,访问sample工程的首页面helloWorld会发现页面出现报错信息 Bean named 'helloworld' must be of type [org.springframework.web.servlet.View], but was actually of type [net.zhepu.web.Helloworld]
,原因是这两个viewResolver本质上都是在配置文件中定义一个spring bean,并将bean name 和view name相关联来实现view mapping。因此实际上只要context中存在对应名字的bean name,spring 就可以根据相应的viewName找到匹配的view bean来生成视图。而这也导致类似如下的配置出现问题。
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver" p:basename="views" p:order="1" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
对应的controller代码如下
@Controller("controllerHelloWorld") @RequestMapping("/helloworld") public class Helloworld { @RequestMapping(method=RequestMethod.GET) public ModelAndView hello() { ModelAndView mv = new ModelAndView(); mv.setViewName("helloworld"); return mv; } }
此时访问/helloworld原意是要返回对应/WEB-INF/helloworld.jsp,
但spring mvc在解析viewname时,根据配置文件中的order顺序,先找到ResourceBundleViewResolver来解析viewname,且发现此时context中存在bean name 为 helloWorld的bean,就试图使用helloWorld这个bean来解析view,因此出现了上述的报错。
因此在使用ResourceBundleViewResolver或XmlViewResolver时需要注意返回的viewname不要和当前工程中已经定义的beanName存在冲突。
- springmvcPdfExcel.rar (90.5 KB)
- 下载次数: 415
发表评论
-
ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
2011-06-27 23:27 14677spring通过在web.xml 中配置ContextLo ... -
Spring MVC 学习笔记 十五 what's new in spring mvc 3.1
2011-06-20 23:26 305191:mvc annotation-driven 新增标签 以下 ... -
Spring MVC 学习笔记 十四 对locale和theme的支持
2011-06-10 22:31 14437Locale Spring MVC缺省使用AcceptHead ... -
Spring MVC 学习笔记 十三 xml格式输入输出
2011-06-10 22:31 21361Xml格式输入 Spring mvc ... -
Spring MVC 学习笔记 十一 data binding
2011-06-07 21:23 16539Servlet中的输入参数为都是string类型,而sprin ... -
Spring MVC 学习笔记 十 使用jsr 303进行校验
2011-06-02 21:05 20181Spring MVC在使用了<mvc:annotatio ... -
Spring MVC 学习笔记 九 json格式的输入和输出
2011-06-01 20:01 33772Spring mvc处理json需要使用jackson的类库, ... -
Spring MVC 学习笔记 八 文件上传
2011-06-01 19:59 4008Spring mvc使用jakarta的commons fil ... -
Spring MVC 学习笔记 七 controller中其他可用的annotation
2011-05-31 22:25 8690@InitBinder 在controller中注册一个c ... -
Spring MVC 学习笔记 六 Handler Method的可用参数
2011-05-31 22:24 12170使用@requesMapping标注的处理函数包括的可选 ... -
Spring MVC 学习笔记 五 controller与requestmapping
2011-05-29 22:04 36537使用@controller定义controllersSprin ... -
Spring MVC 学习笔记 四 Viewresol和View
2011-05-29 20:34 10523Spring MVC使用ViewResolver来根据c ... -
Spring MVC 学习笔记 三 handlerMapping和handlerAdapter
2011-05-27 23:30 36072HandlerMapping Spring mvc 使用Han ... -
Spring MVC 学习笔记 二 spring mvc Schema-based configuration
2011-05-25 22:32 8069Spring mvc 目前支持5个tag,分别是 mvc:an ... -
Spring MVC 学习笔记 一 创建项目
2011-05-25 00:11 80411:新建maven 工程 运行以下maven命令,建立一个je ...
相关推荐
spring mvc学习笔记spring mvc学习笔记spring mvc学习笔记spring mvc学习笔记spring mvc学习笔记
传智播客 Spring MVC 学习笔记
Spring.MVC学习指南.pdf。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
通俗移动的Spring MVC入门书籍。请尊重版权,禁止用于商业目的。
springcloud学习笔记.pdf
Spring Cloud 学习入门笔记,全方面实践,包含 spring cloud alibaba 模块
全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...
精通Spring MVC 4 文字版 pdf 清晰 完整精通Spring MVC 4 文字版 pdf 清晰 完整精通Spring MVC 4 文字版 pdf 清晰 完整精通Spring MVC 4 文字版 pdf 清晰 完整
Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF
spring mvc的学习笔记,主要讲解了基于xml的配置,和如何增加spring mvc拦截器,如何返回json报文
spring-javaconfig-sample, Spring MVC/Spring Data JPA/Hibernate的spring JavaConfig示例 spring-配置示例自 spring 3.0以来,JavaConfig特性被包含在核心 spring 模块中。 因此Java开发人员可以将 spring bean...
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...
IT学习者Spring MVC注解实例.pdf
工程文件 博文链接:https://starscream.iteye.com/blog/1067606
Spring3 MVC 学习笔记 入门 Spring3 MVC 学习笔记 入门
spring mvc 基础笔记 源代码. 下载后倒入到eclipse当中。 请重新倒入Tomcat安装目录lib文件夹下的servlet-api.jar. 如果是jQuery.js文件有红色叉表示错误的话请无视。