1.url_pattern匹配模式

2.servlet生命周期

3.servlet线程问题

一、url_pattern

1.定义:

当浏览器发起一个url请求后,该请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url。例如:

(上一篇文章的地址)http://localhost:8080/TestServlet/First

localhost:       到本地的hosts文件中查找是否存在该域名对应的IP地址

8080:            找到tomcat服务器

/TestServlet     在tomcat的webapps目录下找 TestServlet 的目录

剩下的/First部分拿来做servlet的映射匹配。这个映射匹配过程是有优先顺序的。

2.分类

这里主要分为精确匹配模糊匹配

精确匹配             /first                    http://localhost:8080/TestServlet/First

/First/demo1      http://localhost:8080/TestServlet/First/demo1

模糊匹配             /*                        http://localhost:8080/TestServlet/任意路径

/First/*               http://localhost:8080/TestServlet/First/任意路径

*.后缀名                http://localhost:8080/TestServlet/任意路径.do

*.do

*.action

*.html(伪静态)

注意事项:

1.匹配的时候,以精确匹配-->模糊匹配-->后缀名匹配这样的优先级进行匹配。

2.以匹配模式相似最高的优先。

3.只能以 / 或者 * 开头。

假设例子:
Servlet1 映射为 /a/*
Servlet2 映射为 /*
Servlet3 映射为 /a
Servlet4 映射为 *.do 请求为:/a/a.html 1,2,3都匹配,但优先匹配Servlet1
请求为:/a 1,2,3都匹配,但优先匹配Servlet2
请求为:/a/a.do 1,2,4都匹配,但优先匹配Servlet1
请求为:/a.do 2,4都匹配,但优先匹配Servlet2

4.如果在这里的pattern找不到,会交由缺省路径来匹配资源。缺省静态路径是在tomcat服务器内置的一个路径。该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作用是用于解析web应用的静态资源文件。注意:先加载动态资源(web.xml)里面的资源,然后再查找静态资源。

二、Servlet的生命周期

1.定义

Servlet生命周期:研究Servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁。这些都是由服务器Tomcat来控制的

Servlet 生命周期可被定义为从创建(第一次访问Servlet)直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 通过调用 init () 方法进行初始化。               (创建完对象的时候调用一次)
  • Servlet 调用 service() 方法来处理客户端的请求。   (每次请求调用一次)
  • Servlet 通过调用 destroy() 方法终止(结束)。      (销毁sevlet对象调用,发生在停止服务器或者重新部署服务器的时候)
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

2.描述过程:

1°.首先浏览器发起一个http请求,Tomcat根据连接通过url-patern找到对应的Servlet类。

2°.利用反射机制的newInstance方法创建出一个Servlet的对象。

调用构造方法(创建ServletConfig对象)    -->     调用init方法初始化(创建request和response对象)   -->     调用Service方法(对response对象进行补充,由Tomcat解析返回浏览器)

3。如果服务器停止或者重新部署服务器。

调用destroy方法销毁对象。

(图片来源网络,侵权删)

注意事项:

1.servlet的自动加载:默认情况下,第一次访问servlet的时候创建servlet对象。如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么导致用户第一次访问sevrlet的时候比较慢。

改变servlet创建对象的时机:提前到加载web应用。在配置文件加上 <load-on-startup>标签即可。

<servlet>
<servlet-name>First</servlet-name>
<servlet-class>com.yang.FirstServlet</servlet-class>
<!-- 让servlet对象自动加载 -->
<load-on-startup>1</load-on-startup> 注意: 整数值越大,创建优先级越低!!
</servlet>

三、Servlet多线程问题

Servlet在Tomcat里面的运行机制:单实例,多线程

用户1和用户2都是调用了FirstServlet这个对象,但却由这个对象返回不一样的request和response对象。但还是会产生线程问题,比如用户1和用户2都用了FirstServlet的成员变量(共享变量)

 例如:用户访客的例子
public class ThreadDemo extends HttpServlet{
  int count=1;
  public void doGet(HttpServletRequest req,HttpServletReponse resp){
    resp.getWriter().write("你是第"+i+"个访客");
    count++;
  }
}
如果这时候用户1访问该对象到第5行,还未执行第6行,这时候用户2进来了,那么就会造成用户1和用户2都返回"你是第1个访客"的结果,明显不符合逻辑。

因此应当修改为:

public class ThreadDemo extends HttpServlet{
int count=1;
public void doGet(HttpServletRequest req,HttpServletResponse resp){
synchronized(TheadDemo.class){ //最好使用字节码类对象
resp.getWriter().write("你是第"+i+"个访客")
count++;
}
}
}

Servlet入门(2)的更多相关文章

  1. HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象

    1 HTTP协议特点   1)客户端->服务端(请求request)有三部份     a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...

  2. 浅谈JavaWEB入门必备知识之Servlet入门案例详解

    工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...

  3. java之servlet入门操作教程一续

    本节主要是在java之servlet入门操作教程一  的基础上使用myeclipse实现自动部署的功能 准备: java之servlet入门操作教程一 中完成myFirstServlet项目的创建: ...

  4. servlet入门与进阶

    servlet入门与进阶 1.servlet基础认知 Servlet(Server Applet):全称Java Servlet,是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据, ...

  5. JavaWeb之Servlet入门(二)

    1. 准备 在JavaWeb之Servlet入门(一)中,我们完成了第一个Servlet程序,完成了从URL到后台控制器的中转过程,接下来我们延续JavaWeb之Servlet入门(一)学习下如何传参 ...

  6. Servlet视频学习笔记 57-58 (servlet入门和调用过程)

    网易云课堂<30天轻松掌握JavaWeb视频>servlet部分 课时57 servlet开发入门 servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术.S ...

  7. Servlet入门和ServletConfig、ServletContext

    Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...

  8. servlet入门学习之工作原理解析

    从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...

  9. Servlet入门实践

    本文主要介绍servlet,包括入门到升入,基本上可以对servlet有一个很好的认识: 1servlet介绍:   Servlet(Server Applet),全称Java Servlet,未有中 ...

  10. Servlet入门和HTTP。

    Servlet: 1.概念:Servlet:server applet  ,运行在服务器端的小程序.   浏览器在访问服务器的动态资源时,访问的是具有逻辑性的Java代码(Java类),而这里的Jav ...

随机推荐

  1. Mac iOS 允许从任何来源下载应用并打开

    一个快捷的小知识点,mark! 允许从任何来源下载应用并打开,不用手动去允许,更加简洁! 只需一行命令 sudo spctl --master-disable 1.正常情况下,打开偏好设置,选择安全性 ...

  2. 手机浏览器页面点击不跳转(Android手机部分浏览器) 浏览器双击放大网页 解决

    手机端web网页项目(angluar js 1.4.6) 1,网页项目开发过程中,使用PC浏览器能正常访问,IOS设备浏览器也能正常访问,但是使用Android部分浏览器进行访问的时候,链接偶尔不跳转 ...

  3. ansible-palybook剧本

    1 ansible基础知识部分补充 1.1 ansible软件特点: · 可以实现批量管理 · 可以实现批量部署 · ad-hoc(批量执行命令)---针对临时性的操作 ansible clsn -m ...

  4. python核心编程2 第十二章 练习

    12–5. 使用 __import__().(a) 使用 __import__ 把一个模块导入到你的名称空间. 你最后使用了什么样的语法? (b) 和上边相同, 使用 __import__() 从指定 ...

  5. vuex组件 vuex-persistedstate

    vuex用于管理项目中的全局状态,但是我们一刷新vuex中保存的全局状态就会被全部初始化,虽然我们也可以同事缓存到storage中做两步操作,但是vuex-persistedstate组件已经帮我们完 ...

  6. Vue+webpack构建一个项目

    1.安装CLI命令的工具  推荐用淘宝的镜像 npm install -g @vue/cli @vue/cli-init 2.使用命令构建一个名为myapp的项目 vue init webpack m ...

  7. Python学习手册之Python介绍、基本语法(二)

    在上一篇文章中,我们介绍了Python的一些基本语法,现在我们继续介绍剩下的Python基本语法.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/987193 ...

  8. Leecode刷题之旅-C语言/python-13.罗马数字转整数

    /* * @lc app=leetcode.cn id=13 lang=c * * [13] 罗马数字转整数 * * https://leetcode-cn.com/problems/roman-to ...

  9. uva 509 RAID!(磁盘数据)

    来自 https://blog.csdn.net/su_cicada/article/details/80085318 习题4-7 RAID技术(RAID!, ACM/ICPC World Final ...

  10. (数据科学学习手札31)基于Python的网络数据采集(初级篇)

    一.简介 在实际的业务中,我们手头的数据往往难以满足需求,这时我们就需要利用互联网上的资源来获取更多的补充数据,但是很多情况下,有价值的数据往往是没有提供源文件的直接下载渠道的(即所谓的API),这时 ...