首页 > 其他分享 >servlet部署和访问

servlet部署和访问

时间:2023-03-14 16:55:15浏览次数:31  
标签:JavaWeb Tomcat 编译 部署 Servlet 访问 应用 servlet 目录

Servlet 没有 main() 方法,不能独立运行,但它可以作为 JavaWeb 应用的一个组件被部署到 Servlet 容器中,由容器来实例化和调用 Servlet 的方法,例如:doGet() 、doPost() 等。

那么,JavaWeb 应用是什么呢?Servlet 是如何部署和访问的呢?本节我们将针对这些问题进行讲解。

JavaWeb 应用

JavaWeb 应用由一组 Servlet/JSP、HTML 文件、相关 Java 类、以及其他的资源组成,它可以在由各种供应商提供的 Servlet 容器中运行。由 JavaWeb 应用的定义可知, Servlet 是 JavaWeb 应用的一个组件。

为了让 Servlet 容器顺利地找到 JavaWeb 应用的各个组件,Servlet 规范规定,JavaWeb 应用必须采用固定的目录结构,即每种组件在 JavaWeb 应用中都有固定的存放目录。

以 Tomcat 为例,通常将 JavaWeb 应用存放到 Tomcat 的 webapps 目录下。在 webapps 下,每一个子目录都是一个独立的 Web 应用,子目录的名字就是 Web 应用的名字,也被称为 Web 应用的上下文根。用户可以通过这个上下文根来访问 JavaWeb 应用中的资源。

webapps 的目录结构如下图。

JavaWeb 结构图
下表中对 webapps 下各个目录进行了介绍。

目录描述是否必需
\servletDemo Web 应用的根目录,属于该 Web 应用的所有资源都存放在这个目录下。
\servletDemo\WEB-INF 存放 web.xml、lib 目录以及 classes 目录等。
\servletDemo\WEB-INF\classes 存放各种 .class 文件或者包含 .class 文件的目录,Servlet 类的 .class 文件也存放在此。
\servletDemo\WEB-INF\lib 存放应用所需的各种 jar 包,例如 JDBC 驱动程序的 jar 包。
\servletDemo\WEB-INF\web.xml web.xml 中包含应用程序的配置和部署信息。

部署

在 Tomcat 中部署 JavaWeb 应用最快捷的方式,就是直接将 JavaWeb 应用的所有文件复制到 Tomcat 的 /webapps 目录下。在默认情况下,Tomcat 会自动加载 webapps 目录下的 JavaWeb 应用,并把它发布到名为 localhost 的虚拟主机中。

Tomcat 既可以运行采用开放式目录结构(只编译不打包)的 Web 应用,也可以运行 Web 应用的打包文件(WAR 文件)。在开发阶段,为了方便程序调试,通常采用开放式的目录结构部署 JavaWeb 应用。在开发完成,进入产品发布阶段时,就应该将整个应用打包成 WAR 文件,再进行部署。

即使采用 WAR 文件的形式发布,Tomcat 启动时也会将 WAR 文件自动展开为开放式的目录结构。

在本案例中,我们将采用开放式的目录结构进行部署,具体操作步骤如下。 

1. 进入 Windows DOS 命令行窗口

我们知道,编译 Java 源代码一般可以通过两种方式完成:DOS 命令行 和 IDE(集成开发环境)。使用 IDE 可以一键完成编译工作,十分的方便,但 IDE 给我们带来方便的同时,也隐藏了编译过程中的许多细节,我们无法了解其中的原理和机制。

对于初学者来说,为了更加深刻地理解 Servlet 的运行原理和机制,最好的办法就是使用 DOS 命令行进行编译。

使用快捷键 “Windows + R”,打开运行对话框,在对话框输入cmd,点击“确定”,进入 Windows 系统命令行窗口,如图。

cmd

2. 引入 javax.servlet 包

由于 Servlet 是 JavaEE 下的技术标准,不是 JDK 的组成部分,所以在编译 Servlet 前,需要先引入 servlet-api.jar 包(在 Apache Tomcat 安装目录下的 lib 文件夹中提供了此 jar 包)。

使用命令set classpath可以将 servlet-api.jar 引入,该命令的语法如下,其中 path 表示引入 jar 包的路径。
  • set classpath = path

为了方便操作,可以先在命令行中输入set classpath=,然后将 servlet-api.jar 文件拖进命令行内,回车执行。

set calsspath  
注:set classpath命令用来为当前窗口设置临时环境变量,只在当前窗口下有效。

3. 编译 Servlet

1)在命令提示符中使用 cd命令进入 MyServlet.java 所在的目录。

servlet cd
2)使用 javac -encoding UTF-8 -d . MyServlet.java命令进行编译,若没有报错,则编译成功。


其中:
  • javac :编译命令;
  • -encoding UTF-8:用于指定编译源文件时的字符编码,这里指定为 UTF-8;
  • javac -d:带包编译 ;
  •  .:表示当前位置。

3)进入 MyServlet.java 文件所在的目录,可发现新增了编译后的目录和 .classes 字节码文件,自此我们就完成了对 Servlet 的编译工作。

4. 创建目录结构

在完成对 Servlet 的编译后,下一步依照 JavaWeb 应用的固定目录结构,在 Tomcat 中为该 Servlet 创建目录。
  1. 在 Tomcat 的 webapps 目录中创建 servletDemo(web 应用的名字,由自己定义)文件夹;
  2. 在 servletDemo 文件夹内创建 WEB-INF 文件夹;
  3. 在 WEB-INF 内创建 classes 文件夹;
  4. 在 WEB-INF 内创建配置文件 web.xml(可以复制 \webapps\ROOT\WEB-INF 中的 web.xml 使用)。

5. 将 Servlet 移动到 Tomcat 目录中

将编译好的字节码和目录移动到 Tomcat\webapps\servletDemo\WEB-INF\classes 目录下。

6. 配置 web.xml

对 webapps\servletDemo\WEB-INF 目录的 web.xml 中进行配置,具体配置代码如下。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6. version="3.0" metadata-complete="true">
  7. <servlet>
  8. <servlet-name>MyServlet</servlet-name>
  9. <servlet-class>net.biancheng.www.MyServlet</servlet-class>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>MyServlet</servlet-name>
  13. <url-pattern>/MyServlet</url-pattern>
  14. </servlet-mapping>
  15. </web-app>

web.xml 中各元素含义及用法如下:
  • <web-app>: 根元素。
  • <servlet> :用于注册 Servlet,即给 Servlet 起一个独一无二的名字。
  • <servlet> 包含两个主要的子元素 <servlet-name> 和 <servlet-class>,分别用于指定 Servlet 的名称和 Servlet 的完整限定名(包名+类名)。
  • <servlet-mapping> :用于定义 Servlet 与 URL 之间的映射。
  • <servlet-mapping> 包含两个子元素 <servlet-name> 和 <url-pattern>,分别用于指定 Servlet 的名称和虚拟路径。

访问

进入 Tomcat\bin 目录下双击 startup.bat,启动 Tomcat。   tomcat 启动
Tomcat 启动成功后,在地址栏中输入“http://localhost:8080/servletDemo/MyServlet”,访问 MyServlet,结果如下图。


访问路径 http://localhost:8080/servletDemo/MyServlet 中,各部分含义如下:

  • http:// 表示 HTTP 协议;
  • localhost: 表示服务器 IP;
  • 8080 表示端口号;
  • /servletDemo 表示 Web 应用的上下文根路径;
  • /MyServlet 表示资源路径,即 web.xml 中 <url-pattern> 元素的取值

标签:JavaWeb,Tomcat,编译,部署,Servlet,访问,应用,servlet,目录
From: https://www.cnblogs.com/shangtiao/p/17215510.html

相关文章

  • 腾讯云服务器安装完jdk,tomcat,无法访问的问题
    jdk8,tomcat11,控制台防火墙规则已添加该端口系统内firewall已添加开放该端口启动tomcat初步看顺利启动,后经过catalina.sh发现每次启动后都出错了,网上搜索可能是jdk8与t......
  • K8S部署应用详解
    #前言首先以SpringBoot应用为例介绍一下k8s的发布步骤。1.从代码仓库下载代码,比如GitLab;2.接着是进行打包,比如使用Maven;3.编写Dockerfile文件,把步骤2产生的包制作成镜像......
  • 安全基线检查及部分中间件部署规范
    (一)Centos7安全基线0x01初始设置1.文件系统配置:2.安全启动设置:3.强制访问控制:0x02服务配置1.时间同步设置:0x03网络配置1.hosts设置:2.防火墙配置0x04......
  • Java FileOutputStream IO 拒绝访问
    很无聊的bug,也是对IO使用不熟悉导致本意是将文件写入这个目录下FileOutputStreamfos=newFileOutputStream("D:/test");然后报拒绝访问的错误,应该这么写FileOut......
  • showdoc文档管理平台部署
    【工具相关】showdoc文档管理平台部署 一、前言1、需求来由#内部资料归档混乱,内部归档地址不一,不利于资料查找及工作交接更新不及时,本地文档更新完,未同步上传......
  • 基于Kubernetes(k8s)部署Dubbo+Nacos服务
    一、说明本文介绍基于Kubernetes(k8s)环境集成阿里云私有镜像仓库来部署一套Dubbo+Nacos的微服务系统,并使用KubernetesDNS以及port-forward的方式来打通网络......
  • linux部署jenkins
    linux部署jenkins参考:https://blog.csdn.net/liu_chen_yang/article/details/127202910参考:https://blog.csdn.net/zy10151/article/details/126875108相关依赖......
  • docker部署
    docker部署第一步:设置yum源为docker  yum源cd/etc/yum.repos.d/rm-rf*.repowget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyumcleana......
  • OpenAi API接口访问不通
     使用nodejs接api接口,已经开了那啥,但还是报连接失败    ......
  • Servlet
    ServletHelloServlet1、构建一个普通的Maven项目,这个空的工程就是主工程2、关于Maven父子工程的理解:​父项目中会有:<modules><module>Servlet</module><......