Spring MVC 学习笔记 3《3.1 自定义视图》

版权声明:大家好,我是笨笨,笨笨的笨,笨笨的笨,转载请注明出处,谢谢! https://blog.csdn.net/jx520/article/details/89818015

Spring MVC 学习笔记 3《3.1 自定义视图》

添加依赖

/ssm/pom.xml

	。。。
  	<properties>
		<!-- Excel工具包  JDK7最高到3.17 -->
		<poi.version>3.17</poi.version>
	</properties>
	<dependencies>
		<!-- ================================= 自定义视图 ================================= -->
		<!-- poi:用于支持 .xls -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<!-- poi-ooxml:用于支持 .xlsx -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<!-- A Free Java-PDF library -->
        <dependency>  
           <groupId>com.lowagie</groupId>  
           <artifactId>itext</artifactId>  
           <version>2.1.7</version>  
        </dependency>
		<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.1.0</version>
        </dependency>
	</dependencies>
	。。。

SpringMVC 配置自定义视图

/ssm/src/main/resources/spring-mvc.xml

	。。。
	<!-- =========================== 自定义视图 =========================== -->
	<!-- 通过控制器返回字符串解析视图:prefix + 控制器返回的字段串 + suffix 拼接出视图 URL-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
	<!-- 通过视图的名字来解析视图:order 值越小优先级越低。InternalResourceViewResolver的order默认为Integer的最大值 -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="0"></property>
    </bean
	。。。

自定义视图

ExcelView

/ssm/src/main/java/com/jerry/ssm/views/ExcelView.java

package com.jerry.ssm.views;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.servlet.view.document.AbstractXlsxView;
import com.jerry.ssm.entity.Poem;

/**
 * Excel自定义视图。 创建excel文件,用model传进来的数据填充sheet,最后输出流到客户端
 * @author jerry
 */
public class ExcelView extends AbstractXlsxView {

	@SuppressWarnings("unchecked")
	@Override
	protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		String fileName = new String("poem.xlsx".getBytes(), "iso8859-1");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/ms-excel");
		response.setHeader("Content-Disposition", "inline; filename=" + fileName);

		OutputStream outputStream = response.getOutputStream();

		List<Poem> list = (List<Poem>) model.get("poemList");

		// 产生Excel表头
		Sheet sheet = workbook.createSheet("诗词");
		Row header = sheet.createRow(0);
		// 产生标题列
		header.createCell(0).setCellValue("ID");
		header.createCell(1).setCellValue("标题");
		header.createCell(2).setCellValue("作者");
		header.createCell(3).setCellValue("内容");
		CellStyle cellStyle = workbook.createCellStyle();
		cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy"));
		int rowNumber = 1;
		for (Poem poem : list) {
			Row row = sheet.createRow(rowNumber++);
			// 写入数据行
			row.createCell(0).setCellValue(poem.getId());
			row.createCell(1).setCellValue(poem.getTitle());
			row.createCell(2).setCellValue(poem.getAuthor());
			row.createCell(3).setCellValue(poem.getContent());
		}
		workbook.write(outputStream);
		outputStream.flush();
		outputStream.close();
	}
}

PDFView

/ssm/src/main/java/com/jerry/ssm/views/PDFView.java

package com.jerry.ssm.views;

import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.document.AbstractPdfView;
import com.jerry.ssm.entity.Poem;
import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

public class PDFView extends AbstractPdfView {

	@SuppressWarnings("unchecked")
	@Override
	protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
			HttpServletRequest request, HttpServletResponse response) throws Exception {

		String fileName = new String("poem.pdf".getBytes(), "iso8859-1");

		// 设置response方式,使执行此controller时候自动出现下载页面,而非直接使用excel打开
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

		List<Poem> list = (List<Poem>) model.get("poemList");

		BaseFont bfChinese = BaseFont.createFont("C://Windows//Fonts//msyh.ttf", BaseFont.IDENTITY_H,
				BaseFont.NOT_EMBEDDED);
		com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 12, com.lowagie.text.Font.NORMAL);

		for (Poem poem : list) {
			String str = "ID: " + poem.getId() 
			+ "标题: " + poem.getTitle() 
			+ "作者: " + poem.getAuthor() 
			+ "正文: " + poem.getContent();
			document.add(new Paragraph(str, FontChinese));
		}
	}
}

控制器

/ssm/src/main/java/com/jerry/ssm/controller/PoemController.java

package com.jerry.ssm.controller;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.jerry.ssm.entity.Poem;
import com.jerry.ssm.service.IPoemService;
import com.jerry.ssm.views.ExcelView;
import com.jerry.ssm.views.PDFView;

@Controller
@Scope("prototype")
public class PoemController {
	@Resource
	private IPoemService poemService;
	。。。
	/**
	 * 下载 excel
	 * http://localhost/excel
	 */
	@RequestMapping(value = "/excel")
    public ModelAndView viewExcel() {
        Map<String, Object> model = new HashMap<>();
        model.put("poemList", poemService.getAll());
        return new ModelAndView(new ExcelView(), model);
    }
	
	/**
	 * 下载 pdf
	 * http://localhost/pdf
	 */
	@RequestMapping(value = "/pdf")
	public ModelAndView viewPDF() {
		Map<String, Object> model = new HashMap<>();
		model.put("poemList", poemService.getAll());
		return new ModelAndView(new PDFView(), model);
	}
}

猜你喜欢

转载自blog.csdn.net/jx520/article/details/89818015