Servlet入门(2)
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)的更多相关文章
- HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象
1 HTTP协议特点 1)客户端->服务端(请求request)有三部份 a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...
- 浅谈JavaWEB入门必备知识之Servlet入门案例详解
工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...
- java之servlet入门操作教程一续
本节主要是在java之servlet入门操作教程一 的基础上使用myeclipse实现自动部署的功能 准备: java之servlet入门操作教程一 中完成myFirstServlet项目的创建: ...
- servlet入门与进阶
servlet入门与进阶 1.servlet基础认知 Servlet(Server Applet):全称Java Servlet,是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据, ...
- JavaWeb之Servlet入门(二)
1. 准备 在JavaWeb之Servlet入门(一)中,我们完成了第一个Servlet程序,完成了从URL到后台控制器的中转过程,接下来我们延续JavaWeb之Servlet入门(一)学习下如何传参 ...
- Servlet视频学习笔记 57-58 (servlet入门和调用过程)
网易云课堂<30天轻松掌握JavaWeb视频>servlet部分 课时57 servlet开发入门 servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术.S ...
- Servlet入门和ServletConfig、ServletContext
Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...
- servlet入门学习之工作原理解析
从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...
- Servlet入门实践
本文主要介绍servlet,包括入门到升入,基本上可以对servlet有一个很好的认识: 1servlet介绍: Servlet(Server Applet),全称Java Servlet,未有中 ...
- Servlet入门和HTTP。
Servlet: 1.概念:Servlet:server applet ,运行在服务器端的小程序. 浏览器在访问服务器的动态资源时,访问的是具有逻辑性的Java代码(Java类),而这里的Jav ...
随机推荐
- 【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
上周三面试题有两道涉及Oracle的分页查询,没有意外地凉了,现在总结一下. · Mysql mysql的分页可以直接使用关键字limit,句子写起来比较方便. 语法: ① limit m,n -- ...
- spring入门(四) spring mvc返回json结果
前提:已搭建好环境 1.建立Controller package com.ice.controller; import com.ice.model.Person; import org.springf ...
- Vscode配置C++运行环境(2019/1//11更)并加入bits/stdc++.h头文件
因为重装系统,以前配置好的c++环境又没了.所以有要配置一遍. 1 下载mingw64或minw, 配置好环境变量:C://mingw64//bin; 在cmd下用g++ -v验证是否成功. 2. ...
- ABAP术语-ABAP Editor
ABAP Editor 原文链接:http://www.cnblogs.com/qiangsheng/archive/2007/12/08/987498.html Program editor in ...
- css跨浏览器大全
CSS技巧1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要 ...
- sql语句中#{}和${}的区别
#---将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的 ...
- php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己 ...
- sftp上传到远程服务器
开发遇到一个需求,需要将图片通过sftp上传到远程服务器上,之前没用过这个功能,折腾了我好几天才搞定,下面记录下我的处理方法: $sftp = 'ssh2.sftp://';//连接sftp $con ...
- 002---Linux系统目录结构
Linux系统目录结构 一切从根(/)开始,一切皆文件. /bin:存放常用的可执行文件 /sbin:存放常用的可执行文件 家目录:存放用户自己的文件或目录 root用户:/root 普通用户:/ho ...
- (数据科学学习手札27)sklearn数据集分割方法汇总
一.简介 在现实的机器学习任务中,我们往往是利用搜集到的尽可能多的样本集来输入算法进行训练,以尽可能高的精度为目标,但这里便出现一个问题,一是很多情况下我们不能说搜集到的样本集就能代表真实的全体,其分 ...