总结28 WEB服务器中Tomcat和Servlet的应用

WEB服务软件的简介

WEB服务软件可以开启最基础的WEB服务,这样的话,这台电脑就会成为一个网站
常用的开启WEB服务的软件有以下几种.
一.ebLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
二.webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
三.JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

四.Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。我们用的就是这一种

何谓规范呢?Java语言在企业级开发(JavaEE)中使用的技术规范的总和,一共规定了13项大的规范

Tomcat WEB软件的使用

下载与安装和卸载

一.下载
官网下载:http://tomcat.apache.org/
我自己用的版本: https://pan.baidu.com/s/1LpnWGMEEXdgxubzs4MEerw 提取码: ig4c

二.安装
解压压缩包即可。
注意:安装目录建议不要有中文和空格
在这里插入图片描述

三.卸载
删除目录就行了

使用

运行bin目录下的startup.bat文件即可启动
接着浏览器输入:http://IP地址:端口号
列如:

http://127.0.0.1:8080

Tomcat的默认WEB端口为8080

常见问题

一.黑窗口一闪而过
原因: 没有正确配置JAVA_HOME环境变量
解决方案:正确配置JAVA_HOME环境变量

二.启动报错
原因:端口占用
方案一 解除端口占用的程序找到占用的端口号,并且找到对应的进程,结束该进程
打开cmd,输入netstat -ano查询所有端口信息
方案二 更改端口修改Tomcat的端口号

关闭

方式一
运行bin目录下的shutdown.bat文件来关闭
方式二
单击dos窗口,按ctrl+c关闭
方式三
点击启动窗口的×

修改端口号

打开conf目录下名为’server.xml’文件
找到标签’Connector’,其中’port’的属性值就是端口号.
列如:

<Connector port="8888" protocol="HTTP/1.1"
		               connectionTimeout="20000"
		               redirectPort="8445" />

一般会将tomcat的默认端口号修改为80。好处是在访问时,不用输入端口号

在Tomcat中部署WEB项目的三种方式

方式一:直接将项目目录放置到tomcat的目录下
比如有一个web项目目录,名字叫’hello’.那么我将这个项目目录复制到’apache-tomcat-8.5.31’目录下就能访问了.例如:127.0.0.1:8080/hello/index.jps
hello:项目的访问路径–>虚拟目录
访问格式:http://ip地址:端口/项目目录/web文件

方式二:war自解压项目方式
'war包’是一个由zip演变来的压缩包.他是tomcat的一个特殊特性,在tomcat目录下,只要有’war’包格式的文件,tomcat会先判断该war包是否被解压,如果没有被解压,那么tomcat将会解压该war包文件.
也就是说,先将项目目录压缩成zip格式,然后更改为war格式.再将war包放置到目录下。
注意:推荐放到webapps目录下

方式三:配置conf目录下的server.xml文件(不推荐)
打开conf目录下的server.xml文件
<Host>标签体中配置,配置一个Context自闭标签,Context的标签属性就是配置信息.
属性名’docBase’:项目文件所在的存放路径
属性名’path’:要映射到的目标虚拟目录
列如:

				<Context docBase="D:\hello" path="/hehe" />

方式四:通过创建配置文件,来部署( 推荐! 推荐! 推荐!)
打开conf目录,再打开Catalina目录,然后在其’localhost’目录下创建一个任意名称的xml文件。接着在文件中编写如下格式的代码:

<Context docBase="项目目录的路径"/>

列如:

<Context docBase="D:\develop\wwwhtml"/>

注意,在这种方式中,网址中虚拟目录的名字就是xml文件的名称
如:我在conf\Catalina\localhost目录下创建了一个’webhtml.xml’文件.将该标签写入到了该文件中.
那么我访问的网页路径就是:http://127.0.0.1:8080/webhtml/hello.html
其中,'hello.html’是本地真实路径’d:\develop\wwwhtml"中存在的html文件.

在这里插入图片描述

在IDEA中集成Tomcat服务

意义

目的是为了在编写WEB项目时,能够更方便地使用Tomcat服务,
这样一来,就不用费那个劲儿将什么WEB项目放到Tomcat目录下再去麻烦地部署

将Tomcat服务集成到IDEA

一,单击IDER上方菜单栏的’Run’,再单击’Edit Configurations
在这里插入图片描述
二.单击’Templates’选项,再单击’Tomcat Server’选项卡下的’local’
在这里插入图片描述在这里插入图片描述
三.单击’configure’来找到Tomcat的目录,以便集成到IDEA中
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
四.设置首页的虚拟目录
即:设置访问首页时所指向的目录.
在这里插入图片描述

关于应用WEB项目或模块

此时,你已经将WEB服务软件’Tomcat’集成到了IDEA中,那么就可以创建一个WEB项目或者WEB模块了.
接下来我以建立WEB模块为例子

创建WEB项目或模块

.单击’File’,再单击’new’选项卡下的’Module’.
在这里插入图片描述
. 单击’Java Enterprise’,然后选择JavaEE版本(版本最好不能低于7).
二.一 接着勾上’Web Application’,来表示这是一个web模块.
二.三 再选择版本为3.1(后期就不需要选择了),
二.四 再勾上’Create web.xml’,意思连带着web配置文件也创建,该文件非常重要
二.五 点击’next’选下一步
在这里插入图片描述
注意:在此步骤中,如果决定要用注解代替xml配置文件时,请参考’通过注解替代xml配置文件’.
三.设置路径和名称,并单击’Finish’完成创建
在这里插入图片描述

应用与注意

一.注意
1.当用于Tomcat服务的模块或者项目创建好了后,会自动生成一个WEB目录.
而WEB目录下有名为’index.jsp’文件,和名为’WEB-INF’的目录,'WEB-INF-'目录中包含有名为’web.xml’的配置文件
2.'index.jps’文件是默认的首页文件
3.'web.xml’是配置文件,非常重要,在之后实现’Serviet’接口时,需要对其进行配置
在这里插入图片描述
二.使用
在Web项目或模块中,当你要启动项目时,不能以右键’run’的方式启动,只能以右上角绿色三角箭头的方式启动.
否则将报错

'红色方框按钮’是停止当前项目或模块的WEB服务(即Tomcat服务)
在这里插入图片描述
在这里插入图片描述
三.配置热部署(创建了WEB项目后)
所谓热部署,就是在你修改了项目的文件时,或者你做了其它事情时,会触发IDEA对于Tomcat的某些部署动作
在这里插入图片描述
在这里插入图片描述

Servlet接口的应用

概念

首先,网页分为动态代码和静态代码
所谓静态代码,就是图片,视频等资源
所谓动态代码,就是用户名,提示信息,等等,依照相关操作获取服务器返回到页面上的数据.
比如我的用户积分,和用户名,当用户在网页进行了相关操作后,服务器就会返回新的积分数量和新设置的用户名,这些就是动态代码.
而Servlet接口,其作用就是将这些服务器所返回的新数据,将其传输到网页(其实是传输给我所使用的WEB软件’tomcat’中,再有Tomcat传输到网页上)上.

创建

步骤一:在模块的’src’目录下新建一个Java文件
步骤二:实现接口"Servlet"
并按Alt+Enter重写以下五个方法

1.init方法

在初始化时执行,且仅执行一次**
意义:
用于加载资源文件
触发时机:
第一种:第一次被访问网页时执行该方法
二种:Serlet被启动时访问该方法(建议)
默认情况下为:第一次被访问时,Servlet被创建
可以通过’web.xml’文件配置执行Servlet的创建时机。
在servlet标签下配置
. 第一次被访问时,创建
load-on-startup的值为负数
2. 在服务器启动时,创建
load-on-startup的值为0或正整数

2.getServletConfig方法

获取Servlet的配置,用得不多

3.getServletInfo方法

获取Servlet的信息(如版本),用得不多

5.destroy方法

在服务器关闭时执行
注意:服务器被正常关闭时才会执行,被强制关闭时不会被执行**

6.service方法

原理
其中’service’方法用于触发网页事件,当访问者访问网页时,就会触发该方法下的方法体.
如我在方法下写个’System.out.println(“你好”);’,那么网页被访问时,控制台就会输出’你好’
但是,在这之前,需要你配置好’web.xml’
在这里插入图片描述

配置’web.xml’文件(可省略)
步骤一
在`web-app’标签内声明’servlet’标签,和’servlet-mapping’标签
步骤二
在’servlet’标签中,定义一个名字为’servlet-name’的子标签
在’servlet-name’子标签中定义一个文本元素,这个是数据传输名,往后的某个标签的元素要跟它一致.

在’servlet’标签中,定义一个名字为’servlet-class’的子标签,标签元素为’包路径+实现了Servlet接口的Java文件名’.

步骤三
在’servlet-mapping’标签中,定义一个名字同样为’servlet-name’的子标签.
在’servlet-name’子标签中,定义一个文本元素,同上一个’servlet-name’子标签的文本元素要一致.
在’servlet-mapping’标签中,定义一个名字为’url-pattern’的子标签,并在该子标签中定义一个文本元素,用于定义一个触发’service’方法事件的虚拟路径.
列如:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

<!-- 配置Servlet,以便访问时能映射到Java文件上 -->
    <servlet> <!--  -->
        <servlet-name>proxytest</servlet-name> <!-- 'proxytest'为随便起的名 -->
        <servlet-class>cn.test.servlet.ServletProxy</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>proxytest</servlet-name>
        <url-pattern>/demo1</url-pattern> <!-- 此处设置一个用于监听的虚拟路径  此处名为'/demo1' 那意思就是当访问"http://127.0.0.1:8080/demo1"时就会触发"service"方法.-->
    </servlet-mapping>
</web-app>


通过注解替代xml配置文件

注解使用示范

在这里插入图片描述
通过注解可以直接替代xml的配置文件.
而如果要通过注解配置的话,那么在创建web模块或项目时,可以直接勾掉’Create web.xml’这一项.
这样就不会生成’web.xml’文件,和’WEB-INF’目录
使用方法

在Servlet的是实现类中,定义一个’WebServlet’注解.
WebServilet注解内需要填入你要指定的虚拟路径.
当你使用注解后,它不仅将会映射虚拟路径,还会自动映射是实现类的包路径.
格式:@WebServlet("/虚拟路径")
列如:

@WebServlet("/url")

在这里插入图片描述

注解的多种方式

实际上,WebServlet注解有许多种方式,不光是@WebServlet("/虚拟路径")这个格式
通过查看注解文件’WebServlet’,能够发现其中有许多方法,这些方法一一对应了原先’web.xml’文件中的标签。
可以根据注解中某个方法的作用,来指定对应的参数
在这里插入图片描述
大致格式@WebServlet(方法名1 属性值1, 方法名2 = 属性值2)

列如:在指定虚拟路径的同时,指定初始化资源加载方式

@WebServlet(value = "/虚拟路径", loadOnStartup = 初始化加载方式)

注解虚拟路径的多种写法

写法介绍

注解中,可以通过其注解方法‘url-pattern’来定义虚拟路径,不仅如此,还可以通过正则的形式来定义路径的格式。

​1、精确匹配:访问路径和配置路径完全一样
格式:@WebServlet("/路径名")
列如:http://127.0.0.1/demo1/user/name/hello

@WebServlet("/demo1/user/name/hello")

2、目录匹配:只匹配路径,不匹配后面的东西 通过*号实现
访问的路径中,只要目录跟配置的路径一致,后面任意写都能访问到
格式:@WebServlet("/路径名/*")
列如:http://127.0.0.1/user/任意目录名

@WebServlet("/user/*")
    /* 

3、扩展名匹配:只匹配扩展名,前面的东西可以任意
访问的路径中,只要最后含有扩展名能够匹配上,就能访问到
格式:@WebServlet("*.自定义扩展名")
列如:http://任意多个路径名/任意多个路径名/任意多个路径名/任意名字.123321

`@WebServlet("*.123123")`

​注意:
1.url-pattern路径必须以/ 或者 * 开头
2. /*.自定义扩展名不能同时使用 也就是不能写成/*.自定义扩展名
3,一个Servlet可以配置多个url-pattern的路径

映射路径的优先级

当精确匹配,目录匹配,扩展名匹配中,任意两者的路径名重叠时,将根据映射优先级来访问
优先级
精确匹配 大于> 目录匹配 大于 > 扩展名匹配
即:精确匹配最优先,目录匹配为中,扩展名匹配为最次。

优先级举例

如下列中的例子,我们来举例优先级。
首先我们定义三个虚拟路径。
虚拟路径1: /user/a.do
虚拟路径2: /user/*
虚拟路径3: *.do

​用户访问 http://localhost:8080/user/a.do 访问虚拟路径1

用户访问 http://localhost:8080/user/a.action 访问虚拟路径2

用户访问 http://localhost:8080/user/asdkfjaksdjfkajsdk;f 访问虚拟路径2

用户访问 http://localhost:8080/hello/a.do 访问虚拟路径3

用户访问 http://localhost:8080/user/b.do 访问虚拟路径2

继承GenericServlet

GenericServlet是一个Servlet接口的实现类,他将Servlet中除了service以外的方法都重写了默认方法.
这么做的目的是为了,当你要使用Servlet服务,且仅仅只想用到’service’方法时能够方便一点.
方式很简单,新建一个类,继承GenericSerlet类,然后重写’service’方法即可

打包发布

打包发布教程参考:https://blog.csdn.net/fly_77/article/details/100563776
打包后,把war文件放置在webapp目录,然后运行tomcat即可.
运行路径为:ip:端口/webapp目录下你项目的目录名/
注意:当你要打包发布在其它电脑上时,需要确定该电脑的tomcat版本和jdk版本跟你的电脑一致,否则可能会因为jdk/tomcat版本的不同而出错.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值