Web:World Wide Web(www),即全球广域网,也称为万维网。
JavaWeb:是用Java技术来解决web互联网领域的技术栈。

数据库(MySQL、JDBC、Maven、MyBatis)、前端(HTML+CSS+JavaScript、Ajax+Vue+Element)、核心技术(Tomcat+HTTP+Servlet、Request+Response、JSP、Cookie+Session、Filter+Listener)
JDBC(Java Database Connectivity),Java数据库连接,使用Java代码操作 关系型数据库 的API。
① 创建工程,导入驱动jar包(mysql-connector-java-5.1.48.jar)
② 注册驱动。Class.forName("com.mysql.jdbc.Driver");
③ 获取连接。Connection conn = DriverManager.getConnection(url, username, password);
④ 定义SQL语句。String sql = “update...”;
⑤ 获取执行SQL对象。Statement stmt = conn.createStatement();
⑥ 执行SQL。stmt.executeUpdate(sql);
⑦ 处理返回结果。
⑧ 释放资源。
①注册驱动 Class.forName("com.mysql.jdbc.Driver");
Driver类源码
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
②获取连接
Static Connection getConnection(String url,String user,String password);
参数
url: 连接路径
语法: jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
示例: jdbc:mysql://127.0.0.1:3306/db1
细节:
如果连接的是本机mysq服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql://数据库名称?参数键值对
配置useSSL=false参数,禁用安全连接方式,解决警告提示。
user: 用户名
password: 密码
Connection(数据库连接对象)作用:①获取执行SQL的对象;②管理事务。
注意:JDBC事务管理

int executeUpdate(sql):执行DML、DDL语句ResultSet executeQuery(sql):执行DQL语句ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象。
boolean next():①将光标从当前位置向前移动一行;②判断当前行是否为有效行。
返回值:
true:有效行,当前行有数据。
false:无效行,当前行没有数据。
xxx getXxx(参数):获取数据。
xxx:数据类型;如:int getInt(参数); String getString(参数)。
参数:int:列的编号,从1开始。String:列的名称。
①游标向下移动一行,并判断该行否有数据: next();
②获取数据: getXxx(参数)。
数据库连接池是个容器,负责分配、管理数据库连接(Connection);
它允许应用程序 重复使用一个现有的数据库连接,而不是再重新建立一个 ;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
好处: ①资源重用;②提升系统响应速度;③避免数据库连接遗漏。
Connection getConnection()
①导入jar包druid-1.1.12.jar —> ②定义配置文件 —> ③加载配置文件 —> ④获取数据库连接池对象 —> ⑤获取连接
HTML(HyperText Markup Language): 超文本标记语言 ,所有的网页都是使用其编写的。
超文本: 超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。
标记语言: 由标签构成的语言。
HTML运行在浏览器上,HTML标签由浏览器来解析。
HTML标签都是预定义好的。例如:使用展示图片。
W3C标准:网页主要由三部分组成(结构:HTML、表现:CSS、行为:JavaScript)

基础标签

转义字符

图片、音频、视频标签

超链接标签
<a href="链接地址url" target="打开方式"></a>
target:_self:默认值,再当前页面打开;_blank:在空白页面打开。
列表标签

表格标签

布局标签

表单标签
表单: 在网页中主要负责数据采集功能,使用标签定义表单。
表单项(元素): 不同类型的input元素、下拉列表、文本域等。

1、form:定义表单
① action:规定当提交表单时向何处发送表单数据,URL。
② method:规定用于发送表单数据的方式
· get:浏览器会将数据直接附在表单的action URL之后,大小有限制。
· post:浏览器会将数据放到http请求消息体中,大小无限制。
2、input:定义表单项,通过type属性控制输入形式,type的取值有:

CSS(Cascading Style Sheet)层叠样式表,是一门语言,用于控制网页表现。


CSS相关知识参见W3school: https://www.w3school.com.cn/css/index.asp 。
JavaScript是一门 跨平台、面向对象的脚本语言 ,来控制网页行为的,它能使网页可交互。
JavaScript和Java是完全不同的语言,不论是概念还是设计,但是基础语法类似。
内部脚本:将JS代码定义在HTML页面中。
外部脚本:将JS代码定义在外部JS文件中,然后引入到HTML页面中。
注意: 在HTML中定义JavaScript代码,必须放在 标签之间。
输出语句
使用window.alert()写入警告框。
使用document.write()写入HTML输出。
使用console.log()写入浏览器控制台。
变量
JavaScript 中用 var 关键字(variable的缩写)来声明变量。
JavaScript是一门 弱类型语言,变量可以存放不同类型的值。
ECMAScript 6新增了 let 关键字来定义变量。它的用法类似于var,但是所声明的变量,只在let关键字所在的代码块内有效,且不允许重复声明。
ECMAScript 6新增了 const 关键字,用来声明一个 只读的常量。一旦声明,常量的值就不能改变。
数据类型
JavaScript中分为:原始类型和引用类型。
5种原始类型:
number:数字(整数、小数、NaN(Not a Number))
string:字符、字符串,单双引皆可
boolean:布尔,true、false
null:对象为空
undefined:当声明的变量未初始化时,该变量的默认值是undefined
使用 typeof 运算符可以获取数据类型:alert(typeof age);
运算符
一元运算符:++、–
算术运算符:+、-、*、/、%
赋值运算符:=、+=、-= …
关系运算符:>、<、>=、<=、!=、、=
逻辑运算符:&&、||、!
三元运算符:条件表达式?true_value : false_value
注意:
== 和 === 的区别(是否会进行类型转换)
== :在判断时,如果二者数据类型不一致,会先进行类型转换
=== : 全等于,判断类型是否一样,如果不一样,直接返回false;类型一样再去比较值。
流程控制语句
if、switch、for、while、do…while
函数
函数(方法)是被设计为执行特定任务的代码块。
定义:JavaScript函数通过 function 关键词进行定义,语法为:
function functionName(参数1,参数2..){
要执行的代码
}
注意:
形式参数不需要类型。因为JavaScript是弱类型语言。
返回值也不需要定义类型,可以在函数内部直接使用return返回即可。
Array、String、自定义对象
Element - 网站快速成型工具
w3school 在线教程
Vue是一套 前端框架 ,免除原生JavaScript中的DOM操作,简化书写。
基于 MVVM (Model-View-ViewModel)思想,实现数据的 双向绑定 ,将编程的关注点放在数据上。
官网:https://cn.vuejs.org
Element:是饿了么公司前端开发团队提供的一套 基于Vue的网站组件库,用于快速构建网页。
组件:组成网页的部件,例如超链接、按钮、图片、表格等等。
Element官网:https://element.eleme.cn/#/zh-CNListener
HTTP,HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
①基于TCP协议:面向连接,安全。
②基于请求-响应模型:一次请求对应一次响应。
③HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
请求数据分为3部分:
①请求行:请求数据的第一行。其中GET表示请求方式,/ 表示请求资源路径,HTTP/1.1表示协议版本。
②请求头:第二行开始,格式为key: value形式。
③请求体:POST请求的最后一部分,存放请求参数。(GET没有请求体)


响应数据分为3部分:
①响应行:响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述。
②响应头:第二行开始,格式为key: value形式。
③响应体:最后一部分。存放响应数据。

状态码大全链接: https://cloud.tencent.com/developer/chapter/13553
Post和Get的共同点:
①都是HTTP协议中的两个发送请求的方法,底层都是 基于TCP/IP协议 。
Post和Get的区别:
①post传递数据,不需要在url中显式出来,而get方法需要在 url中显式 。
②post传输的 数据量大,可以达到2M ,而get传参受url长度限制, 最多传递1024字节 。
③post请求是 将数据传输到服务器端 ,而get请求是为了 从服务器端取数据(为什么get也能传参?为了告诉服务端需要什么数据)
④post在真正接受数据之前会 先将请求头发送给服务器进行确认,然后才真正发送数据 。
Get和Post的区别:
①get传递的参数在页面可以看见,安全性低。(post更安全,不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
②GET请求请求 参数在请求行中,没有请求体 。POST请求请求 参数在请求体中 。
③get传参 速度更快 。
④get不能 传递中文,会乱码 ,而post不会出现乱码问题。

Web服务器是一个用于程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让web开发更加便捷。主要功能是“提供网上信息浏览服务”。
Tomcat是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范。Tomcat也被称为Web容器、Servlet容器。Servlet需要依赖于Tomcat才能运行。
官网:https://tomcat.apache.org/
Servlet是Java提供的一门 动态web 资源开发技术。
Servlet由web服务器创建,Servlet方法由web服务器调用。
因为我们自定义的servlet,必须实现servlet接口并复写其方法,而servlet接口中有service方法。
void init(ServletConfig config)void service(ServletRequest req, ServletResponse res)void destroy()ServletConfig getServletConfig()String getServletInfo()
注意: 自定义Servlet都需要实现HttpServlet接口,并重写doGet和doPost方法。


request:获取请求数据。
response:设置响应数据。


① Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中。
② 使用request对象,查阅JavaEE API文档的HttpServletRequest接口。
· String getMethod():获取请求方式GET
· String getContextPath():获取虚拟目录(项目访问路径): /request-demo
· StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
· String getRequestURI():获取URI(统一资源标识符):/request-demo/req1
· String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123
· String getHeader(String name):根据请求头名称,获取值
· ServletInputStream getInputStream():获取字节输入流
· BufferedReader getReader():获取字符输入流
URI(Uniform Resource Identifier):统一资源标识符,可以唯一标识一个资源,例如人的身份证号,唯一标识一个人;
URL(Uniform Resource Locator):统一资源定位符,可以提供该资源的路径,例如人的家庭住址,通过URL可以找到这个人。
String getQueryString()BufferedReader getReader()
Map<String, String[]> getParameterMap():获取所有参数Map集合
String[] getParameterValues(String name):根据名称获取参数值(数组)
String getParameter(String name):根据名称获取参数值(单个值)
req.setCharacterEncoding("UTF-8");new String(username.getBytes("ISO-8859-1"),"UTF-8");req.getRequestDispatcher("资源B路径").forward(req,resp);void setAttribute(String name,Object o):存储数据到request域中。 Object getAttribute(String name):根据key,获取值。 void removeAttribute(String name):根据key,删除该键值对。① 浏览器地址栏路径不发生变化。
② 只能转发到当前服务器的内部资源。
③ 一次请求,可以在转发的资源间使用request共享数据。

响应数据分为3部分:
void setStatus(int sc):设置响应状态码void setHeader(String name, String value):设置响应头键值对PrintWriter getWriter():获取字符输出流 ServletOutputStream getOutputStream():获取字节输出流resp.setStatus(302);
resp.setHeader("location",“资源B的路径");
resp.sendRedirect("资源B的路径");

1、响应字符数据
PrintWriter writer = resp.getWriter();writer.write("aaa");resp.setContentType("texthtmll;charset=utf-8");response.setHeader(" content-type","text/html"));。2、响应字节数据
使用
① 通过Response对象获取字符输出流 ServletOutputStream outputStream = resp.getOutputStream();
② 写数据 outputStream.write(字节数据);
IOUtils工具类使用
① 导入坐标
<dependency>
<groupld>commons-io</groupld>
<artifactld>commons-io</artifactld>
<version>2.6</version>
</dependency>
② 使用
lOUtils.copy(输入流,输出流);

JSP本质上就是一个Servlet 。JSP在被访问时,由JSP容器(Tomcat)将其转换为Java文件(Servlet),在由JSP容器(Tomcat)将其编译,最终对外提供服务的其实就是这个 字节码文件 。

JSP脚本用于 在JSP页面内定义Java代码 。
JSP脚本分类:
① <%…%>:内容会直接放到jspService()方法之中。
② <%=.…%>:内容会放到out.print()中,作为out.print()的参数。
③ <%!..%>:内容会放到jspService()方法之外,被类直接包含。
由于JSP页面内,既可以定义HTML标签,又可以定义Java代码,造成了 以下问题:


JSP标准标签库(Jsp Standarded Tag Library),使用标签取代JSP页面上的Java代码。





Cookie的实现是 基于HTTP协议 的,包括 响应头(set-cookie)、请求头(cookie) 。

Cookie不能直接存储中文,如需要存储,则需要进行转码:URL编码。
服务端会话跟踪技术:将数据保存到服务端。
JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能。
① 获取Session对象 HttpSession session = request.getSession();
② Session对象功能
· void setAttribute(String name, Object o):存储数据到session域中。
· Object getAttribute(String name):根据key,获取值。
· void removeAttribute(String name):根据key,删除该键值对。
Session是基于Cookie实现的,Cookie中存在一个参数sessionid。
Q:服务器重启后,Session中的数据是否还在?
钝化: 在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中。
活化: 再次启动服务器后,从文件中加载数据到Session中。
① 默认情况下,无操作,30分钟自动销毁。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
② 调用Session对象的invalidate()方法。
Cookie和Session都是来完成一次会话内多次请求间 数据共享 的。
区别:
定义过滤器类,实现Filter接口,使用 @WebFilter 注解配置拦截资源路径。


Filter可以根据需求,配置不同的拦截资源路径
@WebFilter(" /*")
public class FilterDemo implements Filter
一个Web应用,可以配置多个过滤器,这多个过滤器称为 过滤器链 。

注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序。

定义一个类,是西安ServletContextListener接口,并在实现类上添加 @WebListener 注解。

AJAX(Asynchronous JavaScript And XML):异步 的JavaScript和XML。

AJAX作用:
① 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据。(使用了AJAX和服务器进行通信,就可以使用HTML+AJAX来替换JSP页面了)
② 异步交互:可以在 不重新加载整个页面 的情况下,与服务器交换数据并 更新部分网页 的技术,如:搜索联想、用户名是否可用校验等。
JavaScript Object Notation,JavaScript 对象表示法。由于其语法简单,层次结构鲜明,现多用于作为数据载体, 在网络中进行数据传输 。
JSON和Java对象转换
请求数据: JSON字符串转为Java对象。
响应数据: Java对象转为JSON字符串。
Fastjson
Fastjson是阿里巴巴提供的一个Java语言编写的高性能功能完善的 JSON库 ,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。
使用步骤
1.导入坐标
<dependency>
<groupld>com.alibaba</groupld>
<artifactld>fastjson</artifactld>
<version>1.2.62</version>
</dependency>
2.Java对象转JSON String jsonStr = JSON.toJSONString(obj);
3.JSON字符串转Java对象 User user = JSON.parseObject(jsonStr, User.class);