简单介绍一下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. MySQL运维1-日志

    一.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当MySQL启动和停止时,以及服务器在运行过程中发生的任何严重错误时的相关信息,当数据库出现任何故障导致无法正常使用时,建议首先查看此日志 ...

  2. Oracle:查询表的统计信息,手动收集统计信息

    在Oracle中,存在执行计划不准的情况,怀疑表的统计信息是否收集,需要以下操作:select table_name,num_rows,blocks,last_analyzed from user_t ...

  3. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶

    文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...

  4. 如何通过代码混淆绕过苹果机审,解决APP被拒问题

    目录 iOS代码混淆 功能分析 实现流程 类名修改 方法名修改 生成垃圾代码 替换png等静态资源MD5 info.plist文件添加垃圾字段 功能分析 实现流程 类名修改 方法名修改 生成垃圾代码 ...

  5. ELK中 Elasticsearch和Logstash内存大小设置的考虑

    本文为博主原创,转载请注明出处: 在ELK(Elasticsearch.Logstash和Kibana)日志采集和分析场景中,适当设置Logstash和Elasticsearch的内存大小非常重要.这 ...

  6. animate.css 动画种类(详细)

    作者:WangMin 格言:努力做好自己喜欢的每一件事 以下为各种动画类型包含的不同动画效果类,仅供参考.具体可查看animate.css 官网. bounce 弹跳 2. flash 闪烁 3. p ...

  7. 【scipy 基础】--图像处理

    SciPy库本身是针对科学计算而不是图像处理的,只是图像处理也包含了很多数学计算,所以Scipy也提供了一个专门的模块ndimage用于图像处理. ndimage模块提供的功能包括输入/输出图像.显示 ...

  8. canvas实现动态替换人物的背景颜色

    起因 今天遇见一个特别有意思的小功能. 就是更换人物图像的背景颜色. 大致操作步骤就是:点击人物-实现背景颜色发生变化 将图片绘画到canvas画布上 我们需要将图片绘制到canvas画布上. 这样做 ...

  9. [Flink] Flink(CDC/SQL)Job在启动时,报“ConnectException: Error reading MySQL variables: Access denied for user 'xxxx '@'xxxx' (using password: YES)”(1个空格引发的"乌龙")

    1 问题描述 1.1 基本信息 所属环境:CN-PT 问题时间:2023-11-21 所属程序: Flink Job(XXXPT_dimDeviceLogEventRi) 作业类型: Flink SQ ...

  10. SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!

    一.前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 最近ChatGPT非常受欢迎,尤其是在编 ...