day09-Tomcat01
Tomcat01
1.WEB开发介绍
- WEB,在英文中WEB表示网/网络资源,它用于表示WEB服务器(主机)供浏览器访问的资源
- WEB服务器(主机)上供外界访问的Web资源为:
- 静态web资源(如html页面):指web页面中供人们浏览的数据始终是不变的
- 动态web资源,比如Servlet、PHP等
- 静态web资源开发技术:HTML,CSS,JS等
- 常用动态web资源开发技术:Servlet,SpringBoot,SpringMVC,PHP,ASP.NET等
BS开发和CS开发:
1.1BS开发
B:browser(浏览器)
S:Server(服务端)
对BS的解读:
兼容性:
因为浏览器的种类很多,编写的程序可能在一个浏览器上面是正常的,在另一个浏览器上面就会出现问题
安全性:
通常情况下,BS的安全性不如CS好控制
易用性:BS好于CS,浏览器电脑有
扩展性:BS相对统一,只需要写Server端
1.2CS开发
C:Client(客户端)
S:Server(服务端)
2.JavaWeb服务软件
2.1JavaWeb服务器软件介绍
学习JavaWeb开发,需要先安装JavaWeb服务器软件(我们把安装了JavaWeb服务软件的主机称为Web服务器/JavaWeb服务器),在web服务器中开发相应的web资源
思考:学习JavaWeb开发,为什么必须要先安装WEB服务软件?
答:需要安装,理解Tomcat本质就是一个java程序,只是这个程序可以处理来自浏览器的HTTP请求,和 Javase基础的网络服务是一样的
使用netstat -anb指令打开运行端口,可以看到tomcat的监听端口的监控程序是java.exe,这说明Tomcat本质就是一个java程序,它并没有脱离底层的jdk。在启动java程序的时候启动了jre的运行环境,所以它在后台显示的监控程序是java.exe,并不是想象中的Tomcat.exe.
2.2手写简单的Web服务程序
这里会用到Java基础的IO/网络编程
hello.html:
Helloooooo! I am a web server!
MyTomcat.java:
package tomcat_demo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author 李
* @version 1.0
* 这是我们自己写的一个web服务,可以返回hello.html给浏览器
*/
public class MyTomcat {
public static void main(String[] args) throws IOException {
//1.在9999端口监听
ServerSocket serverSocket = new ServerSocket(9999);
//如果serverSocket没有关闭,就等待连接,不停地等待
while (!serverSocket.isClosed()) {
System.out.println("======我的Web服务在9999端口监听======");
//2.等待浏览器/客户端来连接,得到socket
// 该socket用于通信
Socket socket = serverSocket.accept();
//3.通过socket得到输出流
OutputStream outputStream = socket.getOutputStream();
// 返回给浏览器/客户端
//4.读取hello.html文件返回即可==>如何读取文件内容
// 得到文件字符输入流,和文件关联
BufferedReader bufferedReader =
new BufferedReader(new FileReader("src/tomcat_demo/hello.html"));
String buf = "";
//循环读取hello.html
while ((buf = bufferedReader.readLine()) != null) {
outputStream.write(buf.getBytes());//如果想展示中文字符,可以使用字符流
}
//4.关闭流
bufferedReader.close();
outputStream.close();
socket.close();
}
serverSocket.close();
}
}
http://localhost:9999/表示浏览器向localhost(127.0.0.1即本机)的9999端口发出请求
上面的整个过程就是:服务器MyTomcat在localhost主机的9999端口监听,浏览器向localhost的9999端口发送请求,服务器监听到请求后将hello.html文件的内容读取到内存中,然后通过socket将数据打入数据通道中,浏览器就拿到了数据,并将其展示在页面上
2.3常用的JavaWeb服务软件
Tomcat:由Apache组织提供的一种Web服务器,提供对jsp和Servlet的支持。它是一种轻量级的javaWeb容器(服务器),也是当前应用最广的JavaWeb服务器(免费)
Jboss:是一个遵从JavaEE规范的应用服务器,同时也是免费的
GlassFish:由Oracle公司开发的一款JavaWeb服务器,是一款商业服务器,达到产品级质量(应用很少)
Resin:是CAUCHO公司的产品,是一个非常流行的服务器,对Servlet和jsp提供了良好的支持,性能也比较优良(收费)
WebLogic:是Oracle公司的产品,支持JavaEE 规范,而且不断地完善以适应新的开发需求,适合大型项目(收费,用得不多,适合大公司)
下面主要理解Tomcat服务器
3.Tomcat
Tomcat官方文档:https://tomcat.apache.org/download-80.cgi
3.1Tomcat下载和安装
Tomcat官方站点:https://tomcat.apache.org
获取Tomcat安装程序包
- tar.gz是Linux操作系统下的安装版本
- zip是Windows系统下的压缩版本
使用zip包安装Tomcat:找到需要用的Tomcat版本对应的zip压缩包,解压到需要安装的目录即可
在官网https://tomcat.apache.org/whichversion.html,可以看到Tomcat仍然是支持JSP和EL的
3.2Tomcat启动
双击bin目录下的startup.bat文件
输入http://localhost:8080/,显示如下界面代表安装成功,默认在8080端口
注意不要关闭黑窗口,关闭了,tomcat服务就停止了
在开发中查看哪些端口在监听,可以使用命令:netstat -an
3.3Tomcat启动故障排除
双击startup.bat文件,如果出现一个小黑窗口然后就没了,原因是没有配置好JAVA_HOME环境变量
Tomcat本质是一个Java程序,所以要jdk,会去根据Java_HOME使用指定的jdk
JAVA_HOME必须全大写
JAVA_HOME中间必须是下划线
JAVA_HOME配置的路径只需要配置到jdk的安装目录即可,不需要带上bin目录
端口8080被占用了[查看端口:netstat -anb]
- 如果其他服务程序占用了8080端口,可以关闭该服务,或者修改Tomcat服务的默认端口8080
3.4Tomcat目录结构
conf目录中的server.xml文件用于配置tomcat的基本设置(启动端口,关闭端口,主机名)
conf目录中的web.xml文件用于指定tomcat运行时配置(比如Servlet等)
webapps目录是存放web应用的,也就是网站
3.5catalina启动Tomcat
在cmd中切换到Tomcat的bin目录,输入catalina run
,回车,即可启动tomcat服务
3.6关闭Tomcat
点击tomcat服务器窗口,直接点击关闭按钮
进入Tomcat的bin目录下的shutdown.bat双击,就可以停止Tomcat服务器(推荐)
在默认情况下,tomcat服务器在8080端口等待浏览器发送请求;此外还有一个监听端口8009,8009端口可以接收关闭指令shutdown。8009端口监听到关闭指令之后就会按照正常流程去关闭tomcat服务器。这种关闭方式可以正常地被写入日志中。
3.7Tomcat服务中部署web应用
什么是web应用
- WEB应用是多个web资源的集合。简单地说,可以把web应用理解为硬盘上的一个目录,这个目录用于管理多个web资源
- Web应用通常也称之为web应用程序,或web工程,通俗地说就是网站
WEB应用组成
一个web应用由多个web资源或其他文件组成,包括html文件,css文件,js文件,动态web页面,java程序,支持jar包,配置文件等。
开发人员在开发web应用时,要按照规定目录结构存放这些文件。否则,在把web应用交给web服务器管理时,不仅可能会使web应用无法访问,还会导致web服务器启动报错。
JavaWeb程序/应用/工程目录结构
部署方式1:将web工程的目录拷贝到Tomcat的webapps目录下
- news Web工程(目前都是静态html,图片)(news为工程名)
- 将该news目录拷贝到Tomcat的webapps目录下
- 浏览器输入:
http://ip[域名]:port/news/子目录.../文件名
部署方式2:通过配置文件来部署(用得不多)
在Tomcat下的conf目录/Catalina/locathost/下,配置文件,比如hsp.xml
(即,tomcat通过配置,可以把一个web应用映射到指定的目录,可以解决磁盘空间分配的问题)
访问web工程:
http://ip[域名]:port/hsp/index.html
,就表示访问D:\album目录下的index.html
ROOT工程的访问
- 在浏览器地址栏中输入的访问地址如下:
http://ip[域名]:port
,没有Web工程/应用名时,默认访问的就是ROOT工程 - 在浏览器地址栏中输入的访问地址如下:
http://ip[域名]:port/工程名
,没有资源名,默认访问的就是index.jsp页面
- 在浏览器地址栏中输入的访问地址如下:
localhost:8080/test/test.html
其中locathost:8080是你要访问的服务器,test是要访问的网站(web应用),test.html是该网站的资源
day09-Tomcat01的更多相关文章
- DAY09、函数
一.函数的定义:跟变量名的定义大同小异 1.声明函数的关键词:def 2.函数(变量)名:使用函数的依据 3.参数列表:() 参数个数可以为0到n个,但()一定不能丢,完成功能的必要条件 4.函数 ...
- Python异常处理和进程线程-day09
写在前面 上课第九天,打卡: 最坏的结果,不过是大器晚成: 一.异常处理 - 1.语法错误导致的异常 - 这种错误,根本过不了python解释器的语法检测,必须在程序运行前就修正: - 2.逻辑上的异 ...
- day09:Servlet详解
day09 Servlet概述 生命周期方法: void init(ServletConfig):出生之后(1次): void service(ServletRequest request, ...
- python开发学习-day09(队列、多路IO阻塞、堡垒机模块、mysql操作模块)
s12-20160312-day09 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- 学习日常笔记<day09>Http协议
1 Http协议入门 1.1 什么是http协议 http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范 1.2 查看http协议的工具 1)使用火狐的firebug插件(右键-> ...
- day09——初识函数
day09 函数的定义 # len() s = 'alexdsb' count = 0 for i in s: count += 1 print(count) s = [1,2,23,3,4,5,6] ...
- day09 python函数 返回值 参数
day09 python 一.函数 1.函数 函数是对功能的封装 语法: 定义函数: def 函数名(形参): ...
- Python学习day09 - Python进阶(3)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- day09 Django: 组件cookie session
day09 Django: 组件cookie session 一.cookie和session都是会话跟踪技术 1.什么是会话 可以理解为客户端和服务端之间的一次会 ...
- 358 day09字节流、字符流
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 [ ] 能够说出IO流的分类和功能 [ ] 能够使用字节输出流写出数据到文件 [ ] 能够使用 ...
随机推荐
- [WPF]WPF设置单实例启动
WPF设置单实例启动 使用Mutex设置单实例启动 using System; using System.Threading; using System.Windows; namespace Test ...
- ipi发送阻塞导致crash
3.10的内核, 在子进程退出的时候,发送信号通知父进程,此时是持有父进程的sighand中的spinlock的,然后父进程和该子进程不在一个核上,发送ipi的reschedule中断给对应的核, 但 ...
- 【java】学习路径39-Buffered缓冲输出流
import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; pu ...
- 第六十二篇:Vue的双向绑定与按键修饰符
好家伙,依旧是vue的基础 1.按键修饰符 假设我们在一个<input>框中输入了12345,我们希望按一下"Esc" 然后删除所有前面输入的内容,这时候,我们会用到按 ...
- JVM之HotSpot虚拟机是如何发起内存回收的? 转载
1.背景 在上一节中,我们掌握了垃圾收集的一些算法,也弄明白了分代回收的原理, 那么HotSpot虚拟机是如何发起内存回收的? 2.如何找到GC Roots根节点(枚举根节点) 从可达性分析中GC R ...
- 若依代码生成的一个大坑 You have an error in your SQL syntax; check the manual that corresponds to your MySQL s
报错如下所示:显示我的xml文件的SQL语句有错 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You h ...
- SpringBoot整合JWT实现登录认证
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...
- Linux系统编程001--系统IO
1. 文件系统:用来存储.组织.管理文件的一套方式.协议 2. 文件 文件的属性:i-node唯一表示一个文件的存在与否 文件的内容 3. Linux系统如何实现文件的操作? 点击查看代码 硬件层: ...
- Redis基本数据结构ZipList
为什么要有ziplist 有两点原因: 普通的双向链表,会有两个指针,在存储数据很小的情况下,我们存储的实际数据的大小可能还没有指针占用的内存大,是不是有点得不偿失?而且Redis是基于内存的,而且是 ...
- 路径参数:Path Parameters
官方文档地址:https://fastapi.tiangolo.com/zh/tutorial/path-params/ # -*- coding: UTF-8 -*- from fastapi im ...