servlet学习总结(二)—图片下载和读取属性文件

来源:互联网 发布:软件开发环境 编辑:程序博客网 时间:2024/04/26 11:12


   引言


   在上一篇博客中给大家介绍了一些servlet中的学习收获,在这篇博客中接着给大家分享servlet中图片的下载


属性文件的读取。


   先看一下整个demo的目录结构;


                       

   1、图片的下载


  

package com.itheima.sc;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//实现中文文件的下载public class ServletContextDemo6 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//文件在哪儿?以不变应万变ServletContext sc = getServletContext();String realPath = sc.getRealPath("/WEB-INF/classes/美女.jpg");//  文件存放的真实绝对路径//System.out.println(realPath);//构建文件的输入流InputStream in = new FileInputStream(realPath);//告知客户端以下载的方式打开:Content-Disposition=attachment;filename=27.jpg//获取要下载的文件名String filename  = realPath.substring(realPath.lastIndexOf(File.separator)+1);response.setHeader("Content-Type", "application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));//中文属于不安全的字符,需要进行URL编码//用response的字节流进行输出OutputStream out = response.getOutputStream();int len = -1;byte b[] = new byte[1024];while((len=in.read(b))!=-1){out.write(b, 0, len);}in.close();out.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

   上面的demo就是在browser中以下载的方式获取图片,仅仅是供学习和研究用,在实际的项目中一般是不会用这


个原生的servlet来实现文件的下载和上传的。


   2、servlet读取属性文件


   在这给大家提供三种读取属性文件的方式,代码如下:


   

public class servletContextDemo07 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {test10(request, response);}// 请不要把Tomcat等服务器装在有空格的目录中// 类加载器读取:只能读取classes或者类路径中的任意资源。但是不适合读取特别大的资源。b cprivate void test31(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ClassLoader cl = servletContextDemo07.class.getClassLoader();// 得到类加载器URL url = cl.getResource("com/itheima/resources/c.properties");String path = url.getPath();InputStream in = new FileInputStream(path);Properties props = new Properties();props.load(in);System.out.println(props.getProperty("hello"));}// 类加载器读取:只能读取classes或者类路径中的任意资源。但是不适合读取特别大的资源。b cprivate void test30(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ClassLoader cl = servletContextDemo07.class.getClassLoader();// 得到类加载器// InputStream in = cl.getResourceAsStream("b.properties");InputStream in = cl.getResourceAsStream("com/itheima/resources/c.properties");Properties props = new Properties();props.load(in);System.out.println(props.getProperty("hello"));}// 利用ResourceBundle读取:b c ,不能读a,只能读取properties的文件private void test20(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// ResourceBundle rb = ResourceBundle.getBundle("b");ResourceBundle rb = ResourceBundle.getBundle("com.itheima.resources.c");System.out.println(rb.getString("hello"));}// 利用ServletContext读取:a b c// 可以读取应用中任何位置上的资源。使用限制:只能在web应用中用private void test10(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// String path = getServletContext().getRealPath("/a.properties");// String path =// getServletContext().getRealPath("/WEB-INF/classes/b.properties");String path = getServletContext().getRealPath("/WEB-INF/classes/com/itheima/resources/c.properties");InputStream in = new FileInputStream(path);Properties props = new Properties();props.load(in);System.out.println(props.getProperty("hello"));}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

   遇到的错误


     


   解决方案;


   右击项目——》properties——》java Build path ——》右侧选择Libraries——》选择JRE System Libray


然后点击 edit 将jdk换成1.6版本


   



       

                   

 在项目中读取properties文件还是比较常见的,一些基本配置信息都是配置在这个属性文件中,上面提供了三种读


取方式供大家参考,读取方式还有很多中,大家可以去网上查询,然后对比一下根据自己的需求选择读取方式。


   小结


   上面是在学习servlet中的一些常用功能的总结,通过这两篇博客对servlet又进行了一次总结,这次比第一次


接触servlet的时候更多了了解了一些内部的原理机制,这样看一些封装的东西会容易一些。


0 0