1.基本概念

  1. web开发:

    • web,网页的意思

    • 静态web

      • html,css

      • 提供给所有人看的数据,始终不会发生变化

    • 动态web

      • 提供给所有人看的数据会发生变化,比如淘宝,几乎所有网站都是

      • 技术栈:Servlet/JSP,ASP,PHP

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

2.web应用程序

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

  • 多个html,也就是多个web资源,这些web资源可以被外界访问,对外界提供服务的

  • url:统一资源定位器

  • 统一的web资源会被放在同一个文件夹中,web应用程序,tomcat-服务器

  • 一个web应用由多个部分组成(静态web,动态web)

    • html,css,js

    • jsp,servlet

    • Java程序

    • jar包

    • 配置

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

  • 静态web的缺点

    • 无法动态更新,所有人看到的是同一个

    • 无法和数据库交互

2.1,asp缺点

页面很杂乱,维护成本很高

2.2,php

  • 开发速度很快,功能很强大,跨平台,代码简单

  • 无法承载大访问量

2.3,jsp/servlet

B/S:浏览器和服务器

C/S:客户端和服务器

  • sun公司主推的B/S架构

  • 基于java语言

  • 可以承载三高带来的影响(高并发,高可用,高性能)

  • 语法想ASP,加强市场强度

3,web服务器

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

Tomcat

面向百度编程

IIS

微软的;ASP,windows中自带的

3.1,端口号

(默认端口号)

Tomcat:8080

mysql:3306

http:80

https:443

4,Http

4.1,什么是http

(超文本传输协议),是一个简单的请求响应协议,它通常运行在TCP上

  • 文本:html,字符串,·······

  • 超文本:图片,音乐,视频,定位,地图 ,······

  • 默认端口:80

4.2,https

  • 默认端口:443

  • 其中s代表的意思是安全的

4.3,两个时代

  • http1.0

    • http1.0:客户端可以与web服务器链接之后,只能获得一个web资源,断开连接

  • http2.0

    • http1.1:客户端与文本服务器连接之后,可以获得多个web资源

4.4,http请求

  • 客户端------服务器

  • 请求(request)

  •  请求网址: https://www.baidu.com/
     请求方法: GET
     状态代码: 200 OK
     远程地址: 110.242.68.3:443
     引荐来源网址政策: strict-origin-when-cross-origin

  • 请求头文件

     Accept: text/html       类型
     Accept-Encoding: gzip, deflate, br      编码
     Accept-Language: zh-CN,zh;q=0.9     语言
     Connection: keep-alive      连接

请求行

  • 请求行中的请求方式:get

  • 请求方式:get/post

    • get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但是高效

    • post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URl地址栏显示数据内容,安全,但是不是很高效。

消息头

 Accept:告诉服务器,他所支持的数据类型
 Accept-Encoding:告诉服务器支持哪种编码格式 GBK UTF-8
 Accept-Language:告诉浏览器他的语言环境
 Cache-Control:缓存控制
 Connection:告诉服务器,请求完成是断开还是保持连接
 HOST:主机

4.5,http响应

  • 服务器到客户端

  •  Cache-Control: private   (缓存控制)
     Connection: keep-alive   (连接)
     Content-Encoding: gzip (编码)
     Content-Type: text/html (类型)

响应体

 Accept:告诉服务器,他所支持的数据类型
 Accept-Encoding:告诉服务器支持哪种编码格式 GBK UTF-8
 Accept-Language:告诉浏览器他的语言环境
 Cache-Control:缓存控制
 Connection:告诉服务器,请求完成是断开还是保持连接
 HOST:主机
 Refresh:告诉客户端多久刷新一次
 location:让网页重新定位

响应状态码

200:请求响应成功

3xx:请求重定向

  • 重定向:比如就是,a找b学java,b说你去找别人学吧(这就是重定向)也可以理解成,你重新到我给你的新位置去

4xx:找不到资源

  • 资源不存在

5xx:服务器代码错误 500 502:网关错误

常见面试题:

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

5,Maven

为什么要学这个技术?

  1. 在javaweb开发中需要使用大量的jar包,我们需要手动去导入

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

    由此Maven诞生了

5.1,Maven项目架构管理工具

我们目前用它就是为了方便导入jar包的

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

  • 有约束,不要去违反

Maven会规定好你如何去编写我们的java代码,必须要按照这个规范来

5.2,下载安装Maven

下载第一列第二个压缩包,解压后直接使用

建议

所有的环境都放在一个环境下,这样会很方便管理

5.3,配置环境变量

有如下配置

  • M2_HOME maven目录下的bin目录

  • MAVEN_HOME maven的目录

  • 在系统的path中配 置MAVEN_HOME,记得要指向bin目录

  • 然后在cmd中输入mvn -version,测试是否安装成功

5.4,阿里云镜像

  • 镜像:mirrors

    • 作用:加速我们的下载

  • 国内建议使用阿里云的镜像

     <mirror>
         <id>alimaven</id>
         <mirrorOf>central</mirrorOf>
         <name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
       </mirror>

5.5,本地仓库

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

建立一个本地仓库

5.6,在IDEA中使用Maven

  1. 启动IDEA

  2. 创建一个MavenWeb项目

  3. 不想写了,具体的看视频去,我是技术文档

6,Servlet

6.1,简介

  • 他是sun公司开发动态web的一门技术

  • sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序只需要完成两个小步骤

    • 编写一个类,实现Servlet接口

    • 把开发好的Java类部署到web服务器中

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

6.2,HelloServlet

  1. 构建一个Maven项目

6.3,Servlet原理

image-20220130202300668

6.4,Mapping问题

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

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

  3. 一个Servlet可以指定通用映射路径

6.6,HttpServletResponse

1,简单分类

2,下载文件

3,验证码功能

4,实现重定向

image-20220220120344664

B是一个web资源,当它收到客户端A的请求后,B会通知A去访问另一个web资源,这个过程叫做重定向,url会发生改变

常见场景 :

  • 用户登录

 void sendRedirect(String var1) throws IOException;

面试题:重定向和转发的区别

相同点

  • 页面都会实现跳转

不同点

  • 请求转发的时候,url不会发生变化

  • 重定向的时候,url地址栏会发生变化

6.7,HttpServletRequst

她代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息会被封装到 HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息

1,获取前端传递的参数

image-20220222112435942

image-20220222112457607

2,请求转发

image-20220224104449805

在请求转发的时候是可以携带参数的

7,Cookie,Session

7.1,会话

会话:用户打开一个浏览器,点击了很多超链接,访问了多个web资源,关闭浏览器,这个过程叫做会话;

有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这个就叫做有状态会话;

你能怎么证明你是镐京的学生?

你 西开

  1. 发票-----镐京给你发票;

  2. 学校登记-----镐京标记你来过了;

一个网站,怎么证明你来过?

客户端 服务端

  1. 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了。

  2. 服务器登记你来过了,下次你来的时候我来匹配你。

7.2,保存会话的两种技术

cookie

  • 客户端技术 (响应,请求);

  • Cookie是从请求(req)中拿到的,返回的是一个数组,说明Cookie可能存在多个

  • 流程:

    1. 获得Cookie;

    2. 获得Cookie中的Key;

    3. 获得Cookie中的Vlaue;

    4. 新建一个Cookie;

    5. 设置Cookie的有效期;

    6. 响应给客户端一个Cookie;

  • 注意:

    • 一个Cookie只能保存一个信息;

    • 一个web站点可以给浏览器发送多个Cookie,浏览器Cookie上限大概有300个;

    • 每个站点最多可以存放20个Cookie;

    • Cookie大小有限制(4kb);

  • 删除Cookie:

    • 不设置有效期,关闭浏览器,自动失效;

    • 设置有效期时间为0;

session(重点)

  • 服务器技术 ,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中;

常见场景:网站登陆之后,你下次就不用登录了;

  • 服务器会给每一个用户(浏览器)创建一个Session对象;

  • 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在;

  • 用户登录之后,整个网站它都可以访问了;

Session和Cookie的区别:

  • Cookie是吧用户的数据写给用户的浏览器,浏览器保存(可以保存多个);

  • Session是吧用户的数据写到用户独占的Session中,在服务器端保存(保存重要的东西,减少服务器的资源浪费);

  • Session对象由服务器创建;

使用场景:

  • 保存一个登录用户的信息;

  • 购物车信息;

  • 在整个网站中经常会使用的数据,我们将它保存在Session中;

会话自动过期:Web.xml配置 (可以配置失效时间);

8,JSP

8.1,什么是JSP?

Java Servlet Pages:Java服务器端页面,也喝Servlet一样,用于动态Web技术;

最大特点:

  • 写Jsp就像再写HTML;

  • 区别:

    • HTML只给用户提供静态的数据;

    • JSp中可以嵌入Java代码,为用户提供动态数据;

8.2,JSP原理

思路:JSP是怎么执行的?

  • 代码层面没有任何问题;

  • 服务器内部工作;

    Tomcat中有一个Work目录;

    IDEA中使用Tomcat的会在IDEA中生成一个Work目录;

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet!

JSP最终也会被转化成一个Java类;

JSP本质上就是一个Servlet

  1. 判断请求;

  2. 内置了一些对象;

  3. 输出也面前增加的代码;

  4. 以上的这些个对象我们可以在JSP页面中直接使用;

在JSP页面中:

  • 只要是Java代码就会原封不动的输出;

  • 如果是HTML代码,就会转化成:

     out.write("<html>\r\n")

    以这样的格式,输出到前端;

8.3,JSP基础语法

任何语言都有自己的语法,java中有。JSP作为java技术中的一种应用,他拥有一些自己扩充的语法(了解,知道即可!),java所有语法都支持!

JSP表达式:作用:用来将程序的输出,输出到客户端。

<%-- --%>-----这个是注释;

<%= %>-----这个里面写变量或者表达式;

${ }-----这个效果和上面那个效果是一样的,这个叫做EL表达式

JSP脚本片段:

<% %>-----这里面就可以想平常一样书写java代码,他放在JSP生成的java类中的方法中;

<%! %>-----声明, 这个可以放在JSP生成的java类中方法外,作用域会更高;

JSP注释问题:

JSP的注释,不会在客户端显示,但是HTML的就会,所以JSP的安全性会更高一点;

8.4,JSP指令

  • 语法 :<%@page % >;

  • 一般会把指令放在最上面;

8.5,9大内置对象

  • PageContext-----存东西(保存的数据只在一个页面中有效)

  • Request-----存东西(保存的数据只在一次请求中有效,请求转发会携带这个数据(url没变))

  • Response

  • Session-----存东西(保存的东西只带一次会话中有效,从打开浏览器到关闭浏览器)

  • Application【ServletContext】存东西(白保存的数据只在服务器中有效,从打开服务器到关闭服务器)

  • Config【ServletConfig】

  • out

  • page

  • exception

8.6,JSP标签,JSTL标签,EL表达式

EL表达式:

  • 获取数据;

  • 执行运算;

  • 获取Web开发的常用对象;

  • 调用Java的方法(不常用);

JSTL表达式:

  • JSTL标签库的使用就是为了弥补HTML标签库的不足;

  • 它自定义了很多的标签,标签的功能和Java代码一样;

    • 格式化标签

    • SQL标签

    • XML标签

    • 核心标签(掌握部分就够了)image-20220224115217683

      • 使用步骤

        1. 引入对应的taglib;

        2. 在Tomcat也需要引入JSTL的jar包

        3. 使用其中的方法;

9,JavaBean

实体类

JavaBean有特定的写法:

  • 必须要有无参构造;

  • 属性必须私有化;

  • 必须有对应的get、set方法;

一般用来和数据库的字段做映射;ORM;

ORM:对象关系映射

  • 表----->类;

  • 字段----->属性;

  • 行记录----->对象;

10,MVC三层架构

什么是MVC:Model view Controller 模型,视图,控制器;

Servlet和Jsp都可以写Java代码,为了便于维护和使用;

Servlet专注于处理请求,教给业务层去做,以及控制视图跳转(通过重定向或者转发跳转到其他页面);

JSP专注于显示数据模型,提供用户操作;

在早些年,用户是直接访问控制层,控制层就可以直接操作数据库;

  • 弊端:程序十分臃肿,不利于维护;

  • Servlet的代码中:处理请求,响应,视图跳转,处理JDBC,处理业务代码,处理逻代码 ;

  • 架构:没有什么是加一层解决不了的;

MVC三层架构图示:

image-20220226103025984

Model

  • 业务处理:业务逻辑(Servlet);

  • 数据持久层:CRUD (Dao);

View

  • 展示数据;

  • 提供链接发起Servlet请求(a,from,img...);

Controller

  • 接受用户的请求:(req:请求参数,session信息....);

  • 交给业务层处理对应的代码;控制视图的跳转;

11,filter(过滤器)

用来过滤网站的数据;

  • 处理中文乱码;

  • 登录验证....;

  • 当web服务器启动之后,就已经初始化了;

  • 当服务器停止之后,就自动销毁了;

Filter开发步骤:

  1. 导包;

  2. 编写过滤器;

    1. 导包不要错;

      image-20220302120017866

    2. 实现Filter接口,实现对应的方法;

    3. 在web.xml中配置过滤器;

      和配置Servlet一样

12,监听器

GUI(图形界面编程)中常常使用

实现一个监听器的接口(有N种)

用户登录之后才能进入首页,注销后就不能进入主页

  1. 用户登录之后,向Session中放入用户的数据;

  2. 进入主页的时候,要判断用户是否已经登录(要求是在过滤器中实现);

13,JDBC

什么是JDBC:java连接数据库;

image-20220318200653698

需要jar包的支持

  • java.sql

  • javax.sql

  • mysql-connecter-java-----连接驱动(一定要导包,在mysql8.0的版本中,我们可以跳过加载驱动这一步,或者使用更安全的com.mysql.cj.jdbc.Driver)

JDBC固定步骤:

  1. 加载驱动(5.0版本一定要用,在mysql8.0版本可以不进行这一步,会自动进行,或者使用更安全的com.mysql.cj.jdbc.Driver连接方式);

  2. 连接数据库,代表数据库

  3. 向数据库发送SQL的的对象Statement:CRUD

  4. 编写SQL(根据吗不同的业务,我们要写不同的SQL)

  5. 执行SQL

  6. 一定要关闭上面的链接(这是为了释放内存)

14,注销功能

思路:移除Session

15,监听器,过滤器

是为了实现,用户登录之后才可以进入主页。用户注销之后,就不能再进入主页。

16,密码修改

  1. 写UserDao接口

  2. 写UserDao接口实现类

  3. UserService

17,优化密码修改(使用ajax)