目录
一、Web应用程序的工作原理
万维网(WWW,World Wide Web),也常常简称为Web。
用户访问资源的步骤:
- 在浏览器地址栏输入网址
- 浏览器向目标服务器发出请求
- 服务器接收到请求后进行业务处理,生成处理结果
- 服务器将处理结果返回给浏览器
- 浏览器以网页的形式将结果展示给用户
其中:
-
用户输入的网址称为统一资源定位符(URL),是资源存放在网络上的唯一地址。
-
浏览器与服务器之间的交互方式需要遵循超文本传输协议(HTTP),协议指定浏览器发送给服务器什么请求以及得到什么响应。
二、HTTP协议简介
1、什么是http协议
HTTP是一种协议,全称为超文本传输协议。客户端与服务器端建立连接后,客户端可以向服务器发送请求,这种请求叫做HTTP请求。
HTTP请求方法有8种(其中GET,POST是最为常用的两种 。):
- GET:从服务器获取资源。
- POST:向服务器提交数据,用于创建新的资源或处理数据。
- PUT:向服务器发送数据,用于更新或替换现有资源。
- DELETE:从服务器删除指定的资源。
- PATCH:向服务器发送部分更新的数据,用于对资源进行局部修改。
- HEAD:与GET方法类似,但只返回响应头部信息,不返回响应体。
- OPTIONS:获取目标资源支持的通信选项。
- TRACE:对目标资源执行一个消息环回测试,用于追踪和调试。
服务器端接收到请求后会做出相应的响应,这种响应被称为HTTP响应。
HTTP协议是一种纯文本的无状态协议!
2、http协议的工作原理
简单概括为以下几个步骤:
-
客户端发起请求:客户端向服务器发起HTTP请求,包括要访问的资源信息和请求头部等。
-
服务器处理请求:服务器接收请求,根据请求信息进行处理,可能涉及查询数据库、计算、验证等操作。
-
服务器返回响应:服务器生成HTTP响应,包含状态码、响应头部和响应体等信息,并发送给客户端。
-
客户端接收响应:客户端接收服务器的HTTP响应,根据响应信息进行处理,可能是渲染页面、显示数据等操作。
3、HTTP协议常见状态
1XX(信息性状态码):表示请求已被接收,继续处理。
- 100 Continue: 服务器已经接收到请求的头部,并且客户端可以继续发送请求的主体部分。
2XX(成功状态码):表示请求已成功被服务器接收、理解和处理。
- 200 OK: 请求成功,服务器正常返回所请求的资源。
- 201 Created: 请求成功并且服务器创建了新的资源。
- 204 No Content: 服务器成功处理请求,但没有返回任何内容。
3XX(重定向状态码):表示需要进一步操作以完成请求。
- 301 Moved Permanently: 请求的资源已永久移动到新的URL。
- 302 Found: 请求的资源暂时移动到新的URL。
- 304 Not Modified: 资源未修改,可使用缓存的版本。
4XX(客户端错误状态码):表示客户端发出的请求有误。
- 400 Bad Request: 请求无效,服务器无法理解。
- 401 Unauthorized: 请求要求身份验证。
- 403 Forbidden: 服务器拒绝请求。
- 404 Not Found: 请求的资源不存在。
5XX(服务器错误状态码):表示服务器无法完成有效的请求。
- 500 Internal Server Error: 服务器内部错误。
- 502 Bad Gateway: 作为网关或代理的服务器从上游服务器接收到无效响应。
- 503 Service Unavailable: 服务器暂时无法处理请求,通常是由于过载或维护。
三、Web服务器
1、Web服务器的作用
Web服务器的作用是处理HTTP请求并提供Web服务
2、Web服务器有哪些
- Apache是一个开源、稳定可靠的通用Web服务器,Nginx是一个高性能、适用于高并发环境的开源Web服务器。
- Microsoft IIS是微软开发的Web服务器软件,专门用于在Windows操作系统上提供Web服务;
- Lighttpd是一个轻量级的开源Web服务器软件,适用于低端硬件和嵌入式设备;
- Tomcat是一个开源的Java Servlet容器,也可以作为独立的Web服务器使用,适用于运行Java Web应用程序。
这些Web服务器都有自己的特点和适用场景,常用的是Apache和Nginx。选择哪种Web服务器取决于你的需求和技术栈。如果你需要一个稳定可靠的通用Web服务器,Apache是一个不错的选择。如果你关注性能和高并发处理,Nginx可能更适合。此外,如果你使用Java开发,Tomcat是一个常见的选择。
四、java常识
1、src
目录
在 Java 项目的 src
目录中,一些常见的文件夹及其用途可以简化描述如下:
com.example.project
:主要代码包。model
:模型相关的类。service
:服务相关的类。dao
:数据访问对象相关的类。controller
:控制器相关的类。util
:工具类。exception
:异常处理类。config
:配置类。test
:单元测试相关的类。resources
:资源文件夹。
2、常用的Spring 注解
-
@Component:通用的注解,用于标识一个类为 Spring 组件。Spring 会自动扫描并将带有该注解的类注册为 bean。
-
@Controller:用于标识一个类作为 Spring MVC 中的控制器组件。
-
@Service:用于标识一个类作为业务逻辑层的组件。
-
@Repository:用于标识一个类作为数据访问层(DAO)的组件。
-
@Autowired:用于自动装配 bean,可以用在字段、构造方法和方法上。
-
@Qualifier:与@Autowired配合使用,指定注入的 bean 名称。
-
@Value:用于注入外部配置文件中的值到 bean 的属性中。
-
@Configuration:用于定义配置类,类似于 XML 配置文件。
-
@Bean:在@Configuration类中使用,用于声明一个 bean。
-
@Scope:用于指定 bean 的作用域,如 singleton、prototype 等。
-
@ComponentScan:用于指定 Spring 在何处寻找组件类。
-
@RequestMapping:用于映射 HTTP 请求到控制器的处理方法。
-
@RequestParam:用于从请求中获取参数值。
-
@PathVariable:用于从 URL 中获取参数值。
-
@ResponseBody:用于将方法返回的对象直接作为 HTTP 响应正文返回。
五、Thymeleaf
1、什么是Thymeleaf
Thymeleaf是一个流行的Java服务器端模板引擎,可以用于构建Web应用程序的前端视图。它与Spring框架无缝集成,并提供了丰富的功能来处理动态内容的渲染和展示。
2、Thymeleaf的作用
Thymeleaf是Java服务器端模板引擎,用于构建Web应用程序的前端视图
1. 渲染动态内容:Thymeleaf可以将动态数据与静态模板结合,生成最终的HTML输出。
2. 处理表单:Thymeleaf提供了简便的方式来处理表单的渲染、绑定和验证。
3. 支持多种模板布局:Thymeleaf允许使用片段和布局定义来构建可重用的模板结构。
4. 国际化支持:Thymeleaf提供了国际化和本地化功能,使得应用程序可以根据用户的语言环境进行内容展示。
5. 安全性:Thymeleaf支持对模板中的HTML标签进行转义,以防止跨站点脚本攻击(XSS)
6. 可扩展性:Thymeleaf支持自定义标签和方言,可以扩展其功能以满足特定需求。
3、Thymeleaf如何使用
-
(1)添加Thymeleaf依赖
在Maven项目中,在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
-
(2)配置Thymeleaf
在Spring Boot项目中,可以在application.properties或application.yml文件中配置Thymeleaf的相关属性。
# 设置模板路径
spring.thymeleaf.prefix=classpath:/templates/
# 设置模板后缀
spring.thymeleaf.suffix=.html
# 开启缓存
spring.thymeleaf.cache=true
# 设置默认编码
spring.thymeleaf.encoding=UTF-8
-
(3)编写Thymeleaf模板
在模板文件中,可以使用Thymeleaf提供的标签来渲染动态内容。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf Example</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
-
(4)在Java中使用Thymeleaf
使用Thymeleaf来渲染模板并生成HTML输出。
@Controller
public class MyController {
@GetMapping("/")
public String home(Model model) {
model.addAttribute("message", "Hello World!");
return "home";
}
}
六、MyBatis
1、MyBatis是什么
MyBatis 是一个基于 Java 的持久层框架,它是 Apache 软件基金会下的一个开源项目。它通过 XML 或注解的方式将 SQL 语句与 Java 对象进行映射,可以方便地进行数据库操作。
2、MyBatis作用
-
SQL映射:将数据库表的列与Java对象的属性进行映射,通过操作Java对象执行数据库操作,避免编写繁琐的SQL语句。
-
参数处理:支持各种参数类型,如基本类型、自定义对象、集合等,并自动进行类型转换。
-
SQL执行:提供插入、更新、删除和查询等SQL操作的功能,通过API调用执行SQL语句并获取结果。
-
缓存管理:支持缓存机制,提高查询性能,包括一级缓存和二级缓存。
-
事务管理:与事务管理器整合,确保数据库操作的原子性和一致性。
3、如何使用
完整小案例
-
(1)创建数据库和表
创建一个名为student_management
的数据库,并在该数据库中创建一个名为student
的表,表结构如下:
CREATE DATABASE student_management;
USE student_management;
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
gender VARCHAR(10)
);
-
(2)引入MyBatis的依赖
在Maven项目的pom.xml
文件中引入MyBatis的依赖:
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- MySQL Connector/J -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
-
(3)配置MyBatis
创建mybatis-config.xml
文件,并放置在项目的资源目录下(例如src/main/resources
)。配置文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/student_management?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/StudentMapper.xml"/>
</mappers>
</configuration>
注意将url
中的数据库连接信息(例如用户名、密码)修改为你自己的。
-
(4)创建Java实体类
创建一个名为Student
的Java类,表示学生对象,包括id、name、age和gender属性。在com.example
包下创建Student.java
文件,内容如下:
package com.example;
public class Student {
private Long id;
private String name;
private Integer age;
private String gender;
// 省略getter和setter方法
}
-
(5)创建Mapper接口
创建一个名为StudentMapper
的Mapper接口,定义对学生信息的增删改查操作。在com.example
包下创建StudentMapper.java
文件,内容如下:
package com.example;
public interface StudentMapper {
void insertStudent(Student student);
void updateStudent(Student student);
void deleteStudent(Long id);
Student getStudentById(Long id);
}
-
(6)编写Mapper的XML文件
创建一个名为StudentMapper.xml
的XML文件,编写SQL语句和映射规则。在com.example
包下创建StudentMapper.xml
文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.StudentMapper">
<insert id="insertStudent" parameterType="com.example.Student">
INSERT INTO student (name, age, gender)
VALUES (#{name}, #{age}, #{gender})
</insert>
<update id="updateStudent" parameterType="com.example.Student">
UPDATE student SET name = #{name}, age = #{age}, gender = #{gender}
WHERE id = #{id}
</update>
<delete id="deleteStudent" parameterType="java.lang.Long">
DELETE FROM student WHERE id = #{id}
</delete>
<select id="getStudentById" parameterType="java.lang.Long" resultType="com.example.Student">
SELECT * FROM student WHERE id = #{id}
</select>
</mapper>
-
(7)编写Java代码
创建一个名为Main
的Java类,用于测试数据库操作。在src/main/java
目录下创建Main.java
文件,内容如下:
import com.example.Student;
import com.example.StudentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class Main {
public static void main(String[] args) {
// 加载MyBatis配置文件
try (InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml")) {
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建SqlSession
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
// 获取Mapper对象
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
// 插入学生信息
Student student = new Student();
student.setName("Alice");
student.setAge(20);
student.setGender("Female");
studentMapper.insertStudent(student);
System.out.println("Inserted student id: " + student.getId());
// 更新学生信息
student.setName("Bob");
studentMapper.updateStudent(student);
// 查询学生信息
Student retrievedStudent = studentMapper.getStudentById(student.getId());
System.out.println("Retrieved student: " + retrievedStudent);
// 删除学生信息
studentMapper.deleteStudent(retrievedStudent.getId());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
-
(8)运行程序
运行Main.java
文件,可以看到控制台输出相应的结果,表示数据库操作已成功执行。
这是一个简单的MyBatis小案例,涉及数据库创建、表结构定义、MyBatis配置、Java代码编写等。