JavaWeb
1、Web基本概念
1.1、静态web
- html,css
- 无法动态更新,数据始终不变
- 缺点:无法动态更新、无法和数据库交互
1.2、动态web
-
Servlet/JSP,ASP,PHP
-
动态更新,数据始终会发生变化
-
可以和数据库交互(持久化)
-
缺点:加载动态资源出错,需要重新编写后台程序,重新发布,停机维护
2、web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。
- ASP
- 微软
- 在HTML中嵌入了VB的脚本
- 维护成本高
- 常见:C#
- jSP/Servlet:
- B/S、C/S
- 基于java语言
- Tomcat 服务器是一个免费的开放源代码的Web应用服务器
- PHP
- 开发速度很快,功能很强大,跨平台
- 无法承载大访问量的情况(局限性)
3、Tomcat
3.1、下载安装
- 下载地址:http://tomcat.apache.org/
- apache-tomcat-10.0.10-windows-x64.zip
3.2、目录说明
- bin:启动、关闭的脚本文件
- conf:配置
- lib:依赖的jar包
- logs:日志
- webapps:存放网站(把网站放到该目录下就可以访问)
3.3、启动、关闭、配置
-
启动:运行 bin/startup.bat
- 启动后访问:http://localhost:8080/(默认是8080)
-
停止:运行 bin/shutdown.bat
-
服务器核心配置:conf/server.xml
- 配置端口号
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- 配置主机名称
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
3.4、配置环境变量
-
新增CATALINA_BASE:tomcat目录
-
新增CATALINA_HOME:tomcat目录
-
系统ClassPath新增:%CATALINA_HOME%\lib\servlet-api.jar
-
系统path新增
- %CATALINA_HOME%\bin
- %CATALINA_HOME%\lib
-
检测tomcat是否安装配置成功命令:startup。若启动成功说明配置成功。
4、Http
4.1、简述
- 概念(http):超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
- 概念(https):通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
- http发展史
- http1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
- http2.0:客户端可以与web服务器连接后,可以获得多个web资源
4.2、http请求
-
请求行(请求方式)
- get:可带参数比较少,大小有限制,参数拼接到url中不安全,但高效
- post:可带参数没有限制,大小没有限制,url中不显示参数,安全,但不高效
- HEAD,DELETE,PUT,TRACT.…(不常用)
-
请求头
Accept:支持的数据类型 Accept-Encoding:支持的编码格式:GBK、UTF-8、GB2312、ISO8859-1 Accept-Language:语言环境 Content-Type:内容类型的标识 Cache-Control:缓存控制 Connection:请求完成是断开还是保持连接 HOST:主机
-
请求体
4.3、http响应
-
响应头
Accept:支持的数据类型 Accept-Encoding:支持的编码格式:GBK、UTF-8、GB2312、ISO8859-1 Accept-Language:语言环境 Cache-Control:缓存控制 Connection:请求完成是断开还是保持连接 HOST:主机 Refresh:多久刷新一次 Location:让网页重新定位
-
响应体
4.4、常见响应状态码
-
1xx: 信息提示
-
2xx:成功(200:请求响应成功)
-
3xx:请求重定向
-
4xx:找不到资源(404:资源不存在)
-
5xx:服务器代码错误(502:网关错误)
5、Maven
5.1、作用
- Maven是一款构建项目的工具,只需要告诉Maven需要哪些jar 包,它会帮助我们下载所有的jar包,极大提升开发效率。
- 核心思想:约定大于配置
5.2、下载安装
- 下载地址:https://maven.apache.org/
- apache-maven-3.8.1-bin.zip
5.3、配置环境变量
-
新增M2_HOME:maven目录\bin
-
新增MAVEN_HOME:maven目录
-
系统path新增:%MAVEN_HOME%\bin
-
检测maven是否安装配置成功命令:mvn -version
5.4、setting.xml配置
-
路径:conf/setting.xml
-
配置镜像(加速下载jar包的速度)
<!-- 阿里云镜像 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 配置本地仓库(下载的jar默认是在C盘,配置本地仓库来保存)
<!-- 本地仓库 -->
<localRepository>D:\AboutWork\SW\java\apache-maven-3.8.1\maven-repo</localRepository>
5.5、资源导出失败问题
在pom.xml中加入以下内容
<!-- 在build中配置resources,避免出现资源导出失败的问题 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
6、IDEA创建和配置项目
6.1、创建maven项目
- 创建maven项目(使用模板)
- 若是构建成功后,本地仓库中没有新增jar包,则需要在idea中手动配置一下相关路径
- 在src\main下新建两个文件夹,java、resource
- java:Mark Dictionary as —> Source Root
- resource:Mark Dictionary as —> Resource Root
6.2、配置tomcat
- 警告处理
6.2、pom.xml
- properties:配置
- dependencies:项目依赖
- build:项目构建用的
7、Servlet
7.1、简介
- Servlet是一门动态web技术
- 实现了Servlet接口的Java程序叫做Servlet
7.2、Servlet的开发流程
7.2.1、构建项目准备
-
创建一个普通的maven项目(不带模板),删除src文件夹
-
pom.xml添加servlet依赖
- 搜索依赖地址:https://mvnrepository.com/
- 若是低于tomcat10,jakarta换成javax
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api --> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency>
-
新建module(此时选择maven的webapp模板),项目工程为主工程,module为子工程。
-
将新建的module底下的web.xml换成最新的(可以到tomcat安装目录\conf\web.xml复制)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0"> </web-app>
-
将maven环境搭建完整。在src\main下新建两个文件夹,java、resource
- java:Mark Dictionary as —> Source Root
- resource:Mark Dictionary as —> Resource Root
7.2.2、编写Servlet程序
- 编写一个java类,继承HttpServlet类
- 重写HttpServlet类的doGet方法和doPost方法
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//继承HttpServlet
public class HelloServlet extends HttpServlet {
//重写doGet方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应的类型和字符集
resp.setContentType("text/html;charset=utf-8");
//响应流
PrintWriter writer = resp.getWriter();
writer.print("<h1>Hello 第1个Servlet </h1>");
}
//重写doPost方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
7.2.3、编写Servlet的映射
作用:编写的是JAVA程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以需要再web服务中注册我们写的Servlet,还需给他一个浏览器能够访问的路径
-
web.xml新增以下内容
<!--注册Servlet--> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.leijiao.test.HelloServlet</servlet-class> </servlet> <!--Servlet的请求路径--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
最后配置tomcat,执行即可!
7.3、servlet的工作原理
7.4、mapping映射路径
-
指定一个映射路径
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
-
指定多个映射路径
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello1</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello2</url-pattern> </servlet-mapping>
-
指定通用映射路径