spring mvc基础篇(七):Excel视图技术

来源:互联网 发布:傲剑肉身升级数据大全 编辑:程序博客网 时间:2024/05/22 06:46

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><ahref="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>

    <beanid="rbViewResolver"class="org.springframework.web

.servlet.view.ResourceBundleViewResolver">

       <propertyname="basename"value="excelConfig"></property>

       <propertyname="order"value="2"></property>

    </bean>

    <beanid="simpleUrlMapping"class="org.springframework.web

.servlet.handler.SimpleUrlHandlerMapping">

       <propertyname="mappings">

           <props>

              <propkey="/ShowExcel.do">exCtrl</prop>

           </props>

       </property>

    </bean>

    <beanid="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行,注意老版本poiExcel的行数列数有限制

       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 进行测试,得到结果: