JAVA Web 期末速成
一、专业术语及名词
1. Web 的特点
定义:web 是分布在全世界,基于 HTTP 通信协议,存储在 Web 服务器中的所有相互链接的超文本集
- Web 是一种分布式超媒体系统
- Web 是多媒体化 和 易于导航的
- Web 与平台无关
- Web 是动态、交互的
2. TCP/IP 结构和作用
- 网络接口层:负责将 IP 分组封装成 合适在具体的物理网络上传输的帧
- 网络层:解决网络互联 IP 分组的寻址问题
- 传输层:负责报文段的完整性和提供端到端的通信
- 应用层:提供了 计算机 之间的各种 应用服务 和 协议
3. HTTP/HTTPS
概念:HTTP 即 超文本传输协议,是 Web 的基本通信协议,Web 的服务器和浏览器均采用 HTTP 协议传输 Web 文档,位于 TCP/IP 的应用层
- 在 Internet 上通常采用 TCP 连接,默认使用 80 端口
- 客户机浏览器与服务器的 TCP 连接仅能处理 一次事务
HTTP 定义的一次事务处理流程
- 客户机浏览器与 Web 服务器建立连接
- 客户机浏览器向 Web 服务器提出请求,在请求中指明所要求的特定文件
- Web 服务器响应客户机浏览器的请求
- 客户机浏览器 与 Web 服务器断开连接
http 请求中 get 和 post 区别
- get 用于获取数据,post 用于上传数据
- get 不安全,因为传输过程中 数据 放在请求的 URL 中,而 Post 的所有操作对用户来说都是不可见的
- Get 传输数据量小(受 URL 限制),而 Post 可以传输大量数据(比如:上传文件只能用 Post)
- Get 是 Form 的默认方法
- Get 限制 Form 表单的数据集必须是 ASCII 字符,而 Post 支持整个 ISO10646 字符集
4. JavaBean
Javabean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类
- 解释:JavaBean 实际上是一个遵循特定写法的 JAVA 类,封装了数据和业务逻辑,供 JSP 和 Servlet 调用,完成了数据封装 和 数据处理功能
<jsp:useBean>
标签用来声明JavaBean对象
- JSP提供了访问JavaBean属性的标签,如果要将JavaBean的某个属性输出到网页上,可以用
<jsp:getProperty>
标签。如果要给JavaBean的某个属性赋值,可以用<jsp:setProperty>
标签
简述Javabean规范都有哪些?
-
它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的缺省构造方法。
-
它提供公共的setter方法和getter方法让外部程序设置和获取JavaBean的属性
-
它是一个公有类
-
通常需要实现
java.io.Serializable
,用于序列化。
① Java 开发过程
-
编写 JavaBean
-
编译 JavaBean
javac text.java
-
部署 JavaBean
② JavaBean 属性值
-
设置
<jsp::setProperty name="beanname" property="propertyname" value="beanvalue">
-
获取
<jsp::getProperty name ="beanname" property="propertyname">
5. 比较线程 和 进程
二、前端三大件
1. HTML常见标签
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>网页标题</title>
</head>
<body>这是网页身体
</body>
</html>
超文本标签
<!--1. 跳转网页-->
<a href = "http://www.com">112</a> <!--2. 跳转某个文档的段落-->
<a href = "#clients">跳</a>
<a name = "clients">Clients</a> <!--相同文档-->
<a name = "filenameBclients">Clients</a> <!--不同文档, 比如文档 B-->
表格标签
<table><tr><td></td></tr><tr><td></td></tr>
</table>
HTML5 新特性:语义、本地存储、连接、网页多媒体、三维图形特效(各标签干嘛,一定要清楚,尤其是它的特有标签元素)
2. CSS
CSS 样式如下:(优先级,从上到下逐渐减小)
-
内联样式
<div style="color: red;">
-
内部样式
<style>p{color: red;}</style>
-
外部样式
通过 link 标签引入外部CSS 样式表
3. javascript
定义:是一种嵌入在 HTML 文档中,具有跨平台性、安全性,基于对象和事件驱动的解释型编程脚本语言
Js 特点
- 是一种脚本语言
- 基于对象
- 安全、跨平台、动态
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>alert("内部 JS")</script><!-- 外部 JS --><script src = "./Js/my.js"></script> <button onclick="alert('I miss You')">错过</button>
</body>
</html>
Js 关键字:let、var,区别如下:
- let 把声明变量的生命周期限定在一个代码块内
- var 声明的变量在整个方法内均可访问
Js 常见事件
-
事件概念:用户与 Web 网页交互产生的操作
-
事件处理概念:浏览器响应事件并进行处理的过程。而进行这种处理的代码称为 事件的响应函数
Js 对象
-
内置对象:String、Math、Array、Date
//数组创建 var arr = new Array(8);
-
window 对象:
-
document 对象:
-
自定义对象:
JAVA 和 Javascript 区别
① JS 是基于对象的脚本语言,而 JAVA 是面向对象的编程语言
② 在浏览器的执行方式不同:解释(JS)、编译(JAVA)
③ 采用的变量不同:弱类型(JS,声明变量时无需指定变量类型),强类型(JAVA)
④ 代码格式不同:JS 嵌入 HTML,JAVA 与 HTML 无关
三、Servlet
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但 servlet
的实质就是 java
代码,通过java的API动态地向客户端输出内容
Servlet 的常见配置如下
<!-- 配置Servlet -->
<servlet><servlet-name>xxx</servlet-name><servlet-class>xxx.xxx.xxx</servlet-class>
</servlet><!-- 配置Servlet映射路径 --><servlet-mapping><servlet-name>xxx</servlet-name><url-pattern>/xxx</url-pattern>
</servlet-mapping>
1. Servlet 在 Web 应用中的作用
Servlet 在 Web 中主要用于处理客户端发送的 HTTP 请求,并生成相应的 HTTP 响应,通过 Servlet 开发者可实现各种功能,比如用户认证、数据处理等.
2. Servlet 生命周期工作流程
1)加载阶段:Servlet 容器加载 Servlet 类并实例化一个 Servlet 实例对象
2)初始化阶段:Servlet 容器调用 Servlet 类的实例对象的 init()
方法进行 Servlet 的初始化
3)调用阶段:如果 Servlet 容器收到对该 Servlet 的请求,则调用此实例对象的 service()
方法处理请求并返回响应结果
4)销毁阶段:Servlet 容器在卸载该 Servlet 前,调用它的 destroy() 方法将其销毁
3. Servlet 常用方法
1)Servlet 类需要继承 HttpServlet 类
2)Servlet 类的父类 HttpServlet 中包含以下几种方法:
init()
:Servlet 的初始化方法,Servlet 创建后执行doGet()
:请求类型为 get 时调用doPost()
:请求类型为 post 时调用destroy()
:用于释放资源forward()
/sendRedirect()
:用于请求转发或重定向到其他页面
4. 请求转发和重定向
请求转发与重定向的异同点如下:
- 请求转发和重定向都可以实现访问一个资源时转向当前应用资源
- 请求转发 是一次请求一次响应,而 重定向 为 两次请求两次响应
重定向:(两次请求,地址栏看得到变化,数据丢失)
response.sendRedirect("相对路径");
请求转发:(一次请求,地址栏看不到改变,数据不丢失,可以getParameter数据,也可以getAttribute数据)
request.getRequestDispatcher("相对路径").forward(request,response);
应用场景
- 一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力
- 如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向
Servlet 过滤器
概念:运行在服务器上,位于请求和响应之间,起过滤作用的程序
Filter工作原理(执行流程)
- 请求首先被过滤器链的第一个 Servlet 过滤器处理
- 在第一个 Servlet 过滤器的请求处理完毕后,请求会被交给下一个 Servlet 过滤器处理
- 客户的请求就这样在 过滤器中 逐个处理,直到请求发送给目标为止
Servlet 过滤器通过 javax.servlet.Filter
接口提供一个无参构造函数来实现
void init(FilterConfig config)
:初始化功能void doFilter(servletRequest request, ServletResponse response, Filter chain)
:实现过滤功能void destroy()
:生命周期结束,自动调用
1、请列举Servlet接口中的方法,并分别说明这些方法的特点及其作用(书 189 页)
Servlet接口中有init、service、destroy 、getServletConfig和getServletInfo这 5个方法,这些方法的特点及其作用具体如下:
-
init(ServletConfig config)
方法,该方法在服务器对Servlet第一次访问时调用,负责Servlet初始化工作。在一个Servlet的生命周期中只执行一次。该方法接收一个ServletConfig类型的参数,Servlet容器可以通过这个参数向Servlet传递初始化配置信息。 -
service(ServletRequest request,ServletResponse response)
方法,该方法负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。 -
destroy()
方法,该方法方法负责释放Servlet对象占用的资源。当Servlet对象被销毁时,容器会调用此方法。 -
getServletConfig()
方法,该方法返回容器调用init(ServletConfig config)方法时传递给Servlet的ServletConfig对象。 -
getServletInfo()
方法,该方法返回一个字符串,其中包含了关于Servlet的信息,例如,作者、版本和版权等信息。
2、简述 ServletContext
接口的三个主要作用
-
获取 Web 应用程序的初始化参数
-
实现多个Servlet 对象共享数据
-
读取 Web 应用下的资源文件
3、如何部署和访问 servlet 服务器
- 部署:打开【servers】选项卡,选中部署web应用的Tomcat服务器,右键单击并选择【Add and Remove】选项,进入部署web应用的界面,选中“chapter03”,单击【Add】按钮,将chapter03项目添加到Tomcat服务器中,单击【finish】按钮,完成web应用的部署
- 访问:接下来启动eclipse中的Tomcat服务器,在浏览器的地址栏上输入地址
“http://localhost:8080/chapter03/TestServlet01”
访问TestServlet01
四、MVC
基本概念:MVC设计模式是 编程语言的一种软件设计模式 ,提供了一种 按功能对软件进行模块划分 的方法。MVC设计模式将软件程序分为三个核心模块:模型(Model)、视图(View)和控制器(Controller)
- MVC模式中,模型对应的组件在:JavaBean
- MVC模式中,视图对应的组件是:JSP或HTML文件
- MVC模式中,控制器的作用是:控制器负责转发请求,对请求进行处理
M(模型层)指的是:实体类、Service层、dao层
MVC设计模式中模型(Model)模块的作用如下:
- 管理 应用程序的 业务数据
- 定义访问控制和修改 这些数据的 业务规则
- 当模型的状态发生改变 时,它会 通知视图 发生改变,并 为视图提供查询模型状态的方法
MVC模式的优缺点如下:
- 优点:各司其职,互不干涉、利于分工、利于重用和扩展
- 缺点:不适用于开发 中小型 应用程序
Model2(JSP + Servlet + JavaBean)
四、SSM 框架
1. SSM 框架处理步骤
(1)客户机发送请求,该请求会被配置在web.xml文件中的前端控制器( DispacherServlet)接收和拦截。
(2)由 DispacherServlet调用处理器映射器(HandlerMapping),处理器映射器根据请求找到具体的处理器(Handler),并生成Handler 对象和拦截器返回给 DispacherServlet。
(3)DispacherServlet选择对应的处理器适配器(HandlerAdapter),HandlerAdapter调用并执行Handler。通过Handler对持久化对象(PO)进行增删改查操作,由实体对象(POJO)将操作映射到持久层框架。最终持久层框架将操作映射到数据库。
(4)数据库将操作后得到的结果返回,经由PO和Handler将操作结果提交给
一个包含模型和视图名称的ModelAndView对象。该模型会由HandlerAdapter 返回给DispacherServlet。
(5) DispacherServlet根据模型选择合适的视图解析器(ViewResolver)对模型进行解析,并返回合适的视图,DispacherServlet对视图进行渲染,视图被发送至客户机显示。
2. SSM 配置
- 在
pom.xml
中配置 Spring、JDBC 等等 - 在
web.xml
中配置 编码、过滤器、监听器、Spring MVC、日志等- 用
<servlet>
标记对 命名 Servlet - 用
<servlet-mapping>
标记对 为 Servlet 指定对应的 URL <context-param>
和<init-param>
来定义参数- 前者定义的参数整个项目均可访问
- 后者定义的项目只有在指定的 Servlet 中才能访问
- 用
<Listener>
标签 配置监听器 - 用
<filter>
和<filter-mapping>
标签 配置过滤器
- 用
- 配置
jdbc.properties
文件(与数据库相关的属性,比如:连接数量的限制) - 配置
SpringMVC.xml
文件 - 配置
Spring.xml
文件 - 配置
MyBatis.xml
文件(比如:全局映射器是否使用缓存、延迟加载等)
3. SSM 层次结构
- 视图层:负责前台网页显示,将视图返回给客户机
- 表现层(controller):系统接收用户请求后,根据用户请求的 URL 确定处理用户请求的业务逻辑
- 业务层(service + serviceimpl):负责业务模块设计
- 持久层(mapper + 实体类)
- 用 dao 接口来实现持久层,在
mapper.xml
设计对数据库的具体操作的 SQL 语句,并且可以指定 namespace 路径来建立 mapper 和 dao 接口的关联
- 用 dao 接口来实现持久层,在
- 数据库
4. SSM 核心技术
包含 SpringIOC、DI 和 AOP 等(DI 是 IOC 的一种实现方式)
IOC 容器中管理的 Bean 的生命周期的过程如下:
- 第一阶段:Bean 配置原始数据
- 第二阶段:Bean 实例化阶段
- 第三阶段:Bean 的属性赋值阶段
- 第四阶段:Bean 的销毁回收阶段
IOC 的优点
- 可以将对象内部的构造细节进行封装
- 解决了对象之间的 耦合性
依赖查找 和 依赖注入的区别:
- 前者需要在 Java 程序中主动调用 IOC 容器提供的接口来获取 Java 对象,后者获取对象的工作由 IOC 容器代替开发者完成
IOC 对象创建的 3 个途径:属性注入、使用注解自动装配、构造器注入
5. AOP 面向面编程
- 连接点(JoinPoint)
- 切点(PointCut)
- 通知(Advice)
- 切面(Aspect)
- 引入(Introduction)
- 目标对象(Target Object)
- 代理(Proxy)
请说明反转控制(IOC) 和 面向切面编程(AOP)在 spring 中的应用
6. Mybatis
Mybatis 在 SSM 中的 pom.xml 配置如下:
<dependency><grouId>org.mybatis</grouId><artifactId>mybatis</artifactId><version>3.4.5</version>
</dependency>
五、JSP
1. 基本概念
1、JSP基本结构:java程序段、声明、输出表达式
<% java程序段 %> 局部变量
<%! 声明 %> 在整个页面有效
<%= %>相当于out.print() //输出的变量或者表达式:<%=……%>,EL表达式里的${……}
out.println()和out.print()效果是一样的。如果要换行</br>
2、JSP注释:<!-- HTML注释 -->
、//
java语句注释、/* java程序段注释...*/
、<%-- jsp注释 --%>
3、文档UTF-8设置
打开Eclipse软件时 整体设置–属性; 项目属性设置;
- request.setCharacterEncoding=“UTF-8”;;
- response.setCharacterEncoding=“UTF-8”;
4、重点JSP指令:
<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" %><%@ page errorPage="..." iserrorPage="true" %><%@ page import="..." %><%@ include file="..." %>
动作指令
<jsp:include page="..." flush="true"/>
<jsp:include page="..." flush="true">
<jsp:param name="..." value="...">
</jsp:include><jsp:forward page="...">
<jsp:param name="..." value="..." />
<jsp:forward>
跳转方式
<a href="...?param=...¶m1=...&...">
JSP 网页文档特点
- JSP 网页被编译后可以多次之间运行,代码执行效率高
- 组件的可重用性高
- 将内容的生成和显示分离,对源代码进行封装
2. 九大内置对象
-
request
:对象主要用于处理客户端请求,在(页面转发,获取cookie)用到 -
response
:用于处理响应客户端请求,在(页面重定向)中使用 -
session
:在网络中被称为会话,一个会话就是浏览器与服务器之间的一次通话(保存登录状态时) -
application
:就像全局变量,用于保存应用程序中的共有数据(上传时获取真实路径) -
out
:对象用于在web浏览器内输出信息,数据输出完,要及时关闭输出流 -
pageContext
:用于获取页面的上下文,通过此对象可以获取页面的其他8个内置对象 -
config
:用于取得服务器的配置信息 -
page
:代表jsp本身,只有在jsp页面内才是合法的 -
exception
:用于处理jsp页面发生的异常
关于上面对象的比较如下:
pageContext JSP页面容器 -->当前页面有效
request 请求对象 -->同一次请求有效(请求转发还是有效,重定向[两次请求]无效)
session 会话对象 -->同一次会话有效(只要不关闭或者切换浏览器)
application 全局对象 -->全局有效(整个项目有效,切换浏览器有效,关闭server、其他项目无效)
四大域对象 作用:保存数据和获取数据,用于数据共享
名称 | 作用域 | 范围 |
---|---|---|
ServletContext | context域 | 只能在同一个web应用中使用 (全局的) |
HttpServletRequet | request域 | 只能在同一个请求中使用(转发) |
HttpSession | session域 | 只能在同一个会话(session对象)中使用 (私有的) |
PageContext | page域 | 只能在当前jsp页面使用 (当前页面) |
3. Request VS Response
① request 对象是 javax.servlet.httpServletRequest类型的对象
- 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)
- request对象的作用域为一次请求
Request.setCharacterEncoding=“UTF-8”;
String request.getParameter(String name);
String[] request.getParameterValues(String name);RequestDispatcher request.getRequestDispatcher(String path);
request.getRequestDispatcher.forward(request,response);Public void setAttribute(string name,object);
Public object getAttribute(string name);
Public void removeAttribute(string name);
② response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端
- response对象也具有作用域,它只在JSP页面内有效
response.setHeader("refresh","2");
response.setHeader("refresh","3;URL=hello.jsp") ;
response.sendRedirect(String location) ;
response.addCookie(Coolie cookie) ;
4. JSP 运行原理
- 客户端发出请求,要求访问jsp文件
- JSP容器首先将JSP文件转换为java源文件(java servlet源程序),在转换过程中如果发现jsp文件中存在任何语法错误则立即中断转换过程,并向服务器端和客户端返回出错信息
- 如果转换成功,则JSP容器将生成的java源文件编译成.class文件,该 class文件就是一个servlet,servlet容器会像处理其他servlet一样来处理它
- 由Servlet容器加载转换后的servlet类(.class文件),创建一个该servlet实例,并执行servlet中的
init()
方法,对该实例进行初始化工作 - 调用servlet中的
service()
方法来处理客户端请求 - 如果jsp文件被修改,则服务器将根据修改内容判断是否需要对文件重新编译,如果需要,则重新编译后的结果取代内存中常驻的servlet,并继续上述过程
- 执行完之后调用servlet中的destory()方法,将上面创建的servlet实例销毁
- 完成请求处理,生成响应对象由jsp容器接收,并以HTML格式发送回客户端
5. JSP Model1 和 JSP Model 的原理及使用过程
Model1模式下的程序流程控制是在JSP页面中实现的,这使得JSP页面中的嵌入大量的Java代码,Model1模式是JSP + JavaBean的结合,在JSP技术发展的初识阶段被广泛使用,Model2模式(MVC)是在JSP+JavaBean的设计模式基础上加入Servlet来实现程序控制层
- Model1应用了JavaWeb开发当中的两种技术,即JSP和JavaBean技术,所以Model1就是JSP+JavaBean模式
- 其中JSP需要独自完成响应用户的请求并将处理结果返回给用户,同时还需要完成流程的控制处理;而JavaBean进行辅助,如保存从数据库中查询出来的数据等。
- Model 2架构模式是一种把JSP与Servlet联合使用来实现动态内容服务的方法,所以Model2就是JSP+Servlet+JavaBean模式
- 它吸取了两种技术各自的突出优点,使用JSP生成表达层的内容,使用Servlet完成深层次的处理任务。
- 在Model 2中,Servlet充当控制者的角色,负责管理对请求的处理,创建JSP页面所需的JavaBean和对象,同时根据用户的动作决定把哪个JSP页面传给用户
- 特别要注意,在JSP页面内没有处理逻辑,它仅负责检索原先由Servlet创建的对象或JavaBean,然后从Servlet中提取动态内容插入到静态模板中进行页面显示
6. 思考
在JSP页面中,下列( )表达式语句可以获取页面请求中名字为title的文本框的内容:
<%=request.getParameter("title")%>
1)JSP页面的page指令主要用于设置该页面的各种属性,page指令的language属性的作用是:指定JSP页面使用的脚本语言,默认为Java
2)Servlet的作用是处理客户端请求并做出响应,Servlet是一个符合特定规范的java程序,是运行在服务器端的一个基于java技术的web组件
3)Servlet的生命周期方法有 init()、service()、destroy()
4)在 <servlet>
元素中增加 <load-on-startup>
元素可以指定在容器启动时 Servlet 的加载次序
5)在JSP中使用JDBC语句访问数据库,正确导入SQL类库的语句是:<%@ page import="java.sql.*" %>
5)JSP应用程序配置文件的根元素为 <web-app>
,JSP中的隐式注释为:<%--注释内容--%>
,在JSP中如果要导入 java.util.*
包要使用 page
指令
6)JSP文件请求需要经过 (翻译阶段 编译阶段 执行阶段) 三个阶段
7)抽象类 GenericServlet
实现了Servlet接口和 ServletConfig接口
8)编写 Servlet
时只需要根据应用的需要,重写 doGet()
或者 doPost()
方法即可
9)向请求作用域中存放数据可以用 ·request
对象的 setAttribute(String,Object)
方法,取数据可以用 getAttribute(String)
方法
10)JSP和Servlet的关系是:JSP会被翻译成Servlet
11)转发不会产生新的request对象,重定向是发送一个新的请求,发送一次请求会产生一个 response
与 request
对象
12)request对象通过哪个方法是根据组件名称获取提交数据的:getParameter()
13)在JSP中,以下哪个方法可以正确获取复选框的值:request.getParameterValues()
14)Servlet中获取请求的参数值用 <font color = red>getParameter()</font>
方法,同名的多个参数使用request.getParameterValues()
方法
15)以下哪个对象提供了访问和放置页面共享数据的方式:session
16)在JSP中,session
技术最适合实现购物车的存储
17)在JSP页面中,下列( )表达式语句可以获取页面请求中名字为title的文本框的内容:<%=request.getParameter("title")%>
六、JDBC
1. 基本概念
⛵️ JDBC的全称是 Java 数据库连接(Java Database Connectivity),它是一套用于执行 SQL 语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等处理
2. JDBC 的主要接口
JDBC API主要功能:通过以下类/接口实现
DriverManager
:管理jdbc驱动Connection
:连接 (通过DriverManager产生)Statement(PreparedStatement)
:增删改查 (通过Connection产生)CallableStatement
:调用数据库中的存储过程/存储函数(通过Connection
产生)Result
:返回的结果集(Statement, PreparedStatement
产生)
3. JDBC 数据库如何访问
基本过程(可能会涉及到如何连接数据库的编程题,最好手搓一下代码试试,详情可以看书 159 页)
1)加载并注册数据库驱动
class.forName("com.mysql.jdbc.Driver");
2)通过 DriverManager
获取数据库连接
Connection conn = DriverManager.getConnection(url, user, password);
// url: 一般是 "jdbc:mysql://localhost:3306/数据库名"
// user: root 一般
// password: 对应数据库名密码
3)通过Connection对象获取Statement对象
Statement stmt = conn.createStatement();
4)使用Statement执行SQL语句
ResultSet rst = stmt.execute(sql); // 比如 String sql = "select * from user"
5)操作ResultSet结果集
string userid = rst.getString(1);
6)关闭连接,释放资源
rst.close();
stmt.close();
conn.close();
4. 连接池
什么是连接池?
- 数据连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是建立连接。
连接池的作用
- 连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。
请思考数据库连接池的工作机制是什么?
- 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是直接创建Connection,而是向连接池“申请”一个Connection。
- 如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。
- 使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。
简述DriverManager和DataSource中的getConnection()方法的区别
1)DriverManager
每次调用 getConnection
方法都会初始化一个新的连接,而DataSource
的 getConnection
只是从池中取出一个已存在的连接
2)DriverManager
的 close()
是释放 Connection
,而 DataSource
的 close()
只会把Connection
归还给连接池。
七、编程
1. HTML + CSS +JavaScript 编程
编写一个 HTML, 页面,包含一个文本输入框和一个按钮,当点击按钮时,使用 JavaScript将输入框中的内容显示在页面上(写出完整代码,包括HTML和JavaScript 部分)
比如:页面上有个按钮,点击按钮,按钮下边显示今天星期几
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>显示今天星期几</title>
</head>
<body><button id="showDayButton">显示今天星期几</button><div id="dayDisplay"></div><script>document.getElementById('showDayButton').addEventListener('click', function() {const days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];const now = new Date();const dayName = days[now.getDay()];document.getElementById('dayDisplay').textContent = dayName;});</script>
</body>
</html>
2. Servlet + JDBC
登录界面的实现
1)前端
<!DOCTYPE html> <!-- 声明文档类型为 HTML -->
<html>
<head><title>用户登录界面</title> <!-- 设置网页标题 -->
</head>
<body><form action="/login" method="POST"> <!-- 创建表单,提交到 /login,使用 POST 方法 -->账户:<input type="text" name="username" required> <!-- 用户名输入框,必填 -->密码:<input type="password" name="password" required> <!-- 密码输入框,必填,输入时隐藏字符 --><button type="submit">登录</button> <!-- 提交按钮 --></form>
</body>
</html>
2)JDBC 和 Servlet
import javax.servlet.*; // 导入 Servlet 包
import javax.servlet.http.*; // 导入 HTTP 相关的 Servlet 包
import java.io.*; // 导入输入输出流相关的类
import java.sql.*; // 导入 SQL 相关的类public class LoginServlet extends HttpServlet { // 定义 LoginServlet 类,继承自 HttpServletprivate String driver = "com.mysql.cj.jdbc.Driver"; // JDBC 驱动类private String url = "jdbc:mysql://localhost:3306/javaweb"; // 数据库连接 URLprivate String user = "root"; // 数据库用户名private String password = "123456"; // 数据库密码protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 处理 POST 请求的方法String userName = request.getParameter("username"); // 获取表单提交的用户名String userPassword = request.getParameter("password"); // 获取表单提交的密码response.setContentType("text/html"); // 设置响应内容类型为 HTMLPrintWriter out = response.getWriter(); // 获取输出流,用于向客户端发送响应if (validateUser(userName, userPassword)) { // 验证用户out.println("登录成功"); // 输出登录成功信息response.sendRedirect("successPage.html"); // 重定向到成功页面} else {out.println("登录失败"); // 输出登录失败信息response.sendRedirect("login.html"); // 重定向回登录页面}}private boolean validateUser(String userName, String userPassword) {// 验证用户的用户名和密码Connection conn = null; // 数据库连接PreparedStatement stmt = null; // 预编译的 SQL 语句ResultSet rs = null; // 存储查询结果的结果集try {Class.forName(driver); // 加载 JDBC 驱动conn = DriverManager.getConnection(url, user, password); // 获取数据库连接String sql = "SELECT * FROM user WHERE userName = ? AND password = ?"; // SQL 查询语句stmt = conn.prepareStatement(sql); // 准备 SQL 语句stmt.setString(1, userName); // 设置第一个参数为用户名stmt.setString(2, userPassword); // 设置第二个参数为密码rs = stmt.executeQuery(); // 执行查询return rs.next(); // 如果结果集中有记录,说明用户名和密码匹配} catch (Exception e) {e.printStackTrace();} finally {try { if (rs != null) rs.close(); } catch (SQLException e) {}try { if (stmt != null) stmt.close(); } catch (SQLException e) {}try { if (conn != null) conn.close(); } catch (SQLException e) {}}return false;}
}
3)数据库
CREATE TABLE user ( -- 创建用户表userId INT NOT NULL AUTO_INCREMENT, -- 用户 ID,整数类型,非空,自动递增userName VARCHAR(50) DEFAULT NULL, -- 用户名,字符串类型,最大长度 50,默认值为 NULLpassword VARCHAR(50) DEFAULT NULL, -- 密码,字符串类型,最大长度 50,默认值为 NULLPRIMARY KEY (userId) -- 设置 userId 为主键
);
相关文章:
JAVA Web 期末速成
一、专业术语及名词 1. Web 的特点 定义:web 是分布在全世界,基于 HTTP 通信协议,存储在 Web 服务器中的所有相互链接的超文本集 Web 是一种分布式超媒体系统Web 是多媒体化 和 易于导航的Web 与平台无关Web 是动态、交互的 2. TCP/IP 结…...
iOS:重新定义移动交互,引领智能生活新潮流
在当今智能手机与移动设备充斥的时代,操作系统作为其 “灵魂”,掌控着用户体验的方方面面。iOS 系统,这一由苹果公司精心雕琢的杰作,自诞生起便以独特魅力与卓越性能,在移动操作系统领域独树一帜,深刻影响着…...
LabVIEW数据库使用说明
介绍LabVIEW如何在数据库中插入记录以及执行 SQL 查询,适用于对数据库进行数据管理和操作的场景。借助 Database Connectivity Toolkit,可便捷地与指定数据库交互。 各 VI 功能详述 左侧 VI 功能概述:实现向数据库表中插入数据的操作。当输入…...
Linux多进程 写时拷贝 物理地址和逻辑地址
如果不采用写时拷贝技术 直接fork子进程 会发生什么? 如上图所示 橙色为父进程所占内存空间 绿色为子进程所占内存空间。 如果子进程只是需要做出一点点和父进程不一样的 其余和父进程均为相同 第一 就会出现复制开销比较大;第二占用内存空间 所以 …...
在 CentOS 7.9 上部署 node_exporter 并接入 Prometheus + Grafana 实现主机监控
文章目录 在 CentOS 7.9 上部署 node_exporter 并接入 Prometheus Grafana 实现主机监控环境说明node_exporter 安装与配置下载并解压 node_exporter创建 Systemd 启动服务验证服务状态验证端口监听 Prometheus 配置 node_exporter 监控项修改 prometheus.yml重新加载 Prometh…...
Java 反射(Reflection)技术
反射是 Java 提供的一种强大机制,允许程序在运行时(Runtime)动态地获取类的信息、操作类的属性和方法。这种能力使得 Java 程序可以突破编译时的限制,实现更灵活的设计。 一、反射的核心概念 1. 什么是反射 反射是指在程序运行…...
【SpringBoot】从零开始全面解析SpringMVC (三)
本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍SpringMVC相关知识. 🐎文章专栏: JavaEE进阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,…...
DeerFlow安装配置及使用案例
DeerFlow安装配置及使用案例 简介 DeerFlow项目由字节跳动技术团队发起和主导开发,作为一个开源深度研究框架,于2025年年初正式开源。该项目基于LangStack生态,构建于LangChain与LangGraph的开源技术栈之上,充分利用语言模型…...
吉林省建筑工程专业技术人员职称评审实施办法
吉林省人力资源和社会保障厅 吉林省建筑工程专业技术人员职称评审实施办法 吉林省建筑工程技术人才之技术员评审条件 吉林省建筑工程技术人才之助理工程师评审条件 吉林省建筑工程技术人才之工程师评审条件 吉林省建筑工程技术人才之高级工程师评审条件 吉林省建筑工程技术人才…...
React组件开发流程-03.1
此章先以一个完整的例子来全面了解下React组件开发的流程,主要是以代码为主,在不同的章节中会把重点标出来,要完成的例子如下,也可从官网中找到。 React组件开发流程 这只是一个通用流程,在熟悉后不需要完全遵从。 …...
Vue 中 v-model 的三种使用方式对比与实践
在 Vue 3 中,v-model 是组件双向数据绑定的核心特性。随着 Vue 的版本演进,v-model 的使用方式也在不断优化。本文将基于您提供的代码示例,详细分析三种不同的 v-model 实现方式:基础用法、useVModel Hook(vueuse/core…...
Adminer:一个基于Web的轻量级数据库管理工具
Adminer 是一个由单个 PHP 文件实现的免费数据库管理工具,支持 MySQL、MariaDB、PostgreSQL、CockroachDB、SQLite、SQL Server、Oracle、Elasticsearch、SimpleDB、MongoDB、Firebird、Clickhouse 等数据库。 Adminer 支持的主要功能如下: 连接数据库服…...
Linux笔记---内核态与用户态
用户态(User Mode) 权限级别:较低,限制应用程序直接访问硬件或关键系统资源。 适用场景:普通应用程序的运行环境。 限制:无法执行特权指令(如操作I/O端口、修改内存管理单元配置等)…...
MFC 编程中 OnInitDialog 函数
核心作用 对话框初始化入口 :创建完成后第一个执行的函数。是对话框的起点。控件操作安全期 :此时所有控件已创建完成。可以安全地进行控件的初始化、属性设置等操作。界面布局最佳时机 :窗口显示前完成初始化设置。可以进行布局调整、数据初…...
Java高频面试之并发编程-18
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:详细说说synchronized synchronized 是 Java 中实现线程同步的核心关键字,用于解决多线程环境下的资源竞争…...
深入探究AKS Workload Identity
Azure Kubernetes 服务 (AKS) 提供了一项名为 Workload Identity 的强大功能,它可以增强安全性并简化在 Kubernetes 集群中运行的应用程序的身份验证。以下是 Workload Identity 在 AKS 环境中的工作原理概述: AKS 中的 Workload Identity 允许 Pod 无需…...
【MySQL基础】MySQL基础:MySQL基本操作与架构
MySQL学习: https://blog.csdn.net/2301_80220607/category_12971838.html?spm1001.2014.3001.5482 前言: 这里是MySQL学习的第一篇,本篇主要是讲解一些MySQL的基础操作,但这并不是重点,本篇我们主要是要理解MySQL…...
【线下沙龙】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
5月24日下午,NineData 将联合 Apache Doris、阿里云一起,在深圳举办数据库技术Meetup。本次技术沙龙聚焦「数据实时分析」与「数据同步迁移」 两大核心领域,针对企业数据战略中的痛点,特邀行业资深技术大咖,结合多年技…...
【Unity网络编程知识】Unity的 UnityWebRequest相关类学习
1、UnityWebRequest类介绍 UnityWebRequest是一个unity提供的一个模块化的系统类,用于构成HTTP请求和处理HTTP响应,它主要目标是让unity游戏和Web服务端进行交互,它将之前WWW的相关功能都集成在了其中,所以新版本中都建议使用unit…...
STM32实战指南——DHT11温湿度传感器驱动开发与避坑指南
知识点1【DHT11的概述】 1、概述 DHT是一款温湿度一体化的数字传感器(无需AD转换)。 2、驱动方式 通过单片机等微处理器简单的电路连接就能实时采集本地湿度和温度。DHT11与单片机之间采用单总线进行通信,仅需要一个IO口。 相对于单片机…...
SVG 与 Canvas 技术调研对比
在 画布 中进行 大量矩形框绘制 时,SVG 和 Canvas 都是可行的技术方案,但它们适用于不同的场景,技术特性也有明显区别。下面我从性能、灵活性、可维护性、适用场景等方面做一个系统性的对比,帮助你做出更合适的选择。 ᾞ…...
Ubuntu 远程桌面配置指南
概述: 本文主要介绍在Ubuntu 22.04中通过VNC实现远程连接的方法。首先需安装图形化界面和VNC工具x11vnc,设置开机启动服务;然后在Windows客户端用VNC Viewer通过局域网IP和端口5900连接。 总结: 一、VNC配置与安装 安装图形化界面 在Ubuntu 22.04中需先安装: sudo apt …...
146. LRU 缓存
一、题目 二、思路 题目要求 O(1) 的平均时间复杂度运行 -> 使用Map空间换时间 Map<Integer, Node>Map 通过 key 直接找到对应节点 getNode(key) -> Node记得只要查过该节点之后就应该把该节点放到最前面 pushFront(Node)put 元素后,在map中添加&…...
微信学习之导航功能
先看这个功能的效果: 然后开始学习吧。 一、我们这里用的是vant的Grid控件,首先我们导入: { "usingComponents": {"van-search": "vant/weapp/search/index","my-swiper":"../../components…...
MySQL替换瀚高数据库报错: TO_DAYS()不存在(APP)
文章目录 环境症状问题原因解决方案报错编码 环境 系统平台:中标麒麟(海光)7,中标麒麟(飞腾)7 版本:4.5 症状 MySQL替换为瀚高数据库进行应用系统适配报错:TO_DAYS()不…...
FPGA:高速接口JESD204B以及FPGA实现
本文将先介绍JESD204B高速接口的基本概念和特性,然后详细说明如何基于Xilinx Kintex-7系列FPGA实现JESD204B高速接口。 一、JESD204B高速接口介绍 JESD204B是由JEDEC(固态技术协会)制定的一种高速串行通信标准,主要用于数据转换器…...
HarmonyOS Navigation组件深度解析与应用实践
HarmonyOS Navigation组件深度解析与应用实践 一、组件架构与核心能力 HarmonyOS Navigation组件作为路由导航的根视图容器,采用三层架构设计: 标题层:支持主副标题配置,提供Mini/Free/Full三种显示模式内容层:默认…...
C#中的ThreadStart委托
ThreadStart 委托: ThreadStart 是 .NET 中的一个内置委托类型,表示无参数且无返回值的方法。其定义如下: public delegate void ThreadStart(); 通常用于定义线程的入口方法。 List<ThreadStart>: 这是一个泛型集合&…...
Spring boot 集成 Knife4j
knife4j官网:https://doc.xiaominfo.com/docs/quick-start 1. 引入Knife4j相关依赖 <!-- knife4j--> <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version…...
基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
前言 随着移动互联网的飞速发展,基于位置的服务(LBS)需求日益增长,越来越多的应用需要从地图中检索特定区域内的地理信息,例如商业场所、公共服务设施等。商场作为城市商业活动的重要载体,其周边的地理信息…...
6K型护套连接器DLJ0601(2000)-00
6K型护套连接器DLJ0601(2000)-00简介 6K型护套连接器DLJ0601(2000)-00是一种用于电气连接的组件,广泛应用于工业设备、通信系统和电子设备中。该连接器设计紧凑,具有高可靠性和耐用性,适用于多种环境条件下的电气连接需求。 主要特点 高可…...
Hexo的Next主题的Config文件内方便修改的参数(Chat-Gpt)
这是对 Hexo 的 Next 主题 _config.yml 文件各部分配置项的中文解释,帮助你更方便地进行定制: 🚀 核心设置 cache / minify cache.enable: 启用缓存,加快生成速度。minify: 是否压缩生成的 HTML/CSS/JS。 custom_file_path 自…...
【three】给立方体的每个面加载不同贴图
效果图: 主要代码: initCube() {let _this thisconst geometry new Three.BoxGeometry(1, .3, .5)let TextureLoader new Three.TextureLoader()let mater1TextureLoader.load(require(/assets/images/bg2.jpg),function (texture){console.log(tex…...
vscode怎么关闭自动定位文件
关闭自动定位文件功能 方式1 在设置中搜索: explorer.autoReveal 方式2 直接在settings.json中增加"explorer.autoReveal": false 添加类似jetbrains IDE的文件定位功能 可以直接安装插件市场搜索niushuaibing.vs-location, 安装后会有文件定位按钮, 点击后即可…...
2025-5-19Vue3快速上手
1、toRefs和toRef 当解构一个响应式对象(如 reactive 创建的对象)时,直接解构会失去响应性,此时可用 toRefs或toRef 保持响应性 toRef 的核心作用是将对象的属性转换为 ref,保持与原属性的双向绑定,无论原…...
HDMI 屏幕 电脑HDMI HDMI采集卡的关系
一、HDMI接口方向性原理 普通设备的HDMI接口方向: 电脑的HDMI接口:无论是显卡还是主板上的HDMI,均为输出端(信号源),只能向外发送视频信号,无法接收输入信号。 显示器的HDMI接口:均…...
JESD204 ip核使用与例程分析(二)
JESD204 ip核使用与例程分析(二) JESD204时钟方案专用差分时钟对例程分析jesd204_0_transport_layer_demapperjesd204_0_sig_chkjesd204_0_clockingjesd204_0 ip核port寄存器AXI-LITE寄存器配置jesd204_phy ip核JESD204时钟方案 图3-1所示为最通用、灵活的时钟解决方案。在图…...
如何使用VCS+XA加密verilog和spice网表
如果要交付verilog,但是需要对方进行VCS仿真,那么可以用以下方法: 一、基于编译指令的局部加密 适用场景:需精确控制加密范围(如仅加密核心算法或敏感逻辑)。 实现步骤: 代码标注…...
Grafana之Dashboard(仪表盘)
在前面的小节中介绍了Grafana中4中常用的可视化面板的使用,通过在面板中使用PromQL表达式,Grafana能够方便的将Prometheus返回的数据进行可视化展示。例如,在展示主机CPU使用率时,我们使用了如下表达式: 1 - (avg(ira…...
AOSP 中常见的键值对存储方式全解析(适用于系统开发与应用开发)
在 Android 系统开发(AOSP)中,键值对(Key-Value)存储是一种基础且广泛使用的数据持久化方式。从系统属性、用户设置,到应用配置,都依赖于这种结构的存储方式。本文将全面梳理 AOSP 中主流的键值…...
集合进阶2
Java不可变集合、Stream流与方法引用深度解析 一、不可变集合(Immutable Collections)进阶指南 1.1 不可变集合核心特性 防御性编程:防止外部修改数据(如传递集合给第三方库时)线程安全:天然支持多线程读…...
eMMC深度解析:嵌入式多媒体卡的硬件电路设计要点
一、eMMC 技术深度解析 1.定义与背景 eMMC(Embedded Multi Media Card)是一种专为嵌入式系统设计的非易失性存储解决方案,它将 NAND 闪存、主控芯片和接口协议封装在一个 BGA(Ball Grid Array)封装中。其核心目标是简…...
【SPIN】PROMELA语言编程入门同步机制(SPIN学习系列--4)
同步机制 PROMELA 不包含信号量、锁或监控器等常见的同步原语,而是通过语句的**可执行性(executability)**概念来建模同步机制。计算机系统的架构限制了同步机制的设计:本章主要介绍适用于共享内存系统的同步机制,第7…...
整数的个数
【描述】 给定k(1< k < 100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。 【输入】 输入有两行:第一行包含一个正整数kÿ…...
AWS EKS IP 耗尽:原因、解决方案和最佳实践
想象一下,您的 AWS EKS 集群在生产环境中运行顺畅,所有 CI/CD 管道运行正常,服务优雅地扩展,一切都像自动驾驶模式一样。——直到有一天,新的 Pod 无法启动。 您深入研究 kubectl get pods 命令,发现一堆 P…...
艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关通讯案例
艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关通讯案例 在现代工业自动化控制系统中,艾默生流量计因其高精度、稳定性和易用性而备受青睐。然而,为了实现与不同协议设备之间的无缝通信,经常需要借助专业的通讯网关进行协议转换。本文将…...
Python测试单例模式
单例模式的核心思想 单例模式确保一个类只有一个实例,并提供一个全局访问点。这在需要控制资源访问(如配置文件、数据库连接等)时非常有用。 一个简单的示例: import threading import timeclass Singleton:instance Nonelock…...
Linux架构篇、第五章_06Jenkins 触发器全面解析与实战指南
Linux架构篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:jenkins触发器的介绍与使用 版本号: 1.0,0 作者: laowang 日期: 2025.05.16 适用环境:rocky9.5 文档说明 本文档为《jenkins 触发器的介绍与…...
如何快速更换电脑浏览器ip:教程与注意事项
无论是为了访问地域限制内容、保护隐私,还是解决网络问题,快速更换浏览器IP地址的需求日益增多。以下是快速更换电脑浏览器IP地址的几种常用方法及注意事项,结合了多种场景下的解决方案: 一、快速更换浏览器IP的方法 1. 代理服务…...
《黑马前端ajax+node.js+webpack+git教程》(笔记)——ajax教程(axios教程)
黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖 文章目录 框架前置导学AJAX-Day01-01.AJAX入门与axios使用什么是AJAX如何使用AJAX使用axios获取数据案例axios语法尝试获取数据代…...