Serlvet的调用过程及生命周期
请求参数亂码原理
Serlvet的调用过程及生命周期
请求参数亂码原理
在不是servlet使用方法路径映射中关於url-pattern的配置有三种,分别是完全路径匹配、目录匹配、扩展名匹配
其优先级分别为:完全路径匹配>目录匹配>扩展名匹配;
一、三种路径印射嘚区别
在服务器段的java代码是:
1、完全路径代码:
这种模式也叫完全模式匹配
2、目录匹配也叫通配符匹配
(1、)web端代码:
访问路径可以有哆个选择:如下图
(2)既url路径中直接是/*
其访问路径没有限制,访问路径可以是任何字符与数字这里就不向大家一一展示了。
3、后缀名匹配不能以/开头,要以*开头比如 *.do
在访问路径时,其*可以换成任何字符与数字:如下图所示
二:印射路之间的优先级
先定义两个不是servlet使用方法文件如图所示,这里就不像大家展示其代码了
1、web端代码:比较/abc/*与/*的优先级结论:如果同样目录匹配,限定范围越紧准越先被匹配
2、端口代码:/abc/*与/abc比较,先被访问的是完全路径匹配其次才是目录匹配(ps:目录匹配大多都带有*)
3、用目录路径/abc/*与扩展名*.do访问,结果是目录蕗径先被访问
4、web端代码:/*与*.do,先被访问的还是目录路径
webserver,iis等只能处理静态资源的请求(即需要事先将html文件写好并保存到web服务器相应的目录下),不能处理动态资源的请求(即需要根据请求参数进行计算然后生成相应的页面)
(3)服务器拆包(解析请求数据包),将解析之后的数据封装到request对象(不是servlet使用方法只需要该对象就可以获得请求数据包中的数据比如请求参数、请求资源路径等,不需要自己去解析请求数据包了)同时,服务器还会创建一个response对象
load-on-starup配置如果有,则会创建该不是servlet使用方法实例 load-on-starup参數值越小,优先级越高(最小值为0优先级最高)。
但是这两个do方法默认情况下,会抛出异常需要子类去override。
config对象可以用来访问不是servlet使用方法的初始化参数
可以override init()方法来实现自己的初始化逻辑。
容器在完荿不是servlet使用方法对象的创建之后会立即调用该对象的init方法,初始化方法只会执行一次
1.容器依据请求资源路径中的应用名(“/appname”)查找到该应用对应的文件夹接下来比较web.xml中的<url-pattern>与“/abc.html”匹配的资源
a. 必须先通过规范约定正确的路径;
b. 按照规范判断路径处理请求。对于不满足规范的路径认为是用户输入的错误路径,统一报错;
1. 第1、2、4步只能执行一次第3步可以执行多次;
2. 因为不是servlet使用方法被Tomcat自动创建一次,因此它在Tomcat内是单例的(只有1个实例)即不是servlet使用方法满足单例模式;
3. 默认情况下,首次访问不是servlet使用方法时Tomcat会创建它,也可以修改配置文件web.xml使得Tomcat启动时就直接创建不是servlet使用方法;
1. Context:上下文,理解为环境环境可以给其内部的个体提供资源。从编程的角度来说可以给内部的对象提供数据;
- 即在程序运行阶段随时向此对象存取數据;
3. doGet()和doPost()默认的代码直接抛出了异常为了强制开发者去重写他们。若要调用它们就必须重写;
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。