一、概述
1. 基础
Tomcat官方文档:tomcat.apache.org/tomcat-8.0-…
什么是Web,在英语中Web表示网/网络资源(页面,图片,css,js)意思,它用于表示Web服务器(主机)供浏览器访问的资源
Web服务器(主机)上供外界访问的Web资源分为:
- 静态Web资源:比如html、css、js页面,数据始终不变
- 动态Web资源:比如Servlet、PHP等
静态Web开发技术:
- HTML、CSS、JS等
动态Web开发技术:
- Servlet、SpringBoot、SpringMVC、PHP、ASP.NET 等
JavaWeb开发技术栈:
Tomcat本质就是一个Java程序,但是这个Java程序可以处理来自浏览器的HTTP请求
2. 手写JavaWeb程序
最基本的Tomcat程序:
public class MyTomcat {
public static void main(String[] args) throws IOException {
//在9999端口监听
ServerSocket serverSocket = new ServerSocket(9999);
//如果serverSocket没有关闭,就等待连接
while (!serverSocket.isClosed()) {
System.out.println("---我的Web服务在9999端口监听---");
//等待浏览器或者客户端来连接,得到一个socket
//该socket用于通信
Socket socket = serverSocket.accept();
//通过socket得到输出流
OutputStream outputStream = socket.getOutputStream();
//返回给浏览器或客户端
outputStream.write("hello, i am my tomcat".getBytes());
//关闭资源
outputStream.close();
socket.close();
}
serverSocket.close();
}
}
如果想检查文件,代码如下:
public class MyTomcat1 {
public static void main(String[] args) throws IOException {
//在9999端口监听
ServerSocket serverSocket = new ServerSocket(9998);
//如果serverSocket没有关闭,就等待连接
while (!serverSocket.isClosed()) {
System.out.println("---我的Web服务在9998端口监听---");
//等待浏览器或者客户端来连接,得到一个socket
//该socket用于通信
Socket socket = serverSocket.accept();
//通过socket得到输出流
OutputStream outputStream = socket.getOutputStream();
//读取html文件,返回里面的值
//得到一个文件输入流(字符输入流),和hello.html相关联
BufferedReader bufferedReader =
new BufferedReader(new FileReader("src\\main\\java\\hello.html"));
String buf = "";
while ((buf = bufferedReader.readLine()) != null){
outputStream.write(buf.getBytes());
}
//关闭资源
outputStream.close();
socket.close();
}
serverSocket.close();
}
}
二、Tomcat的使用
Tomcat:由Apache组织提供的一种Web服务器,提供对jsp和Servlet的支持。它 是一种轻量级的 javaWeb 容器(服务器),也是当前应用最广的 JavaWeb 服务器
1. 安装
Tomcat官网站点:tomcat..apache.org/
将安装包解压到相应的目录即可,我这里安装在:D:\Tomcat\apache-tomcat-9.0.39
看版本的信息可以在这个网站:tomcat.apache.org/whichversio… ,可以看到Tomcat仍然是支持jsp和el
2. 启动和关闭
-
方式1启动:点击程序启动
- 双击bin目录下的startup.bat文件就打开了,然后输入http://localhost:8080/就能显示Tomcat的主页了,如果想查看哪个端口在监听,可以使用命令`netstat =anb`去查看
-
方式2启动:使用Catalina
- 进入到Tomcat的bin目录下,进入cmd目录,执行catalina run程序,就打开了Tomcat
-
方式1关闭:直接关闭窗口
- 如果关闭黑窗口,就等于是关闭了Tomcat服务
-
方式2关闭:
- 进入Tomcat的bin目录下的shutdown.bat双击,就可以停止Tomcat服务器(推荐)
3. 目录结构
1)目录结构
- server.xml用于配置Tomcat的基本设置(启动端口,关闭端口, 主机名)
- wex.xml用于指定Tomcat运行时配置(比如Servlet等..)
- webapps目录是存放web应用,就是网站
2)如何修改Tomcat的服务端口
进入Tomcat的conf目录下,修改server.xml目录
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
如果修改建议修改端口号大于1024,最好在10000以上,修改完文件重启Tomcat生效
说明:http://localhost , 默认是访问80端口 , 即http://localhost,等价于http://localhost:80
三、Tomcat服务中部署Web应用
1. 什么是Web应用
Web应用是多个Web资源的集合。简单的说,可以把Web应用理解为硬盘上的一个目录,这个目录用于管理多个Web资源
Web应用通常也称之为Web应用程序,或Web工程,通俗的说就是网站
2. Web应用的组成
一个Web应用由多个Web资源或其它文件组成,包括html文件、css文件、js文件、动态Web页面、Java程序、支持Jar包、配置文件等。开发人员在开发Web应用时,按照规定目录结构存放这些文件。否则,在把Web应用交给Web服务器管理时,不仅可能会使Web应用无法访问,还会导致Web服务器启动报错
3. JavaWeb工程目录结构
静态文件放在目录下就行,如果是动态文件需要放在WEB-INF下
测试:
在webapps下再创建一个项目test,里面添加一个静态资源test.html,使用http://localhost:8080/test/test.html就能访问到这个文件
部署方式:
-
直接在webapps下创建项目,并且添加文件
-
通过配置文件的方式来部署
-
主要是怕如果项目存放在一个目录下,随着项目的演进,目录存储空间不足了,就需要使用映射的方式使用其他地方的空间了
-
在Tomcat下的conf目录\Catalina\localhost下,配置文件,比如说叫做abc.xml,下面映射了path叫做/abc,也就是当我们访问http://localhos:8080/abc的时候,会映射到C:\Users\16140\Pictures\Saved Pictures这个路径下,所以访问http://localhos:8080/abc/1.24.jpg,就能看到对应的静态资源了
<?Xml version="1.0" encoding="utf-8"?> <Context path="/abc" docBase="C:\Users\16140\Pictures\Saved Pictures" />
-
ROOT工程怎么访问:
- 在浏览器地址栏中输入访问地址如下:http://ip[域名]:port,没有Web工程/应用名时,默认访问的是ROOT工程
- 在浏览器地址栏中输入的访问地址如下: http://ip[域名]:port/工程名/ ,没有资源名,默认访问index.jsp页面
4. 浏览器访问Web服务器文件UML时序图(重要)
四、Idea开发JavaWeb工程
1. 创建JavaWeb工程
这里是使用Idea2020创建,new Project,新建Java项目:
如下图直接next
创建名叫fishWeb的工程
当前就是个普通的Java项目,需要添加对Web的支持
添加对framework的支持
选择Web application
然后就变成了Web项目,而不是普通的Java项目
对比这张图:
将一张fish.jpg图片放在fishWeb/web下,然后需要配置Tomcat
2. 配置Tomcat
修改Web应用的名称
然后访问http://localhost:8080/fishWeb/fish.jpg
3. 注意事项
1)热部署的两个参数分别是什么意思:
- on update action:表示当我们更新操作是,Tomcat会自动更新类和资源(当jsp/html文件修改时,可以生效,但是如果你修改的Java文件,需要Redeploy才会生效)
- on frame deactivation:表示IDEA失去焦点(比如最小化),也会导致jsp/html发生更新,但是Java修改了,还是需要Redeploy
2)如何修改端口
3)out目录是什么
当Tomcat启动时,会生成out目录,该目录就是原项目资源的映射,我们浏览器访问的资源是out目录,最终展示的时候是展示out中的内容,所以如果对out中的内容进行修改,会直接展示出来,如果对源代码进行修改,则需要编译才行
那么以哪个为准呢?如果再次编译源代码,可能会导致out中修改的内容被覆盖,所以要以源代码为准
4)当我们从外部拷贝资源到项目(图片, 文件, js , css 等), 如果出现404不能访问错误,解决方式rebulid project -> 重启Tomcat