Tomcat详解
1.1Tomcat是什么
HTTP服务器是在TCP服务器的基础上,添加了一些额外的功能,让其能够解析请求中的HTTP报文,并将请求转换为结构化数据(对象),方便构造HTTP的响应.
而Tomcat是Java圈子里面最出名的一中HTTP服务器
1.2Tomcat下载
https://tomcat.apache.org/
注:要下载与自己JDK-相对应的版本,(小版本无所谓).
注:选择其中zip的压缩包,下载解压缩时候的目录最好不要带"中文"或者特殊符号
下载完成后-找到对应的文件目录-这里具体解释下目录作用
①bin目录下主要为:Tomcat的一些脚本-重要点为:start,开启Tomcat文件
.bat的后缀的文件,是Windows的批处理文件 .
sh后缀的文件,是Linux的shell的脚本文件
②conf 里面主要是 Tomcat的一些配置文件,这些配置文件是通过xml的形式来组织的.而想要修改配置文件在这个里面修改
③logs文件夹下主要是Tomcat的运行日志
④webapps 里面主要防止部署的Servlet程序,每个Servlet程序,都是一个war后缀的文件.而Tomcat会自动把这个war解压缩,得到一个目录
注: Tomcat安装好,输入这个127.0.0.1:8080网址会出现,Tomcat的默认欢迎页面
1.3启动Tomcat
在bin目录下点击,startup.bat(windows操作系统下),下面这句话代表着Tomcat启动成功
至于为什么会是乱码,原因为:Tomcat内部编码方式是UTF-8,而Windows中的CMD默认为GBK编码方式(如果想改,得去修改注册表中(慎重))
Tomcat启动不成功的原因
①环境变量的问题-有可能是找不到JDK-解决办法,把脚本扔到CMD中找到环境变量手动配置
下图是环境变量
②端口号被占用,Tomcat一般启动绑定俩个端口号8080,8005如果端口号被占用那么Tomcat一定会启动失败,解决方案:关闭开启占用了8080,8005的端口程序,或者给Tomcat换个端口在之前的conf中找到配置文件修改
访问HTML的俩种方式
①通过Tomcat访问-别人可以访问-需要外网IP(如何最简单得到一个外网IP-买一个云服务器)
②通过本地路径-别人不能访问
1.4Tomcat的使用方法
;主要部署HTML页面,
简单的页面直接放到,Webapps中的root中
而复杂的页面更好的做法是:直接在Webapps中创建一个目录
以上是基于Tomcat来部署静态页面,页面内容是固定不变的,而Tomcat主要为生成动态页面代培Servlet来创建
静态页面和动态页面
注:**静态页面:**指的是即使用户不同/时间不同/输入的参数不同 , 页面内容也不会发生变化.
注:动态页面:指的就是 用户不同/时间不同/输入的参数不同, 页面内容会发生变化
部署静态页面
将之前的HTML文件创建一个文件夹,扔到Webapps中,然后在浏览器中输入环回地址,进行访问
http://127.0.0.1:8080/HelloApp/hello2.html
这里博主还没有云服务器,等买上了再写动态与利用服务器访问
Tomcat的作用
1.通过本地文件的方式只能打开静态页面, Tomcat 既可以处理静态页面, 也可以处理动态页面.
2. 本地文件的方式只能打开你自己机器上的 HTML, 无法访问别人机器的 HTML. 而通过Tomcat, 配合云服务器, 则可以让别人也访问到你的页面.
Servlet-使用方法
2.1Servlet前置知识
2.1.1Servlet是什么,有什么用?
上文提到了,Tomcat主要为部署动态页面的作用,而Servlet就是一种实现动态页面的技术,是Tomcat提供给程序员的API,能帮助咱们高效开发.
2.1.2 Servlet提供的功能
①允许我们注册一个类, 在 Tomcat 收到某个特定的 HTTP请求的时候, 执行这个类中的一些代码.
②帮助我们解析 HTTP 请求, 把 HTTP 请求从一个字符串解析成一个 HttpRequest 对象.
③帮助我们构造 HTTP 响应. 我们只要给指定的 HttpResponse 对象填写一些属性字段, Servlet
就会自动的安装 HTTP 协议的方式构造出一个 HTTP 响应字符串, 并通过 Socket 写回给客户端.
2.1.3Servlet的意义
Servlet 是一组 Tomcat 提供的 API, 让程序猿自己写的代码能很好的和 Tomcat 配合起来, 从
而更简单的实现一个 web app. 而不必关注 Socket, HTTP协议格式, 多线程并发等技术细节, 降低了 web app 的开发门槛, 提高了开发效率.
2.2 Servlet的搭配环境
2.2.1 MAVEN
maven是Java生态中著名的构建工具:核心功能:(管理依赖,构建/编译,打包)就是将这些操作一键打包
2.2.1.1 下载maven
https://maven.apache.org/
2.2.1.2 使用maven
1:创建1个maven项目
2:引入依赖:把Servlet的jar包给引入过来(JDK,Tomcat,Servlet三者版本要配套 )
3:创建目录结构:webapp/WEB-INF/web.xml 这个.xml是maven的核心配置文件
这些目录中:
①src 表示源代码所在的目录
②main/java 表示源代码的根目录. 后续创建 .java 文件就放到这个目录中.
③main/resources 表示项目的一些资源文件所在的目录. 此处暂时不关注.
④test/java 表示测试代码的根目录. 此处暂时不关注
⑤用来进行交互,在web.xml中复制以下代码
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
4.使用maven:这里面所列出来的内容都是可以通过maven操作的 其中:最常用Packet打包操作
5:maven管理依赖-一个项目可以引入多个依赖
中央仓库
①先去中央仓库,找到驱动包
中央仓库链接: https://mvnrepository.com/repos/central
②然后把maven标签下的xml赋值下来
③把这个内容粘贴到pom.xml
④如果看到下图,说明maven依赖引入成功
3. 编写servlet代码
前置条件-在刚才的Maven项目中,或者新建一个maven项目并且按照上述流程配置
①创建一个类,继承自HTTPServlet
②重写里面的doGet/doPost等方法:该方法的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个方法会在 Tomcat 收到 GET 请求时触发
③需要给这个类加上一个@WebServlet注解(这个注解表示 Tomcat 收到的请求中, 路径 相同的请求才会调用 HelloServlet 这个类的代码).
④ 服务器的工作流程
1:接受请求并响应
2:根据请求计算响应-代码要完成的
3:构造响应函数,并返回给客户端
⑤:打包-使用maven来打包,1.先修改下pom.xml的配置,改成war.打包的文件名,
⑥:部署,把war包拷贝到Tomcat的webapps中下面,然后启动 Tomcat , Tomcat 就会自动把 war 包解压缩
⑦:在网页上面输入127.0.0.1:8080/第一级目录(context path)/第二级目录(Servlet path)
(博主的画图能力实在有限)
注: smart Tomcat 可以包装5/6操作,变成一键操作
服务器编写代码如下
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/hello")
//将这个helloServlet这个类,与http请求中的URL里面带有/hello这样的请求给关联起来了
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*不能调用父类的duget*/
// super.doGet(req, resp);
//让服务器在自己的控制台中打印
System.out.println("hello world");
//让在页面上输出getWrite返回了一个write对象,write是往http响应的body中写入
resp.getWriter().write("hello world"+"时间戳"+System.currentTimeMillis());
}
}
Servlet更方便的提交方式
手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法. 此处我们使用 IDEA 中的 Smart Tomcat 插件完成这个工作
安装步骤
①
②
③ 重启IDEA
④点击这里增加插件
⑤配置smart Tomcat
在 Tomcat Server 这一栏选择 Tomcat 所在的目录. 其他的选项不必做出修改.
⑥点击绿色的三角号, IDEA 就会自动进行编译, 部署, 启动 Tomcat 的过程.
⑦在浏览器中使用 http://127.0.0.1:8080/一级地址/二级地址 访问页面
常见的访问出错及解决原因
①出现404:
404 表示用户访问的资源不存在. 大概率是 URL 的路径写的不正确.
查看一级路径与二级路径及web.xml中的内容
②出现405
405 表示对应的 HTTP 请求方法没有实现.
查看doGet/doPost请求
③出现500
往往是 Servlet 代码中抛出异常导致的.
仔细查看报错信息
④出现空白页面
没有增加写入操作resp.getWritter().write() 操作.
⑤出现无法访问网站
一般是 Tomcat 启动就失败了
3.1什么时候浏览器发的是Get请求?
①直接在地址栏中,输入URL
②通过 a 标签跳转
③通过 img/link/script
④通过form表单,method指定为get
⑤通说Ajax ,type指定为Get
3.2什么时候浏览器发送的post请求?
④通过form表单,method指定为post
⑤通说Ajax ,type指定为post
Servlet运行原理
Servlet是属于上层建筑,下面的传输层,网络层,数据链路层…属于经济基础
Tomcat也是一个应用程序,运行在用户态的普通进程(也是Java进程)
用户写的代码(根据请求计算响应),通过Servlet与Tomcat进行交互
Tomca在进一步的和浏览器之间进行网络传输,仍然是封装和分用