目录
4.20 扩展-sqlSessionFactory工具类抽取
13.Axios(AJAX框架)&Axios起别名(简化代码)
1.JavaWeb技术栈

2.HTTP协议

2.1 HTTP请求数据格式

最重要的是请求参数存放位置不一样以及请求参数大小限制不同,GET请求参数最大为4KB,POST请求参数大小没有限制
2.2 HTTP响应数据格式

响应状态码大全:HTTP - 状态 | Status - 开发者手册 - 云+社区 - 腾讯云 (tencent.com)
https://cloud.tencent.com/developer/chapter/13553
3.Tomcat
3.1 简介&基本使用



3.2 配置和部署项目


3.3 IDEA 中Tomcat-Web项目结构

3.4 IDEA中创建Maven Web项目
3.4.1 使用骨架创建


改成war
3.4.2 不使用骨架创建

点这个进入第四步
3.5 在IDEA中使用Tomcat
3.5.1 手动设置(方式一)

3.5.2 设置pom.xml(方式二,方便,推荐)

4.Servlet

4.1 快速入门

4.2 执行流程&生命周期


4.3 方法介绍&体系结构



4.4 urlPattern配置


4.5 XML配置Servlet

4.6 Request和Response

4.7 Request继承体系

4.8 Request获取请求数据

GET方式获取请求参数是通过getQueryString()方法获取的,POST方式获取请求参数是通过字符输入流获取的
POST获取请求参数示例:

4.9 Request通用方式获取请求参数


4.10 IDEA模板创建Servlet

使用模板创建Servlet示例:


4.11 请求方式中文乱码处理

POST解决方案示例:

通用方式(GET/POST)方案示例:

精简为一行代码可以表示为:

4.12 Request请求转发

示例:

路径写的是@WebServlet注解里的路径,不是java文件路径
4.13 Response设置响应数据

4.14 Response重定向

示例:


注意观察路径,还需要一个虚拟目录的路径
4.15 资源路径问题(是否需要加虚拟目录)


动态获取虚拟目录使代码耦合性更低
4.16 Response响应字符数据

示例:

setContentType方法已经包含了setHeader方法里的设置响应头“content-type”
4.17 Response响应字节数据

示例:


注释部分可用apache提供的工具简化代码,不要导错包
4.18 案例-用户登录
需求分析:

环境准备:

第三步:

第四步:



代码部分:
UserMapper接口代码:

html代码:

Servlet代码:

4.19 案例-用户注册

UserMapper接口代码:

html代码:

Servlet代码:

划线部分与html表单提交的地址对应

4.20 扩展-sqlSessionFactory工具类抽取
在上面案例中写mybatis操作数据库代码时会有代码重复,这里可以将它们优化成一个工具类

示例:
工具类代码:

在Servlet中把注释代码替换:

5.JSP

5.1 JSP快速入门

5.2 JSP脚本

第二种用于输出,第三种用于定义成员变量、成员方法
示例:

写网页时需要截断java代码遍历,因为 html代码不能写在java代码中
5.3 JSP缺点

5.4 EL表达式

示例:


5.5 JSTL标签



示例:

大括号部分是html代码,JSTL的使用相当于是用JSTL标签包裹html代码
6.MVC模式和三层架构


7.一个使用JSP、MyBatis、MVC三层架构的案例

7.1 创建模块、引入坐标




![]()

双击划线部分项目,补齐文件

之后点击“+”号,选择版本

将WEB-INF拖入webapp里边

添加<scope>标签,值改为provided,扩展:
scope参数如下:
1.compile:是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包,会随着项目一起发布。(编译范围)
2.provided:依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。(已提供范围)
3.test: 依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包JUnit(单元测试框架)。(测试范围)
4.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。(运行时范围)
5.system:system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(尽量去从公共或定制的 Maven 仓库中引用依赖)。(系统范围)
————————————————
原文链接:https://blog.csdn.net/weixin_40936211/article/details/88036183


7.2 创建三层架构包结构

7.3 建数据库表、实体类略
7.4 搭建MyBatis基础环境
搭建方式见本文4.18的用户登录案例
7.5 代码

新增了Service层是为了将Dao层用到的查询方法封装,因为Servlet每用一次都需要创建,可提高代码的复用性
Dao层(Mapper层):

Service层:

只需创建一次SqlSession对象
Servlet层:
写在web包里
jsp层:

html层:

8.会话技术


因为安全性问题,验证码用Session防止被人暴力破解注册,因为存储时间问题“记住密码”用Cookie存储,安全性不足没有办法解决
8.1 Cookie

发送Cookie示例:

获取Cookie示例:

8.1.1 Cookie原理&使用细节


设置Cookie存活时间示例:

给中文字符编码解码示例:


先将Cookoe编码成UTF-8格式取出来时再解码
8.2 Session

存入Session示例:

取出Session示例:

8.2.1 Session原理&细节

Session是基于Cookie实现的,同一次会话中服务端发送给客户端的Session实际上就是一个Cookie,此次会话的其它请求中服务端通过这个Cookie的id(它叫JESSIONID)来获取同一个 Session,如果客户端关闭的话就不是同一个Session了

9.使用Session生成验证码案例

验证码图片生成工具类:


jsp代码:
使用Servlet动态生成的图片

给更换验证码图片按钮绑定点击事件,在图片地址后增加时间毫秒值时间戳是因为不这么做的话浏览器会缓存图片地址读取同一张图片导致无法更换验证码地址
Servlet代码:

注册类代码:
10.Filter(过滤器)概念&使用&执行流程

例如主页面需要登录后才能访问,为了防止用户直接输入地址访问则需要用过滤器拦截需要登录后才能进入的页面
init是过滤器执行方法,destroy是过滤器销毁方法

示例:

放行后 response里才有数据,此时才对response数据进行处理执行放行后的逻辑
10.1 Filter拦截路径配置&过滤器链


10.2 Filter案例

示例:

break换成return以便不执行下面的代码,如果不判断访问的资源路径是否与登录注册相关而拦截的话就会导致与登录注册相关的页面以及其css、js等文件被拦截,导致页面样式无法改变以及无法跳转

11.Listener

12.AJAX

同步请求需要刷新页面给出结果,异步请求不需要刷新页面直接给出结果
12.1 AJAX快速入门

url地址一般写全地址,因为在之后的开发中往往是前后端分离,前后端不在同一个服务器上,例:
AJAX这部分代码可以去w3c中找到AJAX 简介 (w3school.com.cn)
https://www.w3school.com.cn/js/js_ajax_intro.asp
其中对应的参数相关:

12.2 AJAX案例

Servlet代码:

html中script代码:

划线部分是携带用户名的值传入

更改display的值隐藏或显示
13.Axios(AJAX框架)&Axios起别名(简化代码)


14.JSON(JS对象载体)

14.1 JSON数据和JAVA对象相互转换

示例:

14.2 JSON简单案例

Servlet代码:

注意数据格式是json
html代码:
使用累加法生成表格数据










