简单介绍一下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. 理解并掌握C#的Channel:从使用案例到源码解读(一)

    引言 在C#的并发编程中,Channel是一种非常强大的数据结构,用于在生产者和消费者之间进行通信.本文将首先通过一个实际的使用案例,介绍如何在C#中使用Channel,然后深入到Channel的源码 ...

  2. 【遥遥领先】Eolink IDEA 插件:零代码入侵,自动生成接口

    省流版: Eolink 有 IDEA 插件吗? 有,而且遥遥领先!我们在一年半之前就发布了,而且功能更丰富! IDEA 插件市场搜索"Eolink Apikit"即可安装使用. 使 ...

  3. 彻底解决Chrome“请停用以开发者模式运行的扩展程序”提示(亲测整合)

    本站有大佬已写较全的解决方案(修改dll文件法) 原文链接 但是本人Chrome76版本不适用,匹配不到提示语,在知乎中找到修改注册表的方法可以解决 原文链接 最后附上一个谷歌访问助手吧 链接: ht ...

  4. Apollo2.1.0+Springboot使用OpenApI

    依赖管理 <!-- bootstrap最高级启动配置读取 --> <dependency> <groupId>org.springframework.cloud&l ...

  5. Go基础之变量和常量

    Go基础之变量和常量 目录 Go基础之变量和常量 一. 标识符.关键字.内置类型和函数 1.1 标识符 1.2 关键字 1.3 保留字 1.4 内置类型 1.4.1 值类型: 1.4.2 引用类型:( ...

  6. 如何用ppt打印9张一面,并且去除边距?

    如何用ppt打印9张一面,并且去除边距?      方法其实很简单,答主不要在ppt软件的打印选项里设置[每页打印9张幻灯片],而是使用默认的[每页打印1张幻灯片]. 然后去[打印机属性]里设置,我是 ...

  7. 基于 ACK Serverless 解锁你家萌宠的 AI 形象

    基于 ACK Serverless 解锁你家萌宠的 AI 形象详情      1. 计费说明 必看!!必看!!必看!! 本实验为付费体验,需要消耗账号费用.体验后若不再需要使用,请及时释放资源,避免持 ...

  8. Go函数介绍与一等公民

    Go函数介绍与一等公民 函数对应的英文单词是 Function,Function 这个单词原本是功能.职责的意思.编程语言使用 Function 这个单词,表示将一个大问题分解后而形成的.若干具有特定 ...

  9. LocalDateTime、LocalDate、Date、String相互转化大全及其注意事项

    一.前言 大家在开发过程中必不可少的和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转化! 每次写完就忘记了,小编专门来整理一篇来详细说一下他们四个的转换的方法,方便后面使用!! 二.Loc ...

  10. 字符串小记 I:基本结构与简单匹配(更新中)

    0.一些定义 在开始之前,我们先给出一些关于字符串的定义: 记 \(|S|\) 表示字符串 \(S\) 的长度,\(S_i\) 表示该字符串中第 \(i\) 位的字符,\(S_{l,r}\) 表示该字 ...