首页 > 其他分享 >关于Tomcat和Servlet的一些认识

关于Tomcat和Servlet的一些认识

时间:2023-01-07 11:33:09浏览次数:58  
标签:web 浏览器 Tomcat 认识 方法 访问 服务器 Servlet

Web相关概念回顾

 

1,软件架构:

C/S:客户端/服务端

B/S:浏览器/服务端

 

2,资源分类

静态资源:所有用户访问后,得到的结果是一样的,称为静态资源

静态资源可以直接被浏览器解析,用户请求访问静态资源的过程,称之为 请求

如:html , css , js

动态资源: 用户访问后,得到的结果不一定是一样的,称为动态资源

动态资源需要先转化为静态资源,再被浏览器解析,返回给用户,这个过程称之为 响应

如:servlet jsp php asp

 

3,网络通信三要素

1,IP : 电子设备(计算器)在网络中的唯一标识。

 

2,端口 : 应用程序在计算器中的唯一标识。范围(0~65535),但尽量不要取(1~1024)的端口号,这些端口号可能被系统占用

 

3,传输协议 : 规定了数据传输的规则

1,基础协议:

tcp : 安全协议,三次握手 。 但速度稍慢

udp : 不安全歇息,但速度稍快

 

Tomcat

 

web服务器软件

 

服务器 : 安装了服务器软件的计算机

 

服务器软件 : 接受用户的请求,处理请求,做出响应

 

web服务器软件:接收用户的请求,处理请求,做出响应

 

在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目

 

web容器

 

java常见的web服务器软件:

webLogic : oracle公司的,大型的JAVAEE服务器,支持所有的JAVAEE规范 收费的。

 

JAVAEE :java语言在企业级开发中使用的技术规范总和,一共规定了13项大的规范

 

webSphere : IBM公司的,大型的JAVAEE服务器,支持所有的JAVAEE规范 收费的。

 

JBOSS : JBOSS公司的,大型的JAVAEE服务器,支持所有的JAVAEE规范 收费的。

 

Tomcat : Apache 基金组织,中小型的JAVAEE服务器,仅支持少量的JAVAEE规范,但它开源,免费啊!!!能白嫖为什么要给钱?

 

 

Tomcat的学习流程:

 

1,下载

 

既然是免费的,那肯定走官网啊!

Apache Tomcat® - Welcome!

然后左边会有版本号,现在我用的是8,点一下在往下滑,选择适合电脑位数的压缩包

 

2,安装

 

将下载的压缩包直接解压就行,注意路径不要有中文和空格

 

3,卸载

 

直接把解压后的文件夹删除就好了………………

(吐槽,tomcat的安装和卸载是真的离谱!)

 

4,启动

 

在启动这儿说一下tomcat的文件结构,如图:

 

启动,在bin目录下,双击 startup.bat 文件,就可以启动,如果是 Lunxi 系统 点那个 startup.sh

 

启动完成后,去浏览器输入

 

http://localhost:8080/

 

会出现tomcat的一个网页。

 

这里可以在cmd里面,用 ipconfig 查询自己的 ip 地址 ,然后用自己的 ip 地址代替上面的 localhost

 

按网上的说法,只要我服务器开着,其他人在电脑上输入我的 ip:8080 是能访问我这个tomcat的,但目前我还没尝试成功

 

可能遇到的问题:

1,黑窗口一闪而过:

原因:没有正确配置 JAVA_HOME 环境变量(自己网上找教程)

 

2,启动报错:

原因:端口号被占用

解决:

1,暴力:找到占用的端口号,并且找到对应的进程,杀死该进程

  1,先在cmd,输入 netstat -ano 找到占用了该端口号的进程的 pid

  2,在任务管理器中找到pid相同的进程,关闭它

    win7任务管理器默认没有显示pid,需要自己调一下,win10在详细信息里面

2,温柔:修改自身端口号

在conf目录下个server的文件, 点进去,找到所有的端口的属性(大概有6个,好像),全改了就OK

ps:对自己好点,直接杀死吧

 

5,关闭

 

1,正常关闭:

1,启动 bin 目录下的 shutdowm.bat 文件,就关闭了

2,可以使用 ctrl+c 关闭

 

2,强制关闭:

点击窗口关闭键。

 

6,配置

 

部署项目的方式:

1,直接将项目放到webapp目录下

然后在浏览器里输入 http://localhost:8080/项目名/要访问的文件名

 

将项目打成一个后缀名为war 的压缩包,再放在webapps目录下。

 

2,配置 conf 目录下的 server.xml 文件

在<HOST> 标签体中配置

<Contest docBase = "项目存放路径" path="/随便写" />

docBase : 项目存放的路径

path : 虚拟目录

后面通过服务器访问,直接用虚拟目录就可以

http://localhost:8080/虚拟目录/要访问的文件名

 

3,在 conf 目录下的 Catalina 目录下的 localhost 创建任意名称的 xml 文件 ,文件中只用写

<Contest docBase = "项目存放路径" />

只写这一句就行,虚拟目录就是该xml的文件名

http://localhost:8080/xml文件名/要访问的文件名

这种就叫热部署

 

7,在 idea 上部署 tomcat 。。。。这个建议百度,我懒得一步一步截图,推荐b站09_tomcat与IDEA集成&创建web项目哔哩哔哩_bilibili这个视频里面去看吧。

 

Servlet

 

概念: 运行在服务器端的小程序

其实就是一个接口,定义了Java类被浏览器(Tomcat识别)的规则

 

这样解释吧,浏览器的动态资源,是需要遵循一定的逻辑才能获取,这个逻辑就是由java类来判断,但这个java类的运行,是在tomcat服务器上运行(我直接理解为,不在jvm虚拟机上运行),但tomcat毕竟不是jvm虚拟机,它只认识一定规范的java类,这个规范就是Servlet

 

我们自己写个类,实现Servlet接口,重写方法

 

快速入门:

 

## 1,创建JavaEE项目

 

百度,谢谢

 

2,定义一个类,实现Servlet接口

 

public class Servlet_t1 implements Servlet 

 

3,实现接口中的抽象方法

 

idea有快捷键,自己弄

 

4,配置Servlet

 

在WEB-INF目录下的web.xml文件中,的<web-app>标签内写

    <servlet>
       <servlet-name>test1</servlet-name><!-- 随便写 -->
       <servlet-class>com.example.demo.Servlet_t1</servlet-class><!-- 需要链接的类的全类名 -->
   </servlet>
   <servlet-mapping>
       <servlet-name>test1</servlet-name><!-- 和上面那个保持一致 -->
       <url-pattern>/test1</url-pattern><!-- 链接 -->
   </servlet-mapping>

 

这样写后,当你需要调用这个类后,只需要打开服务器,在浏览器中访问,http://localhost:8080/test1就可以调用了

 

这里说一下原理吧。其实也不难,其实主要就是前面学的反射

拿上面的代码举例吧:

浏览器访问http://localhost:8080/test1

先通过localhost:8080 找到主机和端口号,

然后去该项目的 web.xml 文件里的<url-pattern>找有没有文本内容为 /test1 的标签,

没有就报404,

有就去拿同父节点下的<servlet-name>标签内容,

拿到了再去找<servlet> 标签中的<name>标签,找到内容相同的,

再拿同一个<servlet> 标签中的<servlet-class>标签中的内容(这个内容是全类名)

最后通过反射,创建该类对象,又因为该类必须继承自Servlet 类,所以肯定重写了,void service() 方法,通过反射创建对象后直接调用该方法

 

Servlet的方法

 

下面是继承Servlet接口后需要重写的5个方法,具体效果写注释了

  /**
    *初始化方法,
    * 在Servlet 被创建时执行,会执行一次
    * @param servletConfig
    * @throws ServletException
    */
   @Override
   public void init(ServletConfig servletConfig) throws ServletException {
       System.out.println("Servlet 开始执行");
  }

   /**
    * 获取ServletConfig对象
    * ServletConfig:Servlet的配置对象
    * @return
    */
   @Override
   public ServletConfig getServletConfig() {
       return null;
  }

   /**
    * 提供服务的方法
    * 每一次Servlet被访问的时候都会被执行
    * @param servletRequest
    * @param servletResponse
    * @throws ServletException
    * @throws IOException
    */
   @Override
   public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
       System.out.println("HELLO , SERVLET!");
  }

   /**
    * 获取Servlet的一些信息,版本,作者等等
    * @return
    */
   @Override
   public String getServletInfo() {
       return null;
  }

   /**
    * 销毁方法
    * 在服务器正常关闭时,执行,
    * 执行一次
    */
   @Override
   public void destroy() {
       System.out.println("Servlet 关闭");
  }

 

 

Servlet 的生命周期

 

1,被创建

执行init方法,只执行一次

Servlet 什么时候被创建?

默认情况下:第一次被访问的时候,Servlet被创建

可以修改配置,使Servlet在服务器启动时被创建

在 web.xml 文件里,找到该 Servlet 全类名的那个<servlet>标签,在该标签下添加

<!-- 
指定Servlet的创建时机
1,第一次被访问时,创建
则x为负数(不要写太小)
2,在服务器启动时,创建
则x为0或者正整数(不要写太大)
-->
<load-on-startup>x(一个数)</load-on-startup>

 

这里说一下,一个Servlet的init方法,只执行一次,说明Servlet在内存中只存在一个对象,Servlet 是单例的!

多个用户同时访问的时候,可能会设计到线程安全问题

解决方法:尽量不要在Servlet的类中定义成员变量,即使定义了成员变量,也不要修改其值,直接弄final修饰吧

 

2,提供服务

执行service方法 ,执行多次

 

3,被销毁

执行destroy方法,执行一次

这个方法可以理解为,人死之前的遗言,也就是说还没死呢,先执行这个方法,释放资源什么的,再销毁程序

 

 

Servlet3.0

好处:

可以使用注解配置

 

步骤:

1,创建JAVAEE项目,选择Servlet的版本3.0以上,可以不创建web.xml

 

2,定义一个类,实现Servlet接口

 

3,重写方法

 

4,在类上使用@webServlet 注解 ,进行配置

    @WebServlet("Servlet的资源路径")

这是最简单的写法,建议可以去看看注解类,不过我写累了,不想写了

 

 

注意事项

 

不要把文件写到,WEB-INF目录下,浏览器是没办法直接访问这个目录的!

 

 

Servlet的体系结构

 

1, Servlet------------接口

 

GenericServlet 继承 Servlet ------------ 抽象类

 

将 Servlet 接口中其他的方法做了默认空实现,只将 service() 方法作为抽象

将来定义 Servlet 实现类时,可以继承 GenericServlet ,实现 service() 方法即可

 

HttpServlet 继承 GenericServlet ------------- 抽象类(推荐

 

对 HTTP 协议的一种封装,简化操作

 

在具体说这个类之前,我先说一下 service() 方法是怎么处理请求的

 

首先,我们知道,浏览器在发送请求的时候,是有两种方式,,,学过 html 的话,就知道表单发送的时候有两种方式,POSTGET 两种, HTTP 发送的时候也有这两种

通过浏览器直接请求是GET方式,目前学的只是只有表单能完成POST方式

了解了浏览器发送请求的两种方式后,我们再说说服务器的接收和处理,,,对于不同的发送方式,浏览器需要不同的方式来处理,,这里是有一个方法的

String method = req.getMethod();//这个方法会根据不同的请求返回一个字符串,如果是GET请求,就会返回"GET",POST请求就会返回"POST";

然后再判断

if("GET".equals(method)){
   //get方式获取数据
}else if("POST".equals(method)){
   //post方式获取数据
}

其实这个过程是非常麻烦的,但 HttpServlet 帮你做了处理!

 

使用方法:

 

1,定义类继承 HttpServlet

2,重写 doGet 和 doPost 方法

 

 

Servlet 路径访问相关配置

 

urlpartten:Servlet 访问路径

一个 Servlet 可以定义多个访问路径,比如:@WebServlet({"/test2","/test22","/test222"})

  • 路径定义规则

  • /xxx

  • /xxx/xxx 多层路径,目录结构

  • /*.do 这里也是一定要后缀 .do 试了一下,这样也是可以的@WebServlet("/zhoupeng.com")

 

 

   

标签:web,浏览器,Tomcat,认识,方法,访问,服务器,Servlet
From: https://www.cnblogs.com/fssnjcl/p/17032322.html

相关文章

  • Servlet
    前言在微人事的项目中,我们看到了很多HttpServletRequestrequest,HttpServletResponseresponse作为参数传入到某个方法中,它通常作为HttpServlet中的service()方法传入......
  • [tomcat] log-AccessLog 请求流程
    示意图简述1. NioEndpoint接收请求2. Processor的子类AbstractProcessorLight处理请求3. AbstractProcessorLight方法service请求4. 请求失败触......
  • 动态网页技术-Servlet(2)
    1.Tomcat、Servlet与Http协议最终tomcat将http请求进行对应的响应,动态资源部分由servlet来实现,servlet在底层维护hashmap数组<k,v>键值对的形式,需要web.xml文件中的内容,最......
  • 认识 Java 中的 StringBuilder 类
    Stringstr="hello"; System.out.println(str); System.out.println(str+"world"); }输出的结果是:hellohelloworld从运行结果中我们可以看到,程序运行时会额外创建......
  • Servlet生成验证码
    Servlet生成验证码重写doGet和doPost方法1. java代码//图片高度privatestaticfinalintIMG_HEIGHT=100;//图片宽度private......
  • Servlet重定向
    Servlet重定向/转发就一行代码resp.sendRedirect("/response/image");//也可以跳转去jsp文件resp.sendRedirect("/response/success.jsp");不过要注意添加项目名,不......
  • 在创建servlet的时候可以直接通过下面的方式创建
    但是这样创建的servlet注解里面的内容是默认的,我们需要去设置里面去修改:......
  • 简单java servlet的登录脚本,部署到docker
    先打算参考这篇文章Simpleloginpageexampleusingjspservlet-Candidjava内含war文件和zip文件。但是tomcat上该war文件总是报错。于是又参考这篇(46条消息)Jav......
  • tomcat远程代码执行漏洞(CVE-2019-0232)
    漏洞原理漏洞相关的代码在tomcat\java\org\apache\catalina\servlets\CGIServlet.java中,CGIServlet提供了一个cgi的调用接口,在启用enableCmdLineArguments参数时,会根......
  • tomcat系列漏洞总结
    tomcat介绍Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首......