servlet怎么实现第一个程序和实现下载文件
简单介绍一下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怎么实现第一个程序和实现下载文件的更多相关文章
- libcurl开源库在Win32程序中使用下载文件显示进度条实例
一.配置工程引用libcurl库 #define CURL_STATICLIB #include "curl/curl.h" #ifdef _DEBUG #pragma comme ...
- JavaSE02:第一个程序
HelloWorld! 写第一个程序步骤 建一个文件,文件名改为HelloWorld.java 用文本编辑器打开并编写代码 public class HelloWorld{ public static ...
- Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词
日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...
- Hibernate5笔记1--Hibernate简介和第一个程序
Hibernate简介: Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hib ...
- Spring的第一个程序
目录 一.Spring概述 1. Spring是什么? 2. IOC控制反转 二.Spring的第一个程序 1. 创建Maven项目 2. 加入maven依赖pom.xml 3. 定义接口和实体类 4 ...
- ExtJS 4.2 第一个程序
本篇介绍如何创建一个ExtJS应用程序.并通过创建目录.导入文件.编写代码及分析代码等步骤来解释第一个ExtJS程序. 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index ...
- Android开发-之第一个程序:HelloWorld!
小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...
- [Fluent NHibernate]第一个程序
目录 写在前面 Fluent Nhibernate简介 基本配置 总结 写在前面 在耗时两月,NHibernate系列出炉这篇文章中,很多园友说了Fluent Nhibernate的东东,也激起我的兴 ...
- rails再体验(第一个程序)
掌握redmine plugin开发的目标在2016年未实现,2017年继续. 选择<Ruby on Rails Tutorial>教程,windows安装railsinstaller,该 ...
- OpenGL学习笔记1——第一个程序
学习的参考书基本是按照GL编程指南,如果有消息机制概念,对于GLUT的理解是很自然的.下面就按照自己写的第一个程序详细解释一下GL,还是比较容易上手的. 程序实现的功能是,根据当前随即种子摇出来的结果 ...
随机推荐
- MySQL运维1-日志
一.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当MySQL启动和停止时,以及服务器在运行过程中发生的任何严重错误时的相关信息,当数据库出现任何故障导致无法正常使用时,建议首先查看此日志 ...
- Oracle:查询表的统计信息,手动收集统计信息
在Oracle中,存在执行计划不准的情况,怀疑表的统计信息是否收集,需要以下操作:select table_name,num_rows,blocks,last_analyzed from user_t ...
- Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶
文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...
- 如何通过代码混淆绕过苹果机审,解决APP被拒问题
目录 iOS代码混淆 功能分析 实现流程 类名修改 方法名修改 生成垃圾代码 替换png等静态资源MD5 info.plist文件添加垃圾字段 功能分析 实现流程 类名修改 方法名修改 生成垃圾代码 ...
- ELK中 Elasticsearch和Logstash内存大小设置的考虑
本文为博主原创,转载请注明出处: 在ELK(Elasticsearch.Logstash和Kibana)日志采集和分析场景中,适当设置Logstash和Elasticsearch的内存大小非常重要.这 ...
- animate.css 动画种类(详细)
作者:WangMin 格言:努力做好自己喜欢的每一件事 以下为各种动画类型包含的不同动画效果类,仅供参考.具体可查看animate.css 官网. bounce 弹跳 2. flash 闪烁 3. p ...
- 【scipy 基础】--图像处理
SciPy库本身是针对科学计算而不是图像处理的,只是图像处理也包含了很多数学计算,所以Scipy也提供了一个专门的模块ndimage用于图像处理. ndimage模块提供的功能包括输入/输出图像.显示 ...
- canvas实现动态替换人物的背景颜色
起因 今天遇见一个特别有意思的小功能. 就是更换人物图像的背景颜色. 大致操作步骤就是:点击人物-实现背景颜色发生变化 将图片绘画到canvas画布上 我们需要将图片绘制到canvas画布上. 这样做 ...
- [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 ...
- SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!
一.前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 最近ChatGPT非常受欢迎,尤其是在编 ...