这几天有点懒散,还好没有忘记看书,上周去了国家图书馆翻阅了一些和Java相关的书籍,其实这些书都是自己以前看过或者听过,按理来说,不应该看自己已经看过的书籍,应该找一些最新的书籍去看,但是每次走到书架前,我都忍不住驻留几分钟,然后思考要不要将以前看的书再翻阅下,往往我都是被这种心理所战胜,虽然书是相同的书,人是相同的人,但是时间和地点已经不再,看后的感觉也是不一样,读书千万次,千万次的感觉,千万次的想法,我不知道这种读法会有什么好处。

以前读书,一目十行,对于技术的书籍类,直接看下API看下代码,看下如何实现一个功能,而现在缺失十目一行,而且不停的想,有什么办法去实现,然后去看书中的示例,看的过程中往往回想和其它的有没有重叠的,有没有相似的,有没有让人学习的方法,就拿生命周期来说吧,Servlet的生命周期似乎已经滚瓜烂熟,什么init,什么doPost,Destroy,这是开始的时候,因为书籍上是这么说,而自己也就这么记,,其实对于生命周期这些的流程或者逻辑控制,完全自己可以将这些过程写下,在每一个过程中用printIn打印出来(别忘了加上时间标记),相信这种方法比那个死记硬背来的更爽,更直接。

C#中的IHttpHandler也是用来处理Http请求的,而Java中的Servlet也是可以用来处理Http请求的,是否有相似的关系呢?写好后的Servlet 往往是要进行配置的,很多的时候类似一个拦截器,那么IHttpHandler呢?在使用IHttpHandler的时候?是否是也可以配置,让应用程序决定用哪一个?其实是可以的,只不过配置的不是IHttpHandler而是一个IModule的东西,现在想想虽然不是同一个东西,虽然生命周期不一样,但是能隐约感觉到相同的影子。

再来看看JSP,JSP是Servlet的一种简化,使用JSP只需要完成程序员需要输出到客户端的内容,JSP中的Java脚本如何镶嵌到一个类中,也就是说JSP最终是要被编译为一个Class文件,JSP本质上就是一个Servlet,而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。它们两者的区别如下:

1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.Servlet中没有内置对象,JSP中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

下面给一个例子:Servlet下载文件

http://blog.csdn.net/shaojie519/article/details/7361526

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DownLoadServlet extends HttpServlet { public DownLoadServlet() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//处理请求
//读取要下载的文件
File f = new File("E:/好久不见.mp3");
if(f.exists()){
FileInputStream fis = new FileInputStream(f);
String filename=URLEncoder.encode(f.getName(),"utf-8"); //解决中文文件名下载后乱码的问题
byte[] b = new byte[fis.available()];
fis.read(b);
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition","attachment; filename="+filename+"");
//获取响应报文输出流对象
ServletOutputStream out =response.getOutputStream();
//输出
out.write(b);
out.flush();
out.close();
} } /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
} }

public class DowFileHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// 打开一个下载对话框
context.Response.ContentType = "image/JPEG";
context.Response.AddHeader("Content-Disposition", "attachment:filename=aaa.jpg");
context.Response.WriteFile("脑残片.jpg");
} public bool IsReusable
{
get
{
return false;
}
}
}

Servlet 下载文件的更多相关文章

  1. Servlet下载文件迅雷不支持问题真相之一

    问题描述 最近在做一个下载文件的Servlet,直接使用浏览器的下载功能,完美支持,结果测试人员使用迅雷下载,就不行了,下载也能成功完成,只是迅雷下载的文件大小是悲催的0KB 真相搜罗 网上有很多帖子 ...

  2. Servlet下载文件和http响应

    下载文件等: 1.得到公共的内容ServletContext sc = this.getServletContext(); 2.在链接名字后面加个? 一个参数?参数1=值 两个参数?参数1=值& ...

  3. Servlet 下载文件及支持中文文件名

    Sevlet 下载pdf文件 支持中文文件名 package html2pdf.controller; import java.io.File; import java.io.FileInputStr ...

  4. servlet下载文件

    package myjava.cn; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS ...

  5. web下载文件夹

    1.文件下载有两种方式:一种是超链接,一种是Servlet提供下载. 2.超链接下载时:当文件可以在网页直接打开时,会直接打开文件,而不是下载,当文件打开不了时,会提供下载窗口. 3.超链接下载原理 ...

  6. Servlet实现文件,图片等的下载 含代码

    实现文件的下载源代码如下: package com.fxl.servlet; import java.io.FileInputStream;import java.io.IOException;imp ...

  7. Servlet实现文件的下载

    (1)项目的主文件夹例如以下:(演示出image和servlet的位置所在) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc= ...

  8. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

    参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

  9. Servlet 上传下载文件

    上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...

随机推荐

  1. 【转】TCP的SEQ和ACK的生成

    TCP序列号和确认号详解 完整的PDF下载: 在网络分析中,读懂TCP序列号和确认号在的变化趋势,可以帮助我们学习TCP协议以及排查通讯故障,如通过查看序列号和确认号可以确定数据传输是否乱序.但我在查 ...

  2. Android Studio生成APK自动追加版本号

    转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/android-apk-studio-generated-automatically-appends-a-ve ...

  3. js 的数据类型转换

    一直对js的类型转换一直半解,今天理一下思路,首先说一下几个特殊的数值 null null是特殊的object,故 typeof null 返回object, null派生于undefined ,故 ...

  4. CSS制作图片水平垂直居中 亲测推荐

    空白标签实现图片的垂直居中 这种方法很有意思,也很有独特之处,我的思路也是来自于张鑫旭-鑫空间-鑫生活写的<大小不固定的图片.多行文字的水平垂直居中>一文中的使用空白图片实现垂直对齐.他主 ...

  5. phpcms v9 源码解析- 2 base.php

    base.php在上文已经说过,是在PC中重要的一个文件,基本常量.核心类文件的加载都由它来完成. 9行,定义了一个常量 IN_PHPCMS,在系统的入口定义一个常量,在其他文件就判断是否这个常量被定 ...

  6. delphi 仅带下划线的TEdit控件

    在做录入框的时候,很希望有一个只带下划线的文本框,网上介绍的很多,有自己做组件的,须不知Delphi下只需要简单设置几个属性即可达到目的.

  7. XE5 ANDROID平台 调用 webservice

    服务端需要midas.dll   XE5对android的平台支持很有吸引力,虽然目前用来直接开发应用到安卓市场卖赚钱可能性估计不大(安卓市场目前国内好像都是免费的天下),但是对于企业应用很是很有帮助 ...

  8. 正则表达式模块re

    正则表达式通过特定的式子匹配某种类型的字符串.对字符串进行匹配验证或者从大量的字符串里提取出特定的信息. 正则表达式包含普通字符和特殊字符.大部分的普通字符如‘A’或‘0’可以简单的来匹配自己.如te ...

  9. 拓展,Fibonacci螺旋

    #该程序由023递归这课中的fibonacci数列递归写法修改而成 #在写的过程中发现,如果要正确引导用户的每一次输入,写的代码比主程序还要多 #当然,为了使程序在用户交互过程中显得更加友好,提供错误 ...

  10. DataSet数据导出为Excel文档(每个DataTable为一个Sheet)

    Web项目中,很多时候须要实现将查询的数据集导出为Excel文档的功能,很多时候不希望在工程中添加对Office组件相关的DLL的引用,甚至有时候受到Office不同版本的影响,导致在不同的服务器上部 ...