自启动servlet也叫自动实例化servlet

特点

  • 该Servlet的实例化过程不依赖于请求,而依赖于容器的启动,当Tomcat启动时就会实例化该Servlet
  • 普通Servlet是在浏览器第一次向服务器发出请求时才会被创建

如何配置

通过在web.xml中的<servlet>标签中配置<load-on-startup></load-on-startup>自启动Servlet

    <servlet>
<servlet-name>autostart</servlet-name>
<servlet-class>www.servlet.AutoStart</servlet-class>
<!-- 值的大小决定创建的先后顺序-->
<load-on-startup>1</load-on-startup>
</servlet>

通过自启动Servlet实现文件的读取

1)在servlet标签中添加要获取的文件的路径,并设置该Servlet为自启动

    <servlet>
<servlet-name>autostart</servlet-name>
<servlet-class>www.servlet.AutoStart</servlet-class>
<!--添加图片的路径-->
<init-param>
<param-name>path</param-name>
<param-value>image</param-value>
</init-param>
<!-- 值的大小决定创建的先后顺序,该标签必须放到servlet标签的最下面-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>autostart</servlet-name>
<url-pattern>/autostart.do</url-pattern>
</servlet-mapping>

2)在自启动Servlet的init()方法中通过ServletConfig对象获取init-param的name值,并放到全局容器ServletContext中,

这样当Tomcat启动时init方法就会被执行,图片的路径被存放到全局容器中,所有Servlet都能拿到

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class AutoStart extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @Override
public void init() throws ServletException {
//ServletConfig只对当前servlet有效
ServletConfig servletConfig=this.getServletConfig();
String path=servletConfig.getInitParameter("path");
//获取全局容器对象
ServletContext servletContext=this.getServletContext();
//将获取的path放到全局容器ServletContext中,所有servlet都能获取
servletContext.setAttribute("path",path);
System.out.println("AutoStartServlet");
}
}

3)文件下载的Servlet

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*; @WebServlet("/filedown")
public class FileDown extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取ServletContext对象,继承自GenericServlet类
ServletContext servletContext=this.getServletContext();
//获取存放图片的目录名称
String path=(String) servletContext.getAttribute("path");
//将相对路径转换为绝对路径
String realpath=servletContext.getRealPath(path+"/樱花.jpg");
System.out.println(realpath); //读取要下载的文件
// File file=new File("D:\\樱花.jpg");
File file=new File(realpath);
//用字节输入流存储文件
InputStream is= new FileInputStream(file);
//创建字节数组
byte[] buff=new byte[is.available()];
is.read(buff); //在响应添加附加信息
// resp.addHeader("Content-Disposition", "attachment; filename="+file.getName());
//将原来的文件名按照gbk的方式变成字节,再按iso-8859-1编码方式变成新的字符串
resp.addHeader("Content-Disposition","attachment;filename="+
new String(file.getName().getBytes("gbk"),"iso-8859-1")); //产生响应
//创建字节输出流
OutputStream os=resp.getOutputStream();
//响应到客户端
os.write(buff);
//刷新流
os.flush();
//关闭流
os.close();
}
}

自启动Servlet的更多相关文章

  1. pushlet实现服务器端向客户端推送信息

    使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过API主动 ...

  2. Structs1 -配置例子(转)

    转自:(http://blog.csdn.net/xys_777/article/details/7542095) Action, ActionForm, ActionForward ,这三个对象构成 ...

  3. 《Spring3.0就这么简单》

    第一章 认识Spring 1.Spring提供的IOC容器,是Spring大杀器之一.容器将对象之间的依赖关系交给Spring进行控制,采用配制的方式对依赖关系进行描述,由Ioc容器负责依赖类之间的创 ...

  4. activemq学习

    一.特性及优势 1.实现JMS1.1规范,支持J2EE1.4以上2.可运行于任何jvm和大部分web容器(ActiveMQ works great in any JVM)3.支持多种语言客户端(jav ...

  5. 使用Pushlet将消息从服务器端推送到客户端

    使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过API主动 ...

  6. 使用Pushlet来实现服务器端向客户端推送信息

        使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过A ...

  7. 搭建SSM项目框架全过程及思考

    1.前言 之前都是在现有框架下进行写代码或者总是看一些别人的架构,总会眼高手低.于是打算自己完整的走一遍流程,同时把所遇到的问题,思考的问题记下来,供大家参考.由于是工作年限不高,属于新手,不足之处还 ...

  8. ActiveMQ嵌入Tomcat

    在一些项目中,单独开启一个ActiveMQ,对于项目实施来说有时略显繁琐.所以我们将ActiveMQ内嵌到Tomcat,Tomcat启动同时就顺带启动了ActiveMQ.由此我们需要掌握三个个重要的知 ...

  9. servletsza

    servlet本身不能独立运行,需要在一个web应用中运行,而web应用是部署在tomcat上的 所以一个servlet开发需要以下几个步骤: ①创建web应用项目 ②编写servlet代码 ③部署到 ...

随机推荐

  1. ubuntu系统黑屏,只有一个光标

    使用easyBCD删除原ubuntu引导,重建 添加新条目 引导选择900M左右那个选项

  2. 该懂的知识-CPU

    进程也好,线程也好,最后都是转换成CPU指令由CPU执行的,所有的CPU指令都需要执行时间,多一个CP,就能够同时执行很多指令.不论如何模拟,最终CPU指令都必须在某一个内核上执行. CPU的工作是不 ...

  3. 爬虫之Scrapy框架介绍及基础用法

    今日内容概要 爬虫框架之Scrapy 利用该框架爬取博客园 并发编程 今日内容详细 爬虫框架Scrapy 1.什么是框架? 框架类似于房子的结构,框架会提前帮你创建好所有的文件和内部环境 你只需要往对 ...

  4. js实现密码输入框对开启键盘大写锁定的提示(IE浏览器下有自动识别提示则不执行(用IE自带效果即可))

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  5. jq获取不包含某些属性的元素

    最近写项目,有个功能实现checkbox全选,但是被禁用的checkbox不能选中 点击全选后发现禁用checkbox的也被选中了,不符合需求. 但是想了半天,属性选择器都是判断某个属性值的,没有判断 ...

  6. LeetCode-009-回文数

    回文数 题目描述:给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.例如,121 是回文,而 1 ...

  7. JZ-017-树的子结构

    树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目链接: 树的子结构 代码 /** * 标题:树的子结构 * 题目描述 * 输入两棵 ...

  8. 渗透测试之BurpSuite工具的使用介绍(三)

    若希望从更早前了解BurpSuite的介绍,请访问第二篇(渗透测试之BurpSuite工具的使用介绍(二)):https://www.cnblogs.com/zhaoyunxiang/p/160002 ...

  9. mysql命令flush privileges命令

    修改一个用户的密码,命令如下 mysql> update user set password=password('新密码') where user='用户名'; 执行后报错: ERROR 105 ...

  10. table表格的td行利用css显示...

      默认超过指定长度以...显示, 鼠标放到文本上显示全 代码如下 .fh{ max-width:220px; word-wrap:break-word; text-overflow:ellipsis ...