JavaWeb

1、基本概念

1.1、前言

web开发:

  • web,网页的意思
  • 静态web
    • html,css
    • 提供给人看的数据始终不会发生变化
  • 动态web
    • 淘宝,几乎是所有的网站;
    • 提供的数据始终会发生变化
    • 技术栈:Serverlet、JSP、ASP、PHP

在Java中,动态web资源开发的技术统称为Javaweb;

1.2、web应用程序

web应用程序:可以提供浏览器访问的程序;

  • a.html、b.html … 多个web资源,可以被外界访问;
  • 能访问到的任何一个页面和资源,都存在于这是世界的某一和角落的计算机上;
  • URL
  • 这个同意的web资源会被放在同一个文件夹下,web应用程序–>Tomcat:服务器
  • 一个web应用由多部分组成
    • HTML,css,js
    • jsp,servlet
    • java程序
    • jar包
    • 配置文件(properties)

web应用程序编写完后,若想提供外界访问:需要一个服务器来统一管理;

1.3、静态web

  • *.html , *.htm 都是网页的后缀,如果服务器上一直存在,就可以进行读取。

  • 缺点

    • web页面无法更新,所有用户看到的都是同一个页面

      • 轮播图,点击特效:伪动态
      • JavaScript[实际开发中,用的最多]
      • VBScript
    • 无法和数据库交互(数据无法持久化,用户无法交互)

1.4、动态web

页面会动态展示:“web的页面展示的小伙影因人而异”;

缺点:

  • 加入服务器的动态web资源出现错误,需要重新写后端程序

优点:

  • web页面动态更新
  • 可以和数据库交互

2、web服务器

2.1、技术讲解

ASP

  • 微软:国内最早流行;
  • 在HTML中嵌入了VB的脚本,ASP+C;
  • ASP开发中,基本一个页面都有几千行 的业务逻辑代码,页面极其混乱
  • 维护成本高
  • C#
  • IIS

PHP

  • 开发速度快,功能强大,跨平台,代码简单
  • 无法承载大访问量的情况下(局限性)

JSP/Servlet

B/S:浏览器和服务器

C/S:客户端和服务器

  • sun公司主推的B/S架构
  • 基于java语言的(所有的大公司或者一些开源的组件都是java写得)
  • 可以承载三高问题带来的影响
  • 语法像ASP,

2.2、web服务器

服务器是一种被动操作,用来处理用户的一些请求和给用户一些响应信息;

IIS

微软的;ASP…windows中自带

Tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfKFiPN5-1630979020795)(D:/软件/typora/Typora/pictures/image-20210722153547075.png)]

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个Javaweb初学者来说,它是最佳的选择。

Tomcat 实际上运行JSP 页面和Servlet,目前Tomcat最新版本为10.0.5。

下载Tomcat:

  1. 安装或者解压
  2. 了解配置文件及目录结构
  3. 了解作用

3、Tomcat

3.1、安装Tomcat

官网:https://tomcat.apache.org/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BN4G1xLZ-1630979020799)(D:/软件/typora/Typora/pictures/image-20210722154617440.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gnYJJTK5-1630979020800)(D:/软件/typora/Typora/pictures/image-20210722154732688.png)]

3.2、Tomcat启动和配置

文件夹的作用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJoFV3Kn-1630979020802)(D:/软件/typora/Typora/pictures/image-20210722155310804.png)]

启动和关闭Tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kn0Eu8Gd-1630979020803)(D:/软件/typora/Typora/pictures/image-20210722155621601.png)]

可能遇到的问题:

  1. Java环境变量没有配置
  2. 闪退问题:需要兼容性设置
  3. 乱码问题:配置文件中设置

3.3、配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OoeI19NJ-1630979020805)(D:/软件/typora/Typora/pictures/image-20210722155933809.png)]

可以配置启动的端口号

  • Tomcat默认端口号:8080
  • mysql默认端口号:3306
  • http:80
  • HTTPS:443
 <Connector port="9999" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

可以配置主机的名称

  • 默认的主机名:localhost -->127.0.1
  • 默认网站应用存放的位置:webapps
Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">

高难度面试题:

请你谈谈网站是如何进行访问的?

  1. 输入一个域名;回车
  2. 检查本机的配置文件下有没有域名的映射
    • 有:直接返回对应的IP地址
    • 没有,去DNS服务器寻找

3.4、发布一个web网站

  • 将自己写得网站放到服务器(Tomcat)中指定的web应用文件夹下(webapps)就可以访问了

网站应该有的结构

--webapps:tomcat服务器的web目录-ROOT-study:网站的目录名-WEB-INF-classes :java程序-lib :web应用所依赖的jar包-web.xml :网站配置文件-index.html 默认的首页-css-js-img

4、HTTP

4.1、什么是HTTP

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。

  • 文本:html、字符串…
  • 超文本:图片、音乐、视频、定位、地图…
  • 80

https:安全的

  • 443

4.2、两个时代

  • http1.0

    • http/1.0:客户端可以与web服务器连接,只能获得一个web资源,断开连接
  • http2.0
    • http/1.1:客户端可以与web服务器连接,可以获得多个web资源。、

4.3、http请求

  • 客户端–发请求(Request)–服务器

4.3.1 请求行

  • 请求行中的请求方式:Get
  • 请求方式:Get、Post
    • get:请求能够携带的参数较少,大小有限制,会在浏览器的URL地址线束数据内容,不安全,但高效
    • post:参数没有限制,大小没有限制,不显示内容,安全,但不高效

4.3.2 请求头

  • Accept:告诉浏览器支持的数据类型
  • Accept-Encoding:编码格式
  • Accept-Language:语言环境
  • Cache-Control:缓存控制

4.4、http响应

  • 服务器–响应(Response)–客户端

4.4.1 响应体

  • Accept:告诉浏览器支持的数据类型
  • Accept-Encoding:编码格式
  • Accept-Language:语言环境
  • Cache-Control:缓存控制
  • Refresh:告诉客户端多久刷新
  • Location:让网页重新定位

4.4.2 响应状态码

200:请求响应成功

3XX:请求重定向

  • 重定向:重新到指定的新位置

404:找不到资源

5XX:服务器代码错误

常见面试题:

当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来经历了什么?

5、Maven

为什么学习?

  1. 在Javaweb开发中,需要大量的jar包;

  2. 如何能让一个东西自动帮助我们导入和配置jar包;

    由此,maven诞生了!

5.1 Maven项目架构管理工具

我们目前用来导入jar包

Maven 的核心思想:约定大于配置

  • 有约束不要去违反。

Maven会规定该如何去编写Java代码,必须按照规范;

5.2 下载和安装Maven

Maven官网:https://maven.apache.org/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RNosS6bw-1630979020805)(D:/软件/typora/Typora/pictures/image-20210722175024785.png)]

下载完成后解压即可;

5.3 配置环境变量

在我们系统环境变量中

配置如下配置

  • M2_HOME:maven目录下的bin目录
  • MAVEN_HOME:maven安装目录
  • 在系统的path中配置 %MAVEN_HOME%\bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YnBg7T2o-1630979020806)(D:/软件/typora/Typora/pictures/image-20210722180044479.png)]

测试Maven是否安装成功,保证必须配置完毕!

5.4 修改阿里云镜像

  • 镜像:mirrors

    • 作用:加速下载
  • 国内建议使用阿里云的镜像
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
或者
<mirror><id>nexus-aliyun</id><mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>  <name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

5.5 本地仓库

在本地的仓库,远程仓库;

建立一个本地仓库:

<localRepository>D:\Program Files\Maven\apache-maven-3.6.3\repostory</localRepository>

5.6 在IDEA中使用Maven

  1. 启动IDEA
  2. 创建一个MavenWeb项目(普通的Maven项目不用勾选)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i5rsuNJb-1630979020807)(D:/软件/typora/Typora/pictures/image-20210722182927422.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKexrKqT-1630979020808)(D:/软件/typora/Typora/pictures/image-20210722183131025.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VxajkEjv-1630979020808)(D:/软件/typora/Typora/pictures/image-20210722183423766.png)]

  1. 初次创建稍等一会儿等待右下角自动导入完成。

  2. 观察Maven仓库中多了什么东西

  3. IDEA中的maven设置

    IDEA项目创建成功后,看一眼Maven的配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0DPzWry-1630979020809)(D:/软件/typora/Typora/pictures/image-20210722184951986.png)]

  1. 到这里Maven在IDEA中的配置和使用就OK了!

5.7 创建一个普通的Maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8sPj1nDz-1630979020810)(D:/软件/typora/Typora/pictures/image-20210722185928727.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BiOF8EVT-1630979020810)(D:/软件/typora/Typora/pictures/image-20210722190436466.png)]

下面的只有在web应用才会有!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHDOHTjh-1630979020811)(D:/软件/typora/Typora/pictures/image-20210722190702026.png)]

5.8 IDEA中标记文件夹功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U0qUWNIJ-1630979020812)(D:/软件/typora/Typora/pictures/image-20210722191121930.png)]

或者

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5gyNrJ6m-1630979020812)(D:/软件/typora/Typora/pictures/image-20210722191311498.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCfyIi3X-1630979020813)(D:/软件/typora/Typora/pictures/image-20210722191630329.png)]

5.9 在IDEA中配置Tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IUIQdh0D-1630979020813)(D:/软件/typora/Typora/pictures/image-20210722192356410.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DtA2OTlF-1630979020814)(D:/软件/typora/Typora/pictures/image-20210722192728905.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYCkAQtb-1630979020815)(D:/软件/typora/Typora/pictures/image-20210722192810462.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-guLkjlHY-1630979020816)(D:/软件/typora/Typora/pictures/image-20210722193339967.png)]

解决警告问题

必须配置:为什么会有这个问题:我们访问一个网站,需要指定一个文件夹名字;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqZkdGAW-1630979020817)(D:/软件/typora/Typora/pictures/image-20210722204209491.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ol9cPaNd-1630979020818)(D:/软件/typora/Typora/pictures/image-20210722204316239.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1EtL5pEW-1630979020818)(D:/软件/typora/Typora/pictures/image-20210722213441402.png)]

5.10 pom文件

pom.xml是Maven的核心配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-22xGbjYk-1630979020819)(D:/软件/typora/Typora/pictures/image-20210723001916920.png)]

Maven由于它的约定大于配置,我们之后可能会遇到我们写得配置文件,无法被导出或者生效的问题,解决方案:build下面加一个resource

<!--在build中配置resource,防止资源导出失败的问题--><build><resources><resource><directory>src/main/resources</directory><excludes><exclude>**/*.properties</exclude><exclude>**/*.xml</exclude></excludes><filtering>false</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>

5.11 IDEA 操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9QGkt2wY-1630979020821)(D:/软件/typora/Typora/pictures/image-20210723002659888.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wU0Kuwzy-1630979020822)(D:/软件/typora/Typora/pictures/image-20210723002634828.png)]

5.12 解决遇到的一些问题

  1. Maven 3.6.2

    Unable to import maven project : See logs for details

    解决方法:降级版本为3.6.1

  2. Tomcat闪退

  3. IDEA中每次都要重复配置maven

    在IDEA中的全局默认配置中配置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMW7D4wv-1630979020823)(D:/软件/typora/Typora/pictures/image-20210723004117694.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pPYXbQsM-1630979020823)(D:/软件/typora/Typora/pictures/image-20210723004259061.png)]

  4. Maven项目中Tomcat无法配置

  5. maven默认的web项目中的web.xml的版本问题、

    解决:替换为webapp4.0版本和Tomcat一致

    <?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">
    </web-app>
    
  6. Maven仓库的使用

    地址:https://mvnrepository.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aWjIRcYb-1630979020824)(D:/软件/typora/Typora/pictures/image-20210723093402925.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEpj13BV-1630979020825)(D:/软件/typora/Typora/pictures/image-20210723093511483.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ecnied3e-1630979020826)(D:/软件/typora/Typora/pictures/image-20210723093616592.png)]

6、Servlet

6.1 Servlet简介

  • Servlet就是sun公司开发动态web的一门技术
  • sun在这些API中提供了一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:
    • 编写一个类实现Servlet接口
    • 把开发好的java类部署到web服务器中

把实现了Servlet接口的java程序叫做Servlet

6.2 HelloServlet

Servlet接口在sun公司有两个默认的实现类:HttpServlet、GenericServlet

  1. 构建一个普通的Maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立Moudel,这个空的工程就是Maven的主工程

  2. 关于Maven父子工程的理解:

    在父项目中会有

    <modules><module>servlet-01</module></modules>
    

    子项目中会有

    <parent><artifactId>maven-javaweb-servlet</artifactId><groupId>com.briup</groupId><version>1.0-SNAPSHOT</version></parent>
    

    父项目中的jar包子项目可以直接使用

  3. Maven环境优化

    • 修改web.xml为最新的
    • 将maven的结构搭建完整
  4. 编写一个Servlet程序

    • 编写一个普通类
    • 实现Servlet接口,这里我们直接继承HttpServlet
public class HelloServlet extends HttpServlet {//由于get和post只是请求实现的不同方式,可以相互调用,因为业务逻辑一样;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//响应流PrintWriter writer = resp.getWriter();writer.print("Hello Servlet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}
  1. 编写Servlet的映射

    为什么需要映射:我们写得是java程序,但是要通过浏览器访问,浏览器需要连接web服务器,所以我们需要在web服务中注册我们写得Servlet,还需要给他一个浏览器能够访问的路径

        <!--注册Servlet--><servlet><servlet-name>hello</servlet-name><servlet-class>com.liang.servlet.HelloServlet</servlet-class></servlet><!--Servlet请求路径--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
    
  2. 配置Tomcat

    注意:配置项目发布的路径就可以了

  3. 启动测试

6.3 Servlet运行原理

Servlet是由web服务器调用,web服务器在收到浏览器请求之后,会:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tRqEr6TA-1630979020827)(D:/软件/typora/Typora/pictures/image-20210727142700851.png)]

6.4 Mapping问题

  1. 一个Servlet可以指定一个映射路径

    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
    
  2. 一个Servlet可以指定多个映射路径

    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello2</url-pattern></servlet-mapping>
    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello3</url-pattern></servlet-mapping>
    
  3. 一个Servlet可以指定通用映射路径

    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello/*</url-pattern></servlet-mapping>
    
  4. 默认请求路径

    <!--默认请求路径-->
    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>
    
  5. 指定一些后缀或者前缀等等…

    <!--可以自定义请求路径-->
    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>*.liangpei</url-pattern></servlet-mapping>
    
  6. 优先级问题:

    指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;

6.5 ServletContext

web容器在启动的时候,它会为每个web程序创建对应的ServletContext对象,代表了当前的web应用;

1. 共享数据

我在这个Servlet中保存的数据,可以在另外一个Servlet中拿到;

public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        this.getInitParameter() 初始化参数
//        this.getServletConfig() Servlet配置
//        this.getServletContext() Servlet上下文System.out.println("Hello");ServletContext context = this.getServletContext();String username = "梁沛"; //数据//将一个数据保存在了ServletContext中,名字为:username,值为:usernamecontext.setAttribute("username",username);}
}
public class GetServlet extends HelloServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();Object username = (String)context.getAttribute("username");resp.setContentType("text/html");resp.setCharacterEncoding("utf-8");resp.getWriter().print(username);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
    <servlet><servlet-name>hello</servlet-name><servlet-class>com.liang.servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet><servlet-name>getc</servlet-name><servlet-class>com.liang.servlet.GetServlet</servlet-class></servlet><servlet-mapping><servlet-name>getc</servlet-name><url-pattern>/getc</url-pattern></servlet-mapping>

测试访问结果;

2. 获取初始化参数

<!--配置一些web应用的初始化参数--><context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost:3306/mybatis</param-value></context-param>
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();String url = context.getInitParameter("url");resp.getWriter().print(url);}

3. 请求转发

    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();System.out.println("进入了ServletDemo04");
//        RequestDispatcher requestDispatcher = context.getRequestDispatcher("/getp");//转发的请求路径
//        requestDispatcher.forward(req, resp);//调用forward方法实现请求转发context.getRequestDispatcher("/getp").forward(req, resp);}

4. 读取资源文件

properties

  • 在java目录下创建properties
  • 在resources目录下创建properties

发现:都被打包了同意路径下:classes,我们俗称这个路径为classpath;

思路:需要一个文件流;

username=root
password=root
public class PropertiesServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");Properties properties = new Properties();properties.load(is);String user = properties.getProperty("username");String psw = properties.getProperty("password");resp.getWriter().print(user + " : " + psw);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

访问测试即可;

6.6 HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse对象;

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpServletResponse

1. 简单分类

负责向浏览器发送数据的方法:

ServletOutoutStream getOutoutStream() throws IOException;
PrintWriter getWriter() throws IOException;

负责向浏览器发送响应头的方法:

 void setCharacterEncoding(String var1);void setContentLength(int var1);void setContentLengthLong(long var1);void setContentType(String var1);void setDateHeader(String var1, long var2);void addDateHeader(String var1, long var2);void setHeader(String var1, String var2);void addHeader(String var1, String var2);void setIntHeader(String var1, int var2);

2. 常见应用

  • 向浏览器输出消息
  • 下载文件
    • 要获取下载路径
    • 下载文件名是什么?
    • 想办法让浏览器支持下载功能
    • 获取下载文件的输入流
    • 创建缓冲区
    • 获得输出流对象
    • 将FileOutputStream流写入到buffer缓冲区
    • 使用OutputStream将缓冲区的数据输出到客户端
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;public class FileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        - 要获取下载路径String realPath = "D:\\Program Files\\ideaIU-2021.1.3.win\\workspace\\maven-javaweb-servlet\\response\\target\\classes\\1.jpg";System.out.println("下载文件的路劲:" + realPath);
//        - 下载文件名是什么?String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
//        - 想办法让浏览器支持下载功能resp.setHeader("Content-Disposition","attachment:filename=" + fileName);
//        - 获取下载文件的输入流FileInputStream in = new FileInputStream(realPath);
//        - 创建缓冲区int len = 0;byte[] buffer = new byte[1024];
//        - 获得输出流对象ServletOutputStream out = resp.getOutputStream();
//        - 将FileOutputStream流写入到buffer缓冲区
//        - 使用OutputStream将缓冲区的数据输出到客户端while ((len = in.read(buffer)) != -1){out.write(buffer,0,len);}in.close();out.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

6.7 HttpServletRequest

String fileName = realPath.substring(realPath.lastIndexOf("\") + 1);
// - 想办法让浏览器支持下载功能
resp.setHeader(“Content-Disposition”,“attachment:filename=” + fileName);
// - 获取下载文件的输入流
FileInputStream in = new FileInputStream(realPath);
// - 创建缓冲区
int len = 0;
byte[] buffer = new byte[1024];
// - 获得输出流对象
ServletOutputStream out = resp.getOutputStream();
// - 将FileOutputStream流写入到buffer缓冲区
// - 使用OutputStream将缓冲区的数据输出到客户端
while ((len = in.read(buffer)) != -1){
out.write(buffer,0,len);
}
in.close();
out.close();
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);
}

}

### 6.7 HttpServletRequest

JavaWeb(持续更新)学习资源来自B站狂神相关推荐

  1. python自学免费课堂-推荐5个Python爬虫免费学习资源(B站高赞!)

    这里是法学院毕业的Python程序员阿峰. 写在前面: 和学任何技能一样,学习Python爬虫也需要两点:行动和时间. 所有的爬虫速成课,我都不推荐. 如果您愿意付出时间和行动,每天在Python上进 ...

  2. 【持续更新】资源站点汇总

    一.前言   随着信息技术的发展,下载和安装软件越来越成为有技术含量的工作.如何能够保证下载没有病毒.没有木马,没有广告.没有恶意插件的软件成为了新的挑战.为此,我整理一些可以下载软件的站点,供大家参 ...

  3. qt学习笔记 来自B站【最新QT从入门到实战完整版|传智教育】

    最新QT从入门到实战完整版|传智教育 目录在这里 2022.2.4 day1 06 QPushButton创建 07 对象树 08 Qt的坐标系 09 信号和槽-点击按钮关闭窗口 10 自定义信号和槽 ...

  4. 【Word提升】高级word使用技巧-持续更新学习

    目录 1.设置域来自动计算总页数 2.自动文本同步 1.设置域来自动计算总页数 插入-域-文档的页数(NUMPAGES)-点击确认即可 word和wps通用 之后每次改完之后,右击-更新域  即可 2 ...

  5. Docker 学习 基础入门 B站狂神 个人私人笔记

    前置知识: linux基础命令.springboot知识 Docker 概述 docker 为什么出现 开发-运维 环境配置十分麻烦 每一个机器都要部署环境(集群Redis.ES.Hadoop...) ...

  6. 关于学习的网站和常用的工具网站的积累——来自贫民窟的孩子(持续更新)

    文章目录 1.简单的唠叨一下 2.我要分享好东西啦,安利一波福利啦 2.1 关于PPT网站 2.2 关于刷题的网站 2.3 好的资料网站 2.4 常用的工具网站 3.学姐大大的安利博客 1.简单的唠叨 ...

  7. Admin.NET管理系统(vue3等前后端分离)学习笔记--持续更新

    我的学习笔记 - 9iAdmin.NET 欢迎学习交流 (一)前端笔记 1.1 关于.env的设置 1.2 关于路由模式问题 1.3 关于 vue.config.ts 1.4 关于 打包(pnpm r ...

  8. 一个不错的学习资源列表

    一个不错的学习资源列表 发信站: 逸仙时空 Yat-sen Channel (Sun Nov 12 11:34:48 2006), 转信 转贴)这份材料是我在帮美国MIT的William Stalli ...

  9. Android学习资源大全

    整理了一些 Android 的博客链接.学习资源网站.站在巨人的肩膀上,会看得更远.整理这一份资源也方便更多的Android开发者能享受到技术分享的力量.首先,在这里要感谢所有开源项目的作者,感谢Tr ...

最新文章

  1. python web为什么不火-Python语言为什么这么火?老男孩Python入门培训
  2. 图像中添加二项式分布噪声
  3. python图片二值化处理百度图api_Python+百度AI实现图像处理-附源码
  4. PS图像菜单下计算命令
  5. Hive数据导出的三种方式
  6. java集群调度_集群环境下定时调度的解决方案之Quartz集群
  7. 一份来自亚马逊技术专家的Google面试指南,GitHub收获9.8万星,已翻译成中文
  8. 硅谷女孩火了,更该让他们开始学编程
  9. 使用61850网关实现modbus和电力iec61850协议的转换
  10. 认知系列1:认知是什么
  11. 【实战毕业论文排版】图片添加题注实现自动编号
  12. FLV格式的视频怎么在线转换成MP4格式
  13. 【ARM汇编】打印金字塔 | 打印倒三角
  14. 2022-2027年中国煤制尿素行业市场全景评估及发展战略规划报告
  15. 经典好文!手把手教你写Android项目文档,小白也能看明白
  16. Spark Standalone -- 独立集群模式、Spark 提交任务的两种模式、spark在yarn上运行的环境搭建、自己写的spark代码如何提交到yarn上并运行...
  17. 【机器学习和数据分析与可视化课程设计】基于天气预报的数据分析与可视化课程设计(Python实现)
  18. QT QMessageBox 弹出消息框,对话确认框(确定/取消)
  19. Linux国产操作系统,UCA-系统工程师学习必备技能,Linux启动流程、计划任务、密码破解和密码防破解以及ssh服务
  20. 快速排序partition的两种分法

热门文章

  1. Python的序列和切片
  2. 我是怎样在美团点评做App需求迭代的
  3. TypeError: cannot pickle ‘module‘ object
  4. hdu1272 小希的迷宫
  5. JVM之垃圾回收机制
  6. 安卓开发中发送短信的方法 APP内单发短信 群发短信 APP跳转到短信页 单条短信 多条短信Intent跳转
  7. 万字长文解读电商搜索——如何让你买得又快又好
  8. 智能质检产品Compliance:七大亮点满足企业多样化合规质检、SOP质检需求
  9. Android Ble蓝牙开发总结
  10. Leetcode27.移除元素(c++,beats 100%,附详细解释~)