当前位置: 首页 > news >正文

Javaweb总结一

一、SQL语言:DDL,DML,DQL,DCL

  • DDL:操作数据库
  • DDL:操作表
  • DQL:查询
    • 基础查询
    • 条件查询
    • 模糊查询
    • 排序查询
    • 聚合函数
    • 分组查询
    • 分页查询

二、约束

  1. 非空约束: 关键字是 NOT NULL:保证列中所有的数据不能有null值。
  2. 唯一约束:关键字是 UNIQUE:保证列中所有数据各不相同。
  3. 主键约束: 关键字是 PRIMARY KEY:主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据。
  4. 默认约束: 关键字是 DEFAULT:保存数据时,未指定值则采用默认值。
  5. 外键约束: 关键字是 FOREIGN KEY:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

三、数据库设计

3.1 数据库设计的步骤

需求分析(数据是什么? 数据具有哪些属性? 数据与属性的特点是什么)

逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)

物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
维护设计(1.对新的需求进行建表;2.表优化)

3.2表的关系分为

1.一对一
2.多对一/一对多
3.多对多

四、多表查询

多表查询顾名思义就是从多张表中一次性的查询出我们想要的数据。我们通过具体的sql给他们演示,先准备环境

  • 1.笛卡尔积:取 A,B 集合所有组合情况
  • 2.内连接查询 :相当于查询AB交集数据
-- 隐式内连接
SELECT 字段列表 FROM1,2WHERE 条件;-- 显示内连接
SELECT 字段列表 FROM1 [INNER] JOIN2 ON 条件;
  • 3.外连接查询:
-- 左外连接
SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件;-- 右外连接
SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件;
  • 1.左外连接查询 :相当于查询A表所有数据和交集部门数据
  • 2.右外连接查询 : 相当于查询B表所有数据和交集部分数据
  • 4.子查询:查询中嵌套查询,称嵌套查询为子查询。

五、事务

  • 开启事务
START TRANSACTION;
或者  
BEGIN;
  • 提交事务
COMMIT;
  • 回滚事务
ROLLBACK;

六、JDBC:JDBC 就是使用Java语言操作关系型数据库的一套API

/*** JDBC快速入门*/
public class JDBCDemo {public static void main(String[] args) throws Exception {//1. 注册驱动//Class.forName("com.mysql.jdbc.Driver");//2. 获取连接String url = "jdbc:mysql://127.0.0.1:3306/db1";String username = "root";String password = "1234";Connection conn = DriverManager.getConnection(url, username, password);//3. 定义sqlString sql = "update account set money = 2000 where id = 1";//4. 获取执行sql的对象 StatementStatement stmt = conn.createStatement();//5. 执行sqlint count = stmt.executeUpdate(sql);//受影响的行数//6. 处理结果System.out.println(count);//7. 释放资源stmt.close();conn.close();}
}

事务管理

* 开启事务 : BEGIN; 或者 START TRANSACTION;
* 提交事务 : COMMIT;
* 回滚事务 : ROLLBACK;
try {// ============开启事务==========conn.setAutoCommit(false);//5. 执行sqlint count1 = stmt.executeUpdate(sql1);//受影响的行数//6. 处理结果System.out.println(count1);int i = 3/0;//5. 执行sqlint count2 = stmt.executeUpdate(sql2);//受影响的行数//6. 处理结果System.out.println(count2);// ============提交事务==========//程序运行到此处,说明没有出现任何问题,则需求提交事务conn.commit();} catch (Exception e) {// ============回滚事务==========//程序在出现异常时会执行到这个地方,此时就需要回滚事务conn.rollback();e.printStackTrace();}

七、Maven:专门用于管理和构建 Java 项目的工具

Maven 坐标主要组成

groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
version:定义当前项目版本号

步骤
1.在项目的 pom.xml 中编写 标签
2. 在 标签中 使用 引入坐标
3. 定义坐标的 groupId,artifactId,version
4.在这里插入图片描述
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。注意还有一个scope标签, servlet-api ,在使用它时,必须将 scope 设置为该值,不然运行时就会报错

八、HTTP(HyperText Transfer Protocol)超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

GET 请求和 POST 请求区别:
1.GET 请求请求参数在请求行中,没有请求体。
POST 请求请求参数在请求体中
2.GET 请求请求参数大小有限制,POST 没有

九、Tomcat

1.创建Maven Web项目(不使用骨架版)

具体的步骤包含:

1.创建Maven项目

2.选择不使用Web项目骨架

3.输入Maven项目坐标创建项目

4.在pom.xml设置打包方式为war

5.补齐Maven Web项目缺失webapp的目录结构

6.补齐Maven Web项目缺失WEB-INF/web.xml的目录结构

2.是在pom.xml里面添加Tomcat插件

<build><plugins><!--Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version></plugin></plugins>
</build>

十、 Servlet

Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。

使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容。

Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

4.2 快速入门

需求分析: 编写一个Servlet类,并使用IDEA中Tomcat插件进行部署,最终通过浏览器访问所编写的Servlet程序。

  1. 创建Web项目web-demo,导入Servlet依赖坐标
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><!--此处为什么需要添加该标签?provided指的是在编译和测试过程中有效,最后生成的war包时不会加入因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错--><scope>provided</scope>
</dependency>
  1. 创建:定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话
package com.itheima.web;import javax.servlet.*;
import java.io.IOException;public class ServletDemo1 implements Servlet {public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("servlet hello world~");}public void init(ServletConfig servletConfig) throws ServletException {}public ServletConfig getServletConfig() {return null;}public String getServletInfo() {return null;}public void destroy() {}
}
  1. 配置:在类上使用@WebServlet注解,配置该Servlet的访问路径
@WebServlet("/demo1")
    1. 访问:启动Tomcat,浏览器中输入URL地址访问该Servlet
http://localhost:8080/web-demo/demo1

httpServlet

@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//TODO GET 请求方式处理逻辑System.out.println("get...");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//TODO Post 请求方式处理逻辑System.out.println("post...");}
}

十一、Request&Response

Request是请求对象,Response是响应对象
HTTP请求数据中包含了请求行、请求头和请求体,针对这三部分内容,Request对象都提供了对应的API方法来获取对应的值:

请求行
getMethod()获取请求方式
getContextPath()获取项目访问路径
getRequestURL()获取请求URL
getRequestURI()获取请求URI
getQueryString()获取GET请求方式的请求参数
请求头
getHeader(String name)根据请求头名称获取其对应的值
请求体
注意: 浏览器发送的POST请求才有请求体
如果是纯文本数据:getReader()
如果是字节数据如文件数据:getInputStream()
2.4 请求参数中文乱码问题
2.4.1 POST请求解决方案
分析出现中文乱码的原因:

POST的请求参数是通过request的getReader()来获取流中的数据
TOMCAT在获取流的时候采用的编码是ISO-8859-1
ISO-8859-1编码是不支持中文的,所以会出现乱码
解决方案:

页面设置的编码格式为UTF-8
把TOMCAT在获取流数据之前的编码设置为UTF-8
通过request.setCharacterEncoding(“UTF-8”)设置编码,UTF-8也可以写成小写
2.4.2 GET请求解决方案
GET请求获取请求参数的方式是request.getQueryString()

POST请求获取请求参数的方式是request.getReader()

request.setCharacterEncoding(“utf-8”)是设置request处理流的编码

getQueryString方法并没有通过流的方式获取数据

十二、会话

会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

Cookie

  1. 发送Cookie
  • 创建Cookie对象,并设置数据
Cookie cookie = new Cookie("key","value");
  • 发送Cookie到客户端:使用response对象
response.addCookie(cookie);

2 获取Cookie

  • 获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
  • 遍历数组,获取每一个Cookie对象:for
    使用Cookie对象方法获取数据
cookie.getName();
cookie.getValue();

对于Cookie的实现原理是基于HTTP协议的,其中设计到HTTP协议中的两个请求头信息:

响应头:set-cookie
请求头: cookie

Session的基本使用

1.概念
Session:服务端会话跟踪技术:将数据保存到服务端。
1.获取 Session 对象

HttpSession session = request.getSession();

2.Session 对象功能:

void setAttribute(String name, Object o):存储数据到 session 域中
Object getAttribute(String name):根据 key,获取值
void removeAttribute(String name):根据 key,删除该键值对

Session 销毁:
默认情况下,无操作,30 分钟自动销毁

<session-config><session-timeout>30</session-timeout>
</session-config>

十三、Filter&Listener

1.开发步骤

进行 Filter 开发分成以下三步实现

定义类,实现 Filter接口,并重写其所有方法

在这里插入图片描述
配置Filter拦截资源的路径:在类上定义 @WebFilter 注解。而注解的 value 属性值 /* 表示拦截所有的资源

在这里插入图片描述
在doFilter方法中输出一句话,并放行:
在这里插入图片描述

chain.doFilter(request,response)//就是放行,让其执行本该执行的代码

pom.xml 配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>filter-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>80</port></configuration></plugin></plugins></build>
</project>
@WebFilter("/*")
public class FilterDemo implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("FilterDemo...");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}
}

拦截路径表示 Filter 会对请求的哪些资源进行拦截,使用 @WebFilter 注解进行配置。如:@WebFilter("拦截路径")

拦截路径有如下四种配置方式:

  • 拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
  • 目录拦截:/user/*:访问/user下的所有资源,都会被拦截
  • 后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
  • 拦截所有:/*:访问所有资源,都会被拦截

Listener 表示监听器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。

在这里插入图片描述这里面只有 ServletContextListener 这个监听器后期我们会接触到,ServletContextListener 是用来监听 ServletContext 对象的创建和销毁。

1.代码演示

我们只演示一下 ServletContextListener 监听器

定义一个类,实现ServletContextListener 接口
重写所有的抽象方法
使用 @WebListener 进行配置

@WebListener
public class ContextLoaderListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {//加载资源System.out.println("ContextLoaderListener...");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {//释放资源}
}
http://www.lryc.cn/news/586050.html

相关文章:

  • AV1高层语法
  • 【Elasticsearch 】search_throttled
  • (LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
  • 【C语言】回调函数、转移表、qsort 使用与基于qsort改造冒泡排序
  • 汇编语言与操作系统交互
  • 27.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--币种服务(一)
  • Kotlin文件操作
  • 留学真相:凌晨两点被海关拦下时,我才明白人生没有退路
  • 【Java八股文总结 — 包学会】(二)计算机网络
  • 力扣 hot100 Day42
  • 精密模具大深径比微孔尺寸检测方案 —— 激光频率梳 3D 轮廓检测
  • 【STM32实践篇】:最小系统组成
  • AI软件出海SEO教程
  • Ubuntu快速搭建QT开发环境指南,5000字解析!!
  • 鸿蒙的NDK开发初级入门篇
  • 附件1.2025年世界职业院校技能大赛赛道简介
  • 分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
  • 2025 年 4-6 月大模型备案情况分析
  • Ansible 高版本 SELinux 模块深度解析:内置接口原理与实战指南
  • 迷宫可达性统计问题详解
  • 啤酒自动装箱机构设计cad【10张】+三维图+设计说明书
  • Linux操作系统之进程间通信:共享内存
  • Javaweb- 11 MVC架构模式
  • Redis渗透思路总结
  • Python 三大高频标准库实战指南——json · datetime · random 深度解析
  • FastGPT革命:下一代语言模型的极速进化
  • 淘宝商品评论API接口操作详解
  • MCP选型指南:AWS vs Azure vs GCP vs 国内云厂商深度对比
  • 基于 Python 的数据分析技术综述
  • 自动化运维工具jenkins问题