spring mvc基础篇(七):Excel视图技术
7.1简介
通常像spring mvc 这样的web框架都会支持多种视图技术(JSP,Excel, FreeMarker等),spring提供了视图解析器来解析ModelAndView模型数据到特定的视图上,spring提供了ViewResolver和View两个特别重要的接口,ViewResolver提供了从视图名称到实际视图的映射,View处理请求的准备的工作,并将该请求提交给某种具体的视图解析器。
7.2 开发环境
开发工具:myeclipse8.6.1
数据库:mysql5.5.23
服务器: tomcat6.0.37
框架版本: spring3.2.2
7.3 案例开发步骤
案例说明:生成一张员工信息表。
步骤一:在myeclipse8.6中新建web工程springmvc07,拷贝如下包到lib目下:
步骤二:编写web.xml 配置文件,代码如下:
=================================web.xml========================
<?xmlversion="1.0" encoding="UTF-8"?>
<web-appversion="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">
<!-- 配置spring的字符集过滤 -->
<filter>
<filter-name>encode</filter-name>
<filter-class>org.springframework.web.filter
.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
================================================================
步骤三:建立index.jsp,如下所示:
=========================index.jsp==============================
<body>
<h1><a href="ShowExcel.do">得到excel</a></h1>
</body>
=====================================================================
步骤四:在com.wx.controls包下面编写控制器ExcelControl.java,如下:
==========================ExcelControl.java==========================
public class ExcelControlextends AbstractController {
protected ModelAndView handleRequestInternal(HttpServletRequestrequest,
HttpServletResponseresponse) {
Map<String,Object> map = new HashMap<String,Object>();
//可以由map对象传递一个值到excel的生成类
map.put("msg", "传递过来的对象");
return new ModelAndView("excel", map);
}
}
==================================================================
步骤五:在核心配置文件springmvc-servlet.xml里面完善如下配置
======================== springmvc-servlet.xml=======================
<beans>
<bean id="rbViewResolver" class="org.springframework.web
.servlet.view.ResourceBundleViewResolver">
<property name="basename"value="excelConfig"></property>
<property name="order" value="2"></property>
</bean>
<bean id="simpleUrlMapping" class="org.springframework.web
.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/ShowExcel.do">exCtrl</prop>
</props>
</property>
</bean>
<bean id="exCtrl" class="com.wx.controls.ExcelControl"></bean>
</beans>
====================================================================
知识讲解:ResourceBundleViewResolver视图解析器会在classpath中寻找properties属性文件,根据此bean配置的<propertyname="basename"
value="excelConfig"/>说明寻找的properties文件名为excelConfig.properties。
<propertyname="order" value="2" />说明了此解析器在整个解析链接中的顺序(关于视图解析链后面案例会有讲解)。
步骤六:在src目录下建立属性文件excelConfig.properties,如图所示:
知识讲解:在控制器中返回的视图名称excel——>return newModelAndView("excel", map),所以这里要用
excel.(class)。【excel.(class)=com.wx.other.ExcelViewBuilder】表示由类com.wx.other.ExcelViewBuilder具体去完成excel的生成。
步骤七: 在com.wx.other包下面编写excel生成类ExcelViewBuilder.java,如下:
=====================ExcelViewBuilder.java=========================
public class ExcelViewBuilder extends AbstractExcelView {
/**
* 在该方法里面,我们只需要设置wb对象(代表一个excel文件)的内容即可
*/
protected void buildExcelDocument(Map<String,Object> model,HSSFWorkbook wb,HttpServletRequest req, HttpServletResponse resp)
throws Exception {
//model对象由控制器的map对象传递而来
System.out.println(model.get("msg"));
// 第一步,在wb对象中(已经由spring容器创建)添加一个sheet,对应Excel文件中的 sheet
HSSFSheet sheet = wb.createSheet("测试表格1");
// 第二步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0);
// 第三步,创建单元格样式:居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 第四步,创建表头单元格,并设置样式
HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue("员工工号");
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("员工姓名");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("所属部门");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("职位");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("入职日期");
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellValue("备注");
cell.setCellStyle(style);
// 第五步,写入实体数据,实际应用中这些数据从数据库得到
Date today = new Date();
long aDay = 1000L* 60 * 60 * 24;
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 1; i <= 10; i++) {
row = sheet.createRow(i);
row.createCell(0).setCellValue(i);
row.createCell(1).setCellValue("员工" + i);
row.createCell(2).setCellValue("总公司");
row.createCell(3).setCellValue("普通员工");
row.createCell(4).setCellValue(
fmt.format(new Date(today.getTime() + i * aDay)));
row.createCell(5).setCellValue("员工备注");
}
}
}
==================================================================
步骤八: 启动tomcat,发布项目,在地址栏输入 http://localhost:8080/springmvc07/index.jsp 进行测试,得到结果: