JSP和Servlet中的输入输出流

一、servlet response实现了HttpServletResponse接口,request实现了HttpServletRequest接口。 1、输出流有两个: 字节形式输出:response.getOutputStream() 字符形式输出:response.getWriter() 2、输入流有两个: 字节形式输入:request.getInputStream() 字符形式输入:request.getReader() 二、JSP JSP中的response对象已经实现了HttpServletResponse接口,request对象已经实现了HttpServletRequest接口。 1、输出流 jsp中可以使用response.getWriter()方法建立字符输出流来输出字符数据到网页上。 因为jsp转译成servlet时,当有输出就会使用getWriter(). 它是javax.servlet.jsp.JspWriter类型(extends java.io.Writer). 而getOutputStream(). 它是javax.servlet.ServletOutputStream类型(extends java.io.OutputStream). 而对客户端的输出只能使用一种类别输出. 当它在jsp里使用了getOutputStream(). 就会产生了两种类别输出,所以就会形成冲突.program根本不知道你要使用那一个作为输出. 一般在下载档案时都要使用getOutputStream().对客户端串流输出. 使用jsp作为下载档案时, 在jsp档案里,不能有任何的输出. 包括空格或out.println("xxx"); 因为会使用了jspWriter(). 2、输入流 jsp中好像没有自动实现输入流的对象,所以可以使用request.getInputStream(),request.getReader()方法建立输入流。 3、读写服务器上的文件 file.Reader()和file.Writer()方法可以用来读写服务器上任何位置的文件。 application(ServletContext).getResourceAsStream()方法可以读取servlet上下文中的文件。 PrintWriter out = response.getWriter(); 如果你打算返回一个文本型的(text/*)页面,不论是HTML还是纯文本,通常都需要调用response.getWriter()方法。然而该方法必须在charset被设置之后调用,为什么呢?因为Writer必须知道如何将Java内部的Unicode字符转换成字节流。假如你选择了GBK,一个汉字将被输出成两个字节的编码;假如你选择了UTF-8,一个汉字将被输出成三个字节的编码。 如果你打算返回一个二进制型的内容,例如:图片,那么你必须调用response.getOutputStream()方法。 OutputStream out = response.getOutputStream(); 需要注意的是,你只能在getWriter()和getOutputStream()中选择一个。一旦其中一个方法被调用了,再调用其它一个方法时,系统会抛出异常。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验报告:实验十一 - 文件上传与下载、Excel表格的导入导出、页面分页 实验目的: 本实验旨在通过使用JSPServlet技术,探索文件上传与下载的功能实现、Excel表格的导入导出方法,以及页面分页的实现思路。通过本实验,我们可以加深对这些功能的理解,并且为后续基于JSPServlet的项目开发提供基础支持。 一、文件上传与下载的实现思路: 1. 文件上传: a. 在JSP页面上,使用HTML表单元素创建一个文件上传表单。 b. 用户选择要上传的文件,并点击提交按钮。 c. 在Servlet处理表单提交的请求。 d. 使用Apache Commons FileUpload库解析上传的文件,并保存到指定路径。 ```java // 从request获取文件上传信息 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); // 处理每个文件项 for (FileItem item : items) { if (!item.isFormField()) { // 获取文件名和保存路径 String fileName = item.getName(); String filePath = "/path/to/save/" + fileName; // 保存文件到指定路径 item.write(new File(filePath)); } } ``` 2. 文件下载: a. 在JSP页面上,创建一个下载链接或按钮,指向Servlet。 b. 在Servlet处理下载请求,设置响应头部信息。 c. 读取要下载的文件,并将其作为响应的内容返回给客户端。 ```java // 设置响应头部信息 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"filename.ext\""); // 读取要下载的文件 File file = new File("/path/to/file"); // 将文件内容写入响应输出 try (InputStream inputStream = new FileInputStream(file); OutputStream outputStream = response.getOutputStream()) { byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } ``` 二、Excel表格的导入导出方法: 1. Excel表格导入: a. 在JSP页面上,使用HTML表单元素创建一个文件上传表单。 b. 用户选择要上传的Excel文件,并点击提交按钮。 c. 在Servlet处理表单提交的请求。 d. 使用Apache POI库解析上传的Excel文件,并提取数据进行处理。 ```java // 从request获取文件上传信息 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); // 处理每个文件项 for (FileItem item : items) { if (!item.isFormField()) { // 获取文件名和输入 String fileName = item.getName(); InputStream inputStream = item.getInputStream(); // 使用Apache POI解析Excel文件 Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); // 遍历行和列,处理Excel数据 for (Row row : sheet) { for (Cell cell : row) { // 处理单元格数据 } } } } ``` 2. Excel表格导出: a. 在Servlet处理导出请求,准备要导出的数据。 b. 使用Apache POI库创建一个新的Excel工作簿,并创建工作表。 c. 遍历数据,将其写入Excel工作表。 d. 将Excel工作簿保存到文件,并将其作为响应的内容返回给客户端。 ```java // 创建新的Excel工作簿和工作表 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 遍历数据,将其写入工作表 int rowNum = 0; for (Object[] rowData : data) { Row row = sheet.createRow(rowNum++); int colNum = 0; for (Object field : rowData) { Cell cell = row.createCell(colNum++); if (field instanceof String) { cell.setCellValue((String) field); } else if (field instanceof Integer) { cell.setCellValue((Integer) field); } } } // 将工作簿保存到文件 try (OutputStream outputStream = new FileOutputStream("/path/to/file")) { workbook.write(outputStream); } ``` 三、页面分页的实现思路: 1. 在JSP页面上,显示需要进行分页的数据列表。 2. 在Servlet处理分页请求,根据当前页码和每页显示的数据条数,从数据库或其他数据源获取对应页的数据。 3. 将获取到的数据保存在请求属性,并转发到JSP页面。 4. 在JSP页面上,根据请求属性的数据,显示当前页的数据列表。 5. 在JSP页面上,显示分页导航条,包含页码和跳转功能。 6. 当用户点击页码或跳转输入框时,触发相应的事件,将新的页码作为参数发送给Servlet。 7. 重复步骤2-6,实现页面切换和数据更新。 总结: 通过本次实验,我们成功使用JSPServlet技术实现了文件上传与下载的功能,掌握了Excel表格的导入导出方法,并了解了页面分页的实现思路。这些功能在实际的Web项目开发具有重要的作用,能够提高用户体验和数据处理效率。在实现过程,我们深入理解了JSPServlet的工作原理,并熟练运用相关的库和API,为进一步的基于JSPServlet的开发工作打下了基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值