这几天有点懒散,还好没有忘记看书,上周去了国家图书馆翻阅了一些和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. 最常用的MySQL命令语句

    e良师益友网导读:MySQL数据库是应用最广的数据库之一,在MySQL数据库中有各种各样的命令调用语句,在平常工作中非常实用的命令,对于初学者来说,掌握文中的MySQL命令语句,是非常实用的,下面我们 ...

  2. 解决backbone url请求中参数有中文,存入数据库是乱码

    最近项目用到了backbone 做前后端的分离方案,遇见了中文乱码问题,解决方案总结如下: 假设需要存一条课程记录到后台   model定义如下: var AddCourse= Backbone.Mo ...

  3. Mysql MyISAM数据库批量转换表引擎为Innodb

    Mysql MyISAM数据库批量转换表引擎为Innodb 最近在做事物处理需要把表结构都改为带有支持事物的Innodb引擎格式, 把里面数据库 用户名.密码 等信息修改为你自己的,放在网站下运行即可 ...

  4. AngularJS(7)-表格

    ng-repeat 指令可以完美的显示表格. <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. Linux 服务器如何禁止 ping 以及开启 ping

    Linux 默认是允许 ping 响应的,也就是说 ping 是开启的,但 ping 有可能是网络攻击的开始之处,所以关闭 ping 可以提高服务器的安全系数.系统是否允许 ping 由2个因素决定的 ...

  6. PHP连接局域网MYSQL数据库的简单实例

    PHP连接局域网MYSQL数据库的简单实例 [php] view plaincopy <?PHP /** * php连接mysql数据库 * by www.jbxue.com */ $conn= ...

  7. HTMLEncode httpencode UTF8Encode

    1.引用单元:  httpApp; 2. 对于 http Post的提交内容,应该是:   HttpEncode(Utf8Encode(StrValue));   不然与web方式的 Url_enco ...

  8. C# 学习之旅(1)

    第一, 输入输出流都来自控制台. using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  9. Spark Streaming揭秘 Day4-事务一致性(Exactly one)

    Spark Streaming揭秘 Day4 事务一致性Exactly one 引子 对于业务处理系统,事务的一致性非常的关键,事务一致性(Exactly one),简单来说,就是输入数据一定会被处理 ...

  10. 编译andriod源码出错:java.lang.UnsupportedClassVersionError: com/google/doclava/Doclava : Unsupported

    问题:java.lang.UnsupportedClassVersionError: com/google/doclava/Doclava : Unsupported update-java-alte ...