【JavaWeb】
JavaWeb
Tomcat
-
可以通过Tomcat/conf下的server.xml文件配置启动的端口号
-
Tomcat默认端口号为8080
-
mysql: 3306
-
http: 80
-
https: 442
-
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-
-
可以配置主机的名称
-
默认的主机名为:localhost 或者是 127.0.0.1
-
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
* ......
</br>
##### *网站是如何进行访问的*
* 输入一个域名,点击回车访问;
* 检查本机的hosts配置文件下有没有该域名的映射;
* 如果有,直接返回对应的ip地址;
* 如果没有,去DNS服务器中找对应的ip地址;
* 如果找到,就返回对应的ip地址;
* 如果没有找到,就会报错;
</br>
##### *发布一个web网站*
* 将自己写的网站放到服务器(Tomcat)中指定的web应用的文件夹下(webapps),就能进行访问了。
~~~java
--webapps : Tomcat服务器的web目录
-ROOT
-kibo24:网站的目录名
-index.html 默认的网站首页
-static
-css
-style.scc
-js
-img
- ...
-WEB-INF
-web.xml : 网站的配置文件
-lib : web应用依赖的jar包
-
HTTP
HTTP的内容
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:html,字符串等
- 超文本:图片,音乐,视频等
- 端口:80(HTTPS的端口号为443)
HTTP的两个时代
- http1.0 短连接
- 客户端可以与web服务器进行一次连接后,只能获得一个web资源,然后会断开连接
- http1.1 长链接
- 客户端可以与web服务器进行一次连接后,可以获得多个web资源
HTTP请求
- 客户端–>发送请求Request–>服务器
百度:
1 | Request URL: https://www.baidu.com/ 【请求地址】 |
1 | Accept: text/html |
请求行
- 请求行中的请求方式:GET
- 请求方式:GET / POST / HEAD / DELETE / PUT / TRACT,…
- GET: 一次请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不够安全,但是高效
- POST: 一次请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,不够高效,但是安全
消息头
1 | Accept: 告知服务器支持的数据类型 |
HTTP响应
- 服务器–>响应–>客户端
百度:
1 | Cache-Control: private 【缓存控制】 |
响应体
1 | Accept: 告知服务器支持的数据类型 |
响应状态码
200: 请求响应成功
3**: 请求重定向
- 重定向:通过各种方法将各种网络请求重新定个方向转到其它位置
404: 找不到资源
- 资源不存在
5**: 服务器代码错误
- 502:网关错误
在浏览器输入网址后,从点击回车到网页展示,都发生了什么事?
- 输入地址
- 浏览器查找域名的ip地址
- 浏览器首先会从本地硬盘的hosts文件中查看是否存在这个域名,如果能匹配上则会直接使用hosts文件中的ip地址
- 如果本地的hosts文件中没有匹配的域名ip时,浏览器会发送一个DNS请求到本地区的DNS服务器
- 本地DNS收到请求后,会查询缓存记录,如果查询到结果就把结果返回,如果没有查询到则向DNS根服务器递归查询
- 如果DNS根目录都没有找到域名与ip的对应记录,根DNS服务器会告诉本地DNS服务器应该向对应的顶级域名解析服务器发起查询请求,如.com服务器
- 本地DNS服务器向对应的顶级域名解析服务器发起查询请求,顶级域名解析服务器返回域名解析服务器的地址或返回域名不存在
- 最后本地DNS服务器向域名的解析服务器发送请求,这时就能收到一个域名和ip地址的对应关系
-
浏览器向web服务器发送一个HTTP请求
-
浏览器获取到域名和ip的对应关系后,会以本机一个随机端口(1024~65535)向服务器的WEB程序(常用的有httpd,nginx等)的80端口发起TCP的连接请求
-
请求经过网络中间各种路由设备到达服务器端后,到达目标设备网卡进入到内核的TCP/IP协议栈开始识别该连接请求,解封包,一层一层剥开最终到达WEB程序,建立TCP/IP连接
-
建立TCP/IP连接之后,就可以发起http请求
HTTP请求包含:
- 请求方法URI协议/版本
- 请求头
- 请求正文
-
-
服务器处理请求
-
服务器返回一个HTTP响应
服务器收到请求并处理请求后,会返回处理结果,也就是返回一个HTTP响应
HTTP响应的构成:
- 状态行
- 响应头
- 响应正文
-
浏览器解析响应的内容并展示
-
浏览器解析html文件
浏览器在解析html文件时,会“自上而下”加载,并在加载过程中进行解析渲染
-
浏览器解析JS
JS的解析是由浏览器中的JS解析引擎完成的
-
浏览器发送请求获取嵌入在HTML中的资源
浏览器显示HTML时,会注意到需要获取其他地址内容的标签,浏览器会发送一个获取请求来重新获得这些文件
-
Maven
- 在JavaWeb开发中,需要使用大量的jar包,需要手动导入。Maven能够自动导入和配置jar包
Maven项目架构管理工具
我们目前用它是为了方便导入jar包
Maven核心思想:约定大于配置
-
有约束,不要违反
Maven会规定好如何去编写java代码,必须要按照这个规范
配置Maven环境
-
M2_HOME maven下的bin目录
-
MAVEN_HOME maven的目录
-
Path中配置bin目录

修改配置文件
-
镜像:mirrors
加速文件的下载
-
国内建议使用阿里云的镜像
本地仓库
新建一个本地仓库:localRepository

在IDEA中使用Maven
- 创建一个MavenWeb项目
- 等待项目初始化
- 查看本地仓库
- IDEA中的Maven设置
- 如果不选择webapp,选择直接生成maven项目

- 修改目录属性
- 在IDEA中配置Tomcat
- 解决警告未指定应用程序服务器
在配置中选中Tomcat路径即可
- 解决警告没有为部署标记工件
在部署中添加工件即可

-
启动Tomcat
-
运行项目
pom文件
pom.xml文件是Maven的核心配置文件
1 |
|
Maven的高级之处在于:它会帮你导入这个jar包所依赖的其他jar包
Maven仓库的使用

- 依赖代码要添加到pom.xml里
- 添加依赖成功,导入类后即可

- 展示效果
Servlet
Servlet简介
- Servlet是sun公司开发动态web的一门技术;
- sun公司在这些API中提供了一个接口叫做Servlet,如果想开发Servlet程序,只需要完成两个小步骤:
- 编写一个类,实现Servlet接口
- 把开发好的Java类部署到web服务器中
- Servlet有两个实现类:HttpServlet,GenericServlet
- 关系为:Servlet接口–>GenericServlet–>HttpServlet–>自己写的类(只需要继承HttpServlet类即可)
把实现了Servlet接口的java程序叫做Servlet
Hello Servlet
-
构建一个Maven项目,删掉里面的src目录,之后就在项目里创建模块。这个空工程就是Maven的主工程;
典中典之导入依赖,如果本地仓库没有导入的依赖,IDEA会负责下载。
-
关于Maven的父子模块
- 父项目中会有:
1
2
3<modules>
<module>Servler-01</module>
</modules>- 子项目中会有:
1
2
3
4
5<parent>
<artifactId>javaweb-02-Servlet</artifactId>
<groupId>com.kibo24</groupId>
<version>1.0-SNAPSHOT</version>
</parent>父项目中的jar包子项目可以直接使用,反之则不能
-
Maven环境优化
-
关于新建子项目(模块)的web.xml中初始代码老旧的问题:
1
2
3
4
5
6
7
8
9
10
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app> -
将子项目src/main目录下的的文件目录补齐,java标记为源,resources标记为资源
-
-
编写一个Servlet程序
- 创建一个普通类;
- 实现Servlet接口,这里直接继承HttpServlet类(不需要重新配置,直接使用父项目的包)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class HelloServlet extends HttpServlet
{
//由于get/post只是请求实现的不同方式,可以相互调用,因为业务逻辑都一样
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
//ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer=resp.getWriter(); //响应流
writer.println("Hello Servlet");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
doGet(req, resp);
}
} -
编写Servlet的映射
因为浏览器访问需要链接web服务器,所以需要把自己写的java程序,在web服务中注册Servlet(映射),还需要给它一个浏览器能访问的路径。
- 在web.xml中映射
-
配置Tomcat
- 测试项目
Servlet优先级问题
- 通配符映射的优先级小于狭义定义的映射的优先级
- 如下代码(web.xml),会优先判断是不是hello映射
1 | <servlet> |
Servlet项目创建
- 新建项目之后,配置好Maven环境
- 配置好Tomcat环境
- 在项目下新建新模块
- 修改新模块的pom.xml文件
- 在新模块/src/main下补全java目录和resources资源包
- 修改新模块的web.xml文件
1 |
|
- 在java目录下新建软件包(如com.kibo24.servlet)
- 在java目录下新建类(如HelloServlet)
- 在类中重写doGet和doPost方法
- 在web.xml下配置Servlet映射,即servlet-name和servlet-mapping
1 | <servlet> |
- 然后好像就可以启动测试了



