简单介绍一下servlet是什么:1:Servlet是sun公司提供的一门用于开发动态web资源的技术

              2:我们若想用发一个动态web资源,需要完成以下2个步骤:

             第一步:1、编写一个Java类,实现servlet接口。
             第二步:2、把开发好的Java类部署到web服务器中。
              按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet

             //结合自身和其他大佬的思想

  servlet的生命周期:servlet的生命周期分为五步:第一步:加载类 

                            第二步:实例化(给类分配空间)

                         第三步:初始化(为对象赋值)

                         第四步:请求处理

                         第五步:销毁

1:准备工作:

   创建一个web项目:

      导入servlet依赖:

 <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>

      配置tomcat环境:

          tomcat从http://tomcat.apache.org/下载直接解压即可

          然后到idea里面配置tomcat环境可参考:https://blog.csdn.net/Grsu_M/article/details/109175915来配置

 

      开始我们的第一个servlet程序:

      1:先创建一个类来继承 HttpServlet

      然后重写doGet方法和doPost方法:

public class HelloServlet  extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.print("Hello Servlet");
} @Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

  2:然后到web.xml文件里面写出我们的配置信息:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<!-- name可以随意 class里面接类名 -->
<servlet-name>path</servlet-name>
<servlet-class>com.kuang.File.HelloServlet</servlet-class>
</servlet>
<!-- 这里的name要和上面的相互对应 pattern是路径 -->
<servlet-mapping>
<servlet-name>path</servlet-name>
<url-pattern>/path</url-pattern>
</servlet-mapping>
</web-app>

 3:开启tomcat 等待加载完成

    然后打开浏览器搜索:http://localhost:8080/servletDay2_war/path

    分析一下:

        1:localhost是本机名称

        2:8080是端口号

        3:severletDay2_war是tomcat配置的路径

        4:path是web.xml里面配置的文件

        这样我们的第一个servlet程序就运行成功了

    下面我们来实现怎么样用servlet来创建一个下载文件:

                            1:和之前一样创造web项目 导入依赖 配置tomcat(如果是新项目 那么tomcat里面的配置也需要改变)

                            2:创建一个FileServlet来继承HttpServlet来重写doGet方法和doPost方法:

public class FileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

     然后来由代码介绍怎么实现:

public class FileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //把图片路径写死
String path="C:\\Users\\杰崽\\Desktop\\数据结构加算法\\servletday1\\servletDay2\\\\src\\\\main\\\\java\\com\\kuang\\servletday2\\51.png";
      //就是取一个文件完整路径中的文件名,譬如 D:\img\aaa.jpg,我们要得到aaa.jpg.如果不+1 得到的就包括\本身成了\aaa.jpg
    String substring = path.substring(path.lastIndexOf("\\")+1);
      //URLEncode中的encode方法来防止文件有中文统一转换成UTF-8
resp.setHeader("Content-Disposition","attachment;substring="+ URLEncoder.encode(substring,"UTF-8"));
       //io流
FileInputStream fileOutputStream=new FileInputStream(path);
int len=0;
byte[] a=new byte[1024];
       //用于输出字符流数据或者二进制的字节流数据都可以
ServletOutputStream outputStream = resp.getOutputStream();
while((len=fileOutputStream.read(a))>0){
outputStream.write(a,0,len);
}
        //关闭流
fileOutputStream.close();
outputStream.close();
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

   然后配置web.xml文件路径:

        

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<!-- name可以随意 class里面接类名 -->
<servlet-name>img</servlet-name>
<servlet-class>com.kuang.File.FileServlet</servlet-class>
</servlet>
<!-- 这里的name要和上面的相互对应 pattern是路径 -->
<servlet-mapping>
<servlet-name>img</servlet-name>
<url-pattern>/img</url-pattern>
</servlet-mapping>
</web-app>

      !!!最后启动tomcat 成功后转换到网站输入:http://localhost:8080/servletDay2_war/img即可访问下载文件

    希望教程对你有用 servlet小萌新报道

servlet怎么实现第一个程序和实现下载文件的更多相关文章

  1. libcurl开源库在Win32程序中使用下载文件显示进度条实例

    一.配置工程引用libcurl库 #define CURL_STATICLIB #include "curl/curl.h" #ifdef _DEBUG #pragma comme ...

  2. JavaSE02:第一个程序

    HelloWorld! 写第一个程序步骤 建一个文件,文件名改为HelloWorld.java 用文本编辑器打开并编写代码 public class HelloWorld{ public static ...

  3. Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

    日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...

  4. Hibernate5笔记1--Hibernate简介和第一个程序

    Hibernate简介: Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hib ...

  5. Spring的第一个程序

    目录 一.Spring概述 1. Spring是什么? 2. IOC控制反转 二.Spring的第一个程序 1. 创建Maven项目 2. 加入maven依赖pom.xml 3. 定义接口和实体类 4 ...

  6. ExtJS 4.2 第一个程序

    本篇介绍如何创建一个ExtJS应用程序.并通过创建目录.导入文件.编写代码及分析代码等步骤来解释第一个ExtJS程序. 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index ...

  7. Android开发-之第一个程序:HelloWorld!

    小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...

  8. [Fluent NHibernate]第一个程序

    目录 写在前面 Fluent Nhibernate简介 基本配置 总结 写在前面 在耗时两月,NHibernate系列出炉这篇文章中,很多园友说了Fluent Nhibernate的东东,也激起我的兴 ...

  9. rails再体验(第一个程序)

    掌握redmine plugin开发的目标在2016年未实现,2017年继续. 选择<Ruby on Rails Tutorial>教程,windows安装railsinstaller,该 ...

  10. OpenGL学习笔记1——第一个程序

    学习的参考书基本是按照GL编程指南,如果有消息机制概念,对于GLUT的理解是很自然的.下面就按照自己写的第一个程序详细解释一下GL,还是比较容易上手的. 程序实现的功能是,根据当前随即种子摇出来的结果 ...

随机推荐

  1. 记一次 .NET 某拍摄监控软件 卡死分析

    一:背景 1. 讲故事 今天本来想写一篇 非托管泄露 的生产事故分析,但想着昨天就上了一篇非托管文章,连着写也没什么意思,换个口味吧,刚好前些天有位朋友也找到我,说他们的拍摄监控软件卡死了,让我帮忙分 ...

  2. Go语言系列——01-HelloWorld、02-命名规范、03-变量、04-类型、05-常量、06-函数(Function)、07-包、08-if-else语句、09-循环、10-switch语句

    文章目录 01-HelloWorld 一 建立 Go 工作区 二 运行 Go 程序 2.1 hello world 程序代码介绍 02-开发环境搭建 一 下载地址 二 安装 Linux安装 Windo ...

  3. 前端三件套系例之JS——JavaScript内置方法

    文章目录 1.Number 1-1 属性 1-2 方法 2.String 2-1 属性 2-2 方法 2-3 代码 3Array 3-1 创建数组 3-2 数组特点 3-3 数组的遍历(迭代) 34 ...

  4. OSPF常用配置和常用的查看命令

    转载请注明出处: 1.启动OSPF进程,进入OSPF视图. [Huawei] ospf [ process-id | Router ID Router ID ] 路由器支持OSPF多进程,进程号是本地 ...

  5. SQL还是NoSQL?架构师必备选型技能

    很多时候我们都会有这样的疑问. 如果这时候直接去看MySQL.Mongo.HBase.Redis等数据库的用法.特点.区别,其实有点太着急了. 这时候,最好从「数据模型」开始讨论. 1.SQL vs ...

  6. 谱图论:Laplacian算子及其谱性质

    1 Laplacian 算子 给定无向图\(G=(V, E)\),我们在上一篇博客<谱图论:Laplacian二次型和Markov转移算子>中介绍了其对应的Laplacian二次型: \[ ...

  7. 从零用VitePress搭建博客教程(6) -– 第三方组件库的使用和VitePress搭建组件库文档

    接上一节:从零用VitePress搭建博客教程(5) - 如何自定义页面模板.给页面添加独有的className和使页面标题变成侧边目录? 九.第三方组件库的使用 我们经常看见UI组件库的文档,这里我 ...

  8. react,es6的括号问题

    JavaScript 会自动给行末添加分号.如果 return 后面换行不加括号就会变成 return;. 就是说因为jsx语句跨行了,如果写在一行是可以省略小括号的. const About = ( ...

  9. [C++]P5024 树形DP 保卫王国

    树形DP 保卫王国P5024 前置知识 1.邻接表 + Dfs(深度优先搜索) 2.基础DP(如 01背包 ) 3.最小公共祖先(LCA) LCA我有写过Blog 首先解读一下题意 城市即为节点 每个 ...

  10. Dapper.Lite 扩展

    最近重构并精简了Dapper.Lite,然后把不依赖Dapper的版本LiteSql也重构了一下,和Dapper.Lite保持一致.感觉这两款ORM基本完工,自荐一下. .NET的ORM虽多,堪用的不 ...