Tomcat服务器&servlet入门程序

第1章 tomcat服务器

1.1 软件的架构
1.1.1 网络应用程序(软件)的组成
网络中有很多的计算机,它们直接的信息交流,我们称之为:交互。 在互联网交互的过程的有两个非常典型的交互方式——B/S 交互模型和C/S 交互模型。
什么是B/S 交互模型?
答:就是浏览器和服务器交互模型。
什么是C/S 交互模型?
答:就是客户端(例如:百度网盘)和服务器交互模型。
B/S 和C/S交互模型相同点和不同点:
相同点:
1.都是基于请求-响应交互模型,即:
	浏览器(客户端) 向 服务器发送 一个 请求。
	服务器 向 浏览器(客户端)回送 一个 响应 。
2.必须先有请求 再有响应
3.请求和响应成对出现
不同点:
1. 实现C/S模型需要用户在自己的操作系统安装各种客户端软件(百度网盘、腾讯QQ等);实现B/S模型,只需要用户在操作系统中安装浏览器即可。
注:B/S模型可以理解为一种特殊C/S模型。

1.2 web资源的类别
1.2.1 静态资源
指web页面中供人们浏览的数据始终是不变。比如:HTML、CSS、JS、图片、音频、视频。
1.2.2 动态资源
指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。 比如:你在不同时间搜索微博的热门话题内容是不一样的,每天的天气情况也是变化的。这些数据由程序生成,JSP/Servlet、ASP、PHP等技术都可以完成。
总结:
静态资源的数据都是写死在页面上的固定不变。
动态资源浏览器访问的结果是变化的(动态web资源你的数据都是程序读取数据库、xml等文件生成的数据)。
1.3 服务器的概念
1.3.1 什么是服务器
服务器就是一个软件,任何电脑只需要安装上了服务器软件,然后该电脑的指定目录下的资源就能提供对外访问。
1.4 服务器的作用
1.4.1服务器的作用
提供计算服务的设备,服务类型有很多,常见的有:游戏服务,购物服务,新闻服务等。

在这里插入图片描述

1.5 常见的服务器软件
1.5.1 常见的服务器软件介绍
1. WebLogic
Oracle公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范。WebLogic是用于开发、集成、部署和
管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
2. WebSphere
IBM公司的WebSphere,支持JavaEE规范。WebSpher是随需应变的电子商务时代的最主要的软件平台,可用于企业开发、部署和整合新一代的电子商务应用。
3. Glass Fish
最早是Sun公司的产品,后来被Oracle收购,开源,中型服务器。
4. JBoss
JBoss公司产品,开源,支持JavaEE规范,占用内存、硬盘小,安全性和性能高。
5. Tomcat
中小型的应用系统,免费开源,支持JSP和Servlet。
注意:今天我们学习和使用的是tomcat服务器。
1.6 tomcat服务器软件安装和介绍
Tomcat基本概述:
Tomcat服务器是一个免费的开放源代码的Web应用服务器。Tomcat是Apache软件基金会(Apache SoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet 和JSP规范总是能在Tomcat中得到体现。
因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,是目前比较流行的Web应用服务器。
1.6.1 tomcat服务器软件下载
	1.先去官网下载:http://tomcat.apache.org/,选择tomcat8版本(红框所示):

在这里插入图片描述

	2. 选择要下载的文件(红框所示):

在这里插入图片描述

		tar.gz 文件 是linux操作系统下的安装版本
		exe文件是window操作系统下的安装版本
		zip文件是window操作系统下压缩版本(我们选择zip文件)
		3. 下载完成:

在这里插入图片描述

		 1.6.2 tomcat服务器软件安装
			1. 直接解压当前这个tomcat压缩包:
			2. 配置环境变量:
			tomcat运行依赖于java环境:

在这里插入图片描述

	1.6.3 启动与关闭tomcat服务器
	1. 启动tomcat服务器
	查找tomcat目录下bin目录,查找其中的startup.bat命令,双击启动服务器:

在这里插入图片描述
在这里插入图片描述

2. 测试访问tomcat服务器
打开浏览器在,在浏览器的地址栏中输入:
http://127.0.0.1:8080
http://localhost:8080

在这里插入图片描述

注: Localhost相当于127.0.0.1
3. 关闭tomcat服务器
常用方式1:查找tomcat目录下bin目录,查找其中的shutdown.bat命令,双击关闭服务器:

在这里插入图片描述

常用方式2:可以点击cmd窗口的退出按钮
1.6.4 tomcat安装常见的问题
1. 无法启动(闪退:cmd命令窗口出现一下,就消失):
主要原因:没有配置JAVA_HOME环境变量。 JAVA_HOME 环境变量 中配置的是JDK的安装目录,不包含bin目录,不是tomcat的安装目录。
闪退的原因查看:可以在startup.bat文件末尾书写pause命令。让运行的窗口暂停。
效果:

在这里插入图片描述

2.端口被占用导致启动失败
如果启动的时候,发生异常问题,这时有可能是端口被占用。
Tomcat服务器在启动的时候默认占用本地的8080端口,如果这个端口被占用,启动的时候就会报错。
报错内容可以通过查询tomcat目录下的logs目录中Catalina.当前系统年月日.log文件查看,如下图:

在这里插入图片描述

我们需要做的是查看本地端口使用情况,关闭占用端口的程序: 在dos窗口中输入 netstat –nao 就可以查看。
当前端口的占用情况:

在这里插入图片描述

使用任务管理器---->选择详细信息---->查看pid为11604(查询出来的 值),关闭结束进程即可:

在这里插入图片描述

注意:如果这个进程是操作系统的任务进程,这时一般是不能停止这个进程。
如果是系统进程占用端口,那么我们只能换一个端口,下面看如何修改端口:
3. 修改tomcat启动端口
Tomcat服务器的配置文件,全部都在tomcat的安装目录下conf目录下:

在这里插入图片描述

server.xml:服务器端口配置、服务器自身配置文件
打开server.xml,修改服务器端口:

在这里插入图片描述

修改tomcat的端口为9090:
修改完server.xml文件必须重启服务器才能有效。 通过浏览器的地址栏访问测试:http://localhost:9090
1.7 web项目目录结构(重要)
在JavaEE规范中,WEB项目存在一定的目录结构,具体结构如下:

在这里插入图片描述

1.8 tomcat的发布项目方式
1.8.1 在webapps文件夹下面直接发布
只要将准备好的web资源直接复制到tomcat/webapps文件夹下,就可以通过浏览器使用http协议访问获取
创建aaa文件夹:

在这里插入图片描述

定义一个html文件,内容为:
<h1>Hello Tomcat</h1>
1.8.2 使用虚拟路径的方式发布项目(两种方式)
1.第一种:配置server.xml,添加context标签
第一步:在c盘work目录下创建一个文件夹为aa,在aa文件夹中添加一个1.html文件内容为:hello world!!!

在这里插入图片描述

第二步:在tomcat/conf/server.xml中找到标签,添加标签,如图所示:

在这里插入图片描述

注:这一种方式有一个缺点,就是server.xml是tomcat核心文件一旦出错,导致整个tomcat无法启动。
2. 第二种:配置独立xml文件
第一步:在tomcat/conf目录下新建一个Catalina目录(如果已经存在无需创建)

在这里插入图片描述

第二步:在Catalina目录下创建localhost目录

在这里插入图片描述

第三步:在localhost中创建xml配置文件,名称为:second(注:这个名称是浏览器访问路径)

在这里插入图片描述

第四步:添加xml文件的内容为:
第五步:在C:\work\bb下创建1.html,内容为“hello tomcat!!!”,访问测试

在这里插入图片描述

第二种发布方式的优点:无需重启服务器自动加载和卸载项目
演示: 在second.xml创建一个bak文件夹,将second.xml移动到bak文件夹之后:

在这里插入图片描述

服务器自动卸载项目:

在这里插入图片描述

将second.xml移动回到localhost目录下:

在这里插入图片描述

服务器自动加载项目(需要等待一会儿时间):

在这里插入图片描述

1.9 IDEA中配置tomcat
因为我们开发的时候都是用IDE,所有我们要将idea和tomcat集成到一起,可以通过idea就控制tomcat的启动和关闭:
1.9.1 在工程中配置tomcat服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击OK回到配置目录,然后再次点击"Configure"
	此步不操作的话,会出现两个名称的服务器,一个"tomcat8",一个"Tomcat 8.5.27";前者不能使用,后面这个才是真正配置好的服务器,若不配置以下步骤,服务器也可以使用,都是使用"Tomcat 8.5.27".为了避免这种现象建议操作此步.

在这里插入图片描述
在这里插入图片描述

点击ok回到项目区,此时tomcat就配置完成了.
		注意:在一个项目中,以上的配置只需要配置一次即可.
1.9.2 测试配置
1.创建web项目:

在这里插入图片描述
在这里插入图片描述

给模块起个名字,点击finish即可

在这里插入图片描述

2.配置访问路径

在这里插入图片描述
在这里插入图片描述

修改完成之后就可以启动tomcat服务器了.

在这里插入图片描述

3.浏览器测试访问
在项目下的web/WEB-INF下有一个index.jsp,当我们启动成功的时候就会访问
http://localhost:9090/day02
访问的就是day02下的index.jsp页面

第2章 Servlet入门

2.1 Servlet2.5实现Hello world例子
2.1.1 servlet的基本概述
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范,用来处理客户端请求、响应给浏览器的动态资源。
但servlet的实质就是java代码,通过java的API动态的向客户端输出内容
1. 查阅JavaEE手册(帮助文档)阅读Servlet规范:

在这里插入图片描述

根据文档总结,书写servlet一个三个步骤:
1)创建一个class实现servlet接口
2)重写service方法
3)创建的类必须在web.xml文件中做配置
2. 为什么要做配置?
答:必须将请求路径和java程序的对应关系建立起来。
2.1.2 servlet与普通的java程序的区别
	1.必须实现servlet接口
	2.必须在servlet容器(服务器)中运行
	3.servlet程序可以接收用户请求参数以及向浏览器输出数据
2.1.3 代码实现servlet的步骤
	1. 在工程下创建cn.itcast.web包,在包下创建一个类实现 Servlet接口
	2. 实现service方法
	3. 在web.xml中配置书写好的servlet
2.1.4 servlet代码实现
在cn.itcast.web包下创建一个类实现Servlet接口

在这里插入图片描述

servlet代码:
Web.xml配置(该文件在web/WEB-INF 文件夹下):
package cn.itcast.web;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class DemoServlet implements Servlet{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws
ServletException, IOException {
System.out.println("第一个servlet程序");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
Web.xml配置(该文件在web/WEB-INF 文件夹下):
<?xml version="1.0" encoding="UTF‐8"?>
<web‐app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web‐app_2_5.xsd"
version="2.5">
<servlet>
<servlet‐name>DemoServlet</servlet‐name>
<servlet‐class>cn.itcast.web.DemoServlet</servlet‐class>
</servlet>
<servlet‐mapping>
<servlet‐name>DemoServlet</servlet‐name>
<url‐pattern>/demo</url‐pattern>
</servlet‐mapping>
</web‐app>
打开浏览器访问:
http://localhost:9090/day02/demo
就可以在idea的控制台看到输出了"第一个servlet程序"
2.2 Servlet3.0实现Hello world例子
2.2.1 Servlet2.5与Servlet3.0的区别
Servlet3.0相较于Servlet2.5:
新增了一些注解,简化的javaweb代码开发,可以省略web.xml配置文件 支持异步处理(多线程技术) 支持可
插性特性(书写的代码编译后生成的class文件可以直接部署到其他项目的,自动加载执行)
2.2.2 代码实现Servlet3.0步骤(注解配置servlet演示)
	1. 创建JavaEE6(含6)以上的工程
	2. 创建servlet,在@WebServlet注解中添加urlPatterns = "/hello",作为请求路径
2.2.3 注解开发servlet代码演示
	1. 创建JavaEE6(含6)以上的工程:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.注解开发servlet代码演示:
package cn.itcast.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
//name = "HelloServlet":servlet名称,相当于web.xml中的<servlet‐name>
//urlPatterns = "/hello":servlet的访问路径,相当于<url‐pattern>
@WebServlet(name = "HelloServlet",urlPatterns = "/hello")
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("HelloServlet执行.......");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
配置项目路径(配置过程参照1.9.2中第二步),启动tomcat服务器测试
浏览器地址栏输入:http://localhost:8080/servlet2/hello
测试成功:

在这里插入图片描述

第3章 Servlet的体系结构

3.1 Servlet的体系结构概述
目前我们已经学会创建一个类实现sevlet接口的方式开发Servlet程序,实现Servlet接口的时候,我们必须实现接口的所有方法。但是,在servlet中,真正执行程序逻辑的是service,对于servlet的初始化和销毁,由服务器调用执行,开发者本身不需要关心。因此,有没有一种更加简洁的方式来开发servlet程序呢?
我们先来查阅API回顾Servlet接口:

在这里插入图片描述

由上图可知在servlet接口规范下,官方推荐使用继承的方式,继承GenericServlet 或者HttpServlet来实现接口,那么我们接下来再去查看一下这两个类的API:
GenericServlet :

在这里插入图片描述

阅读上图API可知,GenericServlet 是一个类,它简化了servlet的开发,已经提供好了一些servlet接口所需的方法,我们开发者只需要重写service方法即可   
我们来使用GenericServlet 创建servlet:
1. 创建一个类
2. 继承GenericServlet
3. 重写service方法
package cn.itcast.web;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(name = "GenericDemoServlet",urlPatterns = "/generic")
public class GenericDemoServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws
ServletException, IOException {
System.out.println("GenericDemoServlet执行.......");
}
}
	虽然,GenericServlet已经简化了servlet开发,但是我们平时开发程序需要按照一种互联网传输数据的协议来开发程序——http协议,因此,sun公司又专门提供了HttpServlet,来适配这种协议下的开发。
HttpServlet:

在这里插入图片描述

阅读上图的API可知,继承HttpServlet,我们需要重写doGet、doPost等方法中一个即可,根据Http不同的请求,我们需要实现相应的方法。
我们来使用HttpServlet创建servlet:
    1. 创建一个类
    2. 继承HttpServlet
    3. 重写doGet方法
package cn.itcast.web;
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(name = "HttpDemoServlet",urlPatterns = "/http")
public class HttpDemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
System.out.println("HttpDemoServlet执行.......");
}
}
通过以上两个API阅读,同学们注意一个细节HttpServlet是GenericServlet的子类,它增强了GenericServlet一些功能,因此,在后期使用的时候,我们都是选择继承HttpServlet来开发servlet程序。虽然目前开发servlet的选择继承类,已经确定,但是另一个问题一直还在我们头脑中,那就是我们学的这些浏览器、服务器、servlet等,到底是如何运行的?
那么接下来,我们来看看servlet的运行原理。
3.2 servlet运行原理

在这里插入图片描述

总结
通过上述流程图我们重点需要掌握如下几个点:
1. Servlet对象是由服务器创建
2. request与response对象也是由tomcat服务器创建
3. request对象封装了浏览器过来的所有请求信息,response对象代表了服务器的响应信息 

第4章 Servlet生命周期

4.1 Servlet生命周期的概述
4.1.1 什么是生命周期
一个对象从创建到消亡的过程,就是生命周期。因此,对Servlet生命周期的学习,我们就是研究Servlet什么时候生,什么时候死。
4.2 servlet生命周期相关的方法
首先我们来回顾servlet接口的文档内容,其中一部分如图所示:

在这里插入图片描述

4.2.1 API 介绍
上图中,我们注意到两个点,servlet的创建和销毁由两个相关的方法init方法和destroy方法
void destroy() 销毁servlet的方法
void init(ServletConfig config) 初始化servlet的方法
我们可以调用测试一下这两个方法:
4.2.2 使用步骤
1. 创建LifeCircleServlet初始化
2. 复写init、service、destroy方法
3. 访问servlet测试初始化LifeCircleServlet
4. 关闭服务器测试销毁LifeCircleServlet
4.2.3 演示代码
package cn.itcast.web;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
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(name = "LifeCircleServlet",urlPatterns = "/life")
public class LifeCircleServlet extends HttpServlet {
@Override
public void init() throws ServletException {
super.init();
System.out.println("LifeCircleServlet初始化。。。");
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException,
IOException {
System.out.println("LifeCircleServlet执行。。。");
}
@Override
public void destroy() {
super.destroy();
System.out.println("LifeCircleServlet销毁。。。");
}
}
效果:
访问servlet:
LifeCircleServlet初始化。。。
LifeCircleServlet执行。。。
关闭tomcat服务器:
LifeCircleServlet销毁。。。
4.3 servlet生命周期流程
虽然简单使用过了servlet生命周期相关的方法,但是servlet从创建到销毁的过程对大家来说还是没说清楚,因此,我们以时序图的方式给大家展示了servlet的运行过程,注意图中每一步都由序号,按照序号查看每一个步骤。

在这里插入图片描述

附:servlet在初始化一次之后,就不再创建,因此如果多次访问同一个servlet的效果是这样的:
LifeCircleServlet初始化。。。
LifeCircleServlet执行。。。
LifeCircleServlet执行。。。
LifeCircleServlet执行。。。
因此servlet是一个单例对象
  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

柯基与德牧

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值