博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】web.xml
阅读量:4983 次
发布时间:2019-06-12

本文共 2498 字,大约阅读时间需要 8 分钟。

1).context-param(上下文参数)

2).listener(监听器配置参数)
3).filter(过滤器配置参数)
4).servlet(servlet页面参数)
5).其他
- 读取顺序:1)>>>2)>>>3)>>>4)(5))(具体对应的执行顺序也是如此)
- 原理及过程
1)应用在服务器上启动,容器按上述顺序自动读取web.xml中的参数
2)容器创建一个上下文对象,即ServletContext,整个web应用共享这个对象
3)容器将读取到的context-param配置参数转化为键值对,封装到ServletContext
4)创建监听器对象(Servlet容器实例化所有监听器,回调无参构造方法,调用init初始化方法)
5)创建过滤器对象(Servlet容器实例化所有过滤器,回调无参构造方法,调用init初始化方法)
注意:此时只是web应用启动时的读取文件以及初始化阶段,客户端没有发送的请求的情况下不会有其他任何操作,所以就没有创建servlet

客户端到服务器解析?

A.客户端发送请求到服务器

1.在客户端地址栏输入请求地址,客户端解析请求URL,解析出IP地址等信息(域名解析)

2.解析后的URL信息封装成HTTP报文
3.客户端创建一个socket调用send()方法,将HTTP报文发送到服务器(以流的方式)

 

B.服务器接收到客户端请求

1.web容器也会创建一个socket并且调用receive()方法,接收客户端发送过来的HTTP报文(携带有IP地址,请求参数等信息)

2.服务器解析请求信息,将请求到的静态或动态资源,利用sokcet调用send()方法,发送给客户端
3.客户端利用sokcet调用receive()方法,接收服务器端发送的资源,例如html,jsp等
4.客户端解析资源,有可能进行再次请求(例如请求css/js等文件资源),遇到有html或jsp代码将对脚本标签进行渲染

 

jsp?

什么是jsp?

jsp是一种运行在服务器端的脚本语言,是一种软件开发者可以动态响应给客户端的web网页技术标准。

jsp运行原理及过程?

-本质上jsp只是一个带有.jsp后缀的脚本语言文件,并不能直接在jvm(虚拟机)上运行,所以需要将其转换为一个Servlet类,才能通过jvm解释执行: 

1)客户端发送请求到服务器,web容器通过jsp引擎将jsp文件转换为一个Servlet类源文件(.java)(如果是第一次访问或jsp文件被修改过,那么将会重新转换为一个新的Servlet类) 

2)转换过来的Servlet类进一步被java编译器编译成字节码文件(.class) 

3)字节码文件被系统类加载器装载到jvm上,开始初始化、执行

 

 

 

Servlet?

什么是Servlet?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet创建?

1. 创建一个类,实现HttpServlet接口(HttpServlet继承于GenericServlet,GenericServlet(实现类)继承于Servlet接口)

2. 右键—新建Servlet(选择配置文件还是注解虚拟路径) 

3. 重写doGet()和doPost()方法处理请求

 

Servlet运行原理?

1. Servlet没有main方法,不能直接独立运行。所以需要依赖于web容器(如tomcat),由这个容器来控制servlet从创建到销毁的过程

2.容器启动的时候,只会读取xml配置文件,如果不发生请求,servlet是不会被加载运行的
3.客户端第一次发送请求,服务器接收到请求后,解析请求参数,并封装成该请求对应的HttpServletRequest和HttpServletResponse对象以给web容器使用
4.根据URL匹配web容器中的servlet实例,若没有,web容器将创建和实例化一个servlet,若有则进入下一步(实例化之前类加载器将字节码文件加载过来)
5.web容器调用servlet实例的init()方法,完成初始化工作
6.调用service方法处理请求,判断请求方式是get还是post,再调用业务逻辑层的方法完成数据交互
7.将请求资源响应给客户端
8.服务器关闭(或者更新servlet文件),servlet实例调用destroy()方法,servlet实例被销毁

 

Servlet生命周期?

1.当servlet实例调用init()方法实例化的时候,servlet的生命周期开始

2.当servlet实例调用destroy()方法的时候,servlet被销毁,生命周期结束

 

注意

- 1.servlet实例只会被加载一次,init()方法、destroy()方法也只会被调用一次

- 2.只有创建的对象会每请求一次就会创建一对(requset和response) 

- 3.如果需要在实例被创建和加载的时候就完成初始化,则可以如下设置参数

类名
包名.类名
优先级别(数字)

- 4.对于某些servlet没有元素,但又想提前初始化则可以进行上述配置,否则需要配置参数

- 5.get和post请求 

a. get请求只能以字符串形式传递参数名和值,直接跟在URL后,安全性差;post请求在请求头中,较为安全,并且传递数据没有限制 

b. get传输数据量较小;post传输数据量大

c. get请求服务器接收效果不好,不能判断是否完成发送;post方式是先发送长度,可以判断是否发送完成

  

 

转载于:https://www.cnblogs.com/smallwangmusk/p/11385737.html

你可能感兴趣的文章
jquery $.ajax $.get $.post的区别?
查看>>
python中运行pip出现Fatal error in launcher错误
查看>>
2017北京国庆刷题Day7 afternoon
查看>>
bzoj千题计划108:bzoj1018: [SHOI2008]堵塞的交通traffic
查看>>
C++集成设计环境——Code::Blocks安装过程
查看>>
Maven小记
查看>>
一定不要在头文件中using namespace XXX
查看>>
运行百度语音识别官方iOS demo报错: load offline engine failed: 4001
查看>>
THREE.OrbitControls参数控制
查看>>
iOS开发--XMPPFramework--好友列表(五)
查看>>
非对称加密与证书(上篇)
查看>>
面向对象基础
查看>>
poj 1061 青蛙的约会
查看>>
PAT_1008(中文)_数组元素循环右移问题
查看>>
数据库事物隔离级别通俗理解
查看>>
PHP的基本知识点
查看>>
企业IT管理员IE11升级指南【17】—— F12 开发者工具
查看>>
pager-taglib2.0中文传参乱码问题
查看>>
人生不可破的28个天规
查看>>
Protel文件转PADS文件
查看>>