JavaWeb之tomcat的使用
一、软件架构
网络中有很多的计算机,它们之间进行信息的交流称为交互。
在交互的过程中有两个非常典型的交互方式:
- C/S 交互模型(架构)client /server 客户端/服务器模型,例如:QQ,绝地求生,LOL等
- B/S 交互模型(架构)brower/server 浏览器/服务器模型,例如:天猫,京东,知乎等网站
C/S优缺点:
- 优点:页面效果好,运行效率高
- 缺点:开发,发布,维护比较繁琐,更新及其麻烦
B/S优缺点:
- 优点: 传输数据少,不需要下载特殊软件,更新速度快
- 缺点: 页面效果较差
B/S和C/S的共性:
都是基于请求/响应的模型,必须先有请求再有响应,请求和响应式成对出现的,有请求必然对应有响应。
- 请求(
request
):浏览器给服务器的内容 - 响应(
response
):服务器给浏览器的内容
二、Web知识概述
- web技术:开发网站的技术
- JavaWeb技术:用java技术开发网站
JavaWeb本质是将本地资源发布到互联网上,从而让所有用户能够访问到。
2.1 URL定义
URL(Uniform Resource Locator)统一资源定位符
URL是基于B/S的访问,由协议、域名和端口组成。
- 传输协议:规定了数据传输的规则
- 域名:通过DNS协议将IP地址和域名对应起来
- 端口:应用程序在计算机中唯一标识,取值在0-65536内,1024以前大多被系统占用
2.2 服务器
服务器: 使用代码编写的一个可以根据用户请求实时的调用执行对应的逻辑代码的一个容器,能够管理资源和发布内容,通俗来讲,服务器是比个人电脑性能更高级别,安装了特殊软件的电脑。
服务器作用:接收用户的请求,处理请求,做出响应
服务器主要能够存放的内容是:
- 静态资源: 不同用户访问同一个页面,看到的内容是一样的,静态资源可以直接被浏览器解析
- 动态资源: 不同用户访问同一个页面,看到的内容可能不一样(该资源会变化),动态资源被访问后,需要先转换成静态资源,再返回给浏览器
开发常用服务器:
- tomcat(小型服务器): 由Apache基金组织提供,免费开源,需要自己维护,只支持两套规范
servlet/jsp
- weblogic(大型服务器): 由oracle公司推出的经典的产品,支持javaEE十三套规范,是一个重量级服务器,使用需要付费
- websphere(中大型服务器): 由IBM推出,简称was,支持javaEE十三套规范,是一个重量级服务器,使用需要付费
规范:就是由一组接口和抽象类组成的标准。
2.3 互联网应用和传统应用的区别
- 传统应用:企业级应用,如办公自动化系统,CRM客户关系管理系统,ERP企业资源管理系统等,这些应用都很成熟,支持JavaEE多套规范,大多面向特定的人群如企业员工等
- 互联网运用:如京东,淘宝,百度等,由不同的的资源吸引不同的用户,只要能接入互联网的人都可以访问,访问方式和访问时间不定
所以互联网应用和传统应用最大的区别就是访问的用户不同。
三、tomcat
3.1 下载
下载地址:http://tomcat.apache.org/
一般使用8.5以后的版本。
3.2 安装
解压即安装
注意:
- 任何安装路径不要出现中文或者特殊符号
- tomcat是由 java软件开发的 必须要基于java的环境才可以运行
解压完后的目录如下:
测试是否能运行:
- 进入bin目录 打开 startup.bat 文件
- 输入地址栏 http://localhost:8080/
启动时遇到问题及解决方法:
命令行窗口一闪而过:
-
本地端口冲突,端口被另一个tomcat占用,解决方法是在
conf
中找到server.xml
修改端口; -
系统安装了某些特殊的软件,解决方法暂无;
-
jdk环境不对,解决方法是重新配置环境变量;
-
window不兼容,解决方法是换版本
启动时产生很多异常,但是服务器正常启动了:
- 通常情况下是在tomcat中部署的应用报错,需要把报错的应用找到,解决错误
- 如果不好解决,那么就解压一个新的tomcat
3.3 tomcat服务器与idea的结合
在idea中配置tomcat:
1.找到Edit Configurations
2.找到Tomcat Server:
3. 命名:
4. 找到本地Tomcat资源包并添加
3.4 JavaWeb工程的目录结构
应用开发目录与应用发布目录:
3.5 JavaWeb工程的发布
JavaWeb工程的发布有两种方式
- 手动发布
- 通过IDEA创建JavaWeb
3.5.1 手动发布
在tomcat下的webapps
目录中,一个文件夹就代表有一个应用,所以只要把应用文件夹全部拷贝到webapps
目录中就发布了。
3.5.2 通过IDEA创建JavaWeb
3.5.2.1 创建JavaWeb工程
tomcat支持发布javaEE程序,不支持 javaSE程序,也不支持发布static Web程序。
3.5.2.2 配置tomcat服务器
配置虚拟主机:
- 主机一般就是IP地址。早期是IPV4,随着互联网设备的急剧增加,数量不够用,又出现了IPV6
- 由于IP地址不好记,所以出现了
DNS(Domain Named Server(System,Service))
域 名服务,将域名与IP对应,如www.baidu,com
对应的IP为220.181.38.150
在我们电脑上,有一个建立域名和ip地址对应关系的文件
C:\Windows\System32\drivers\etc\hosts
文件
配置虚拟目录:
- 第一种方式,在tomcat的
conf
目录中的server.xml
中,通过添加配置实现
<Context path="/mywebapp" docBase="D:\mywebapp" />
path:
用于指定访问应用的名称
注意,必须以 / 开头
docBase:
用于指定项目资源的磁盘路径
- 第二种方式,在tomcat的
conf
目录中的Catalina
目录下,有一个localhost
目录,在该目录中创建一个xml文件,文件名不要使用中文,不要有特殊符号,也不要有空格
注意:当我们使用了独立的xml文件之后,访问应用的名称就变成了xml的文件名,path属性就没用了。
3.6 访问
使用URL访问资源
http://localhost:8080/myfirstwebapp/index.html
协议 主机 端口 URI
URI
/myfirstwebapp/xxxx/index.html
应用发布名称 路径 资源名称
在https://www.baidu.com/
中,端口、应用名和资源都是默认值。
- 端口默认值80
- 应用名是默认值,名称就是大写ROOT
- 资源也是默认值(index.html或index.jsp)
四、Http协议
4.1 Http协议概述
浏览器和服务器之间需要满足一定的规则,才可以正常进行交互。
协议就是浏览器与服务器交互的一组规则和约定。
http协议它是客户浏览器和服务器之间的一种一问一答的规则,也是一种固定格式。
特点:
- 一问一答
- 有问有答
- 先问后答
问:请求;答:响应
4.2 Http协议不同版本的区别
- 1.0版本
创建连接→发送请求→响应结果→关闭连接→创建连接→发送请求→响应结果…
反复执行
- 1.1版本(主要使用的版本)
创建连接→发送请求1→接收响应1→发送请求2→接收响应2→…→超时关闭(手动关闭)
- 2.0 版本
非常新,加载速度比较快,但是支持的网站比较少
4.3 HTTP协议的主要组成
4.3.1 请求部分
请求行
POST
请求的方式/web_war_exploded/index.jsp
请求的URIHTTP/1.1
协议的版本
请求消息头:服务器与浏览器通讯的特殊代码
请求体:
- 浏览器向服务器请求的内容,
GET
方式没有请求体,请求内容在地址栏。默认情况下,请求正文的体现形式是:key=value
的形式,在表单提交图片时会变成其他形式。
<form action="index.jsp" method="POST" enctype="multipart/form-data">
用户名:<input type="text" name="username" value=""/><br/>
密码:<input type="password" name="password" value=""/><br/>
头像:<input type="file" name="photo" value=""/><br/>
<input type="submit" value="登录"/><br/>
</form>
action:请求的地址
method:请求的方式
enctype:编码表单的类型(MIME类型),默认application/x-www-form-urlencoded,
文件上传时取值multipart/form-data
4.3.2 响应部分
响应行:
HTTP/1.1
协议的版本200
响应状态码 200表示一切正常
响应消息头:服务器与浏览器通讯的特殊代码
响应体:内容与网页源代码的内容是一样的
常用状态码
- 200:一切正常
- 404:请求资源未找到
- 405:当前请求方式不被支持
- 302/307:请求重定向
- 500:服务器内部错误
消息头:服务器与浏览器通讯的特殊代码
- 英文的首字母大写,多个单词时,每个单词的首字母都大写
- 消息头名称和值之间,用冒号和空格分隔
- 一个消息头可以包含多个值,每个值之间用逗号和空格分隔。
- 多个消息头是换行分隔