(未完成)JAVAWEB学习——
一、Servlet开发
1.sun公司提供的一种动态web资源开发技术,本质上就要是一段Java小程序,可以将Servlet加入到容器中运行Servlet。
*servlet容器 -- 能够运行servlet的环境就叫做servlet容器。 --- tomcat
*web容器 -- 能够运行web应用的环境就叫做web容器。 --- tomcat
2.
写一个类实现sun公司定义的Servlet接口。
将写好的类配置到tomcat中的web应用中。
3.服务器与浏览器之间


4.Servlet的生命周期
Servlet在第一次被访问到的时候,服务器创建出Servlet对象,创建出对象后立即调用Init方法做初始化操作,创建出的对象会一直驻留在内存中为后续对这个Servlet的访问服务。每次对这个Servlet的访问都会导致Servlet中Service方法执行。当web应用被移除出容器或服务器被关闭时,随着web应用的销毁,Servlet也会被销毁。在销毁之前,服务器会调用Servlet的Destroy方法做一些善后的工作。
5.Servlet的调用过程


6.Servlet的继承结构
Servlet接口 -- 定义了servlet应该具有的基本方法
|
| -- GenericServlet -- 通用基本Servlet实现,对于不常用的方法在这个实现类中进行了基本的实现;对于Service设计为抽象方法,需要子类去实现。
|
| -- HttpServlet -- 在通用Servlet的基础上基于HTTP协议进行了进一步强化:实现了GenericServlet中的Service方法;判断当前的请求方式,调用对应到doXXX方法;这样一来,我们开发Servlet的过程中,只需继承HttpServlet,覆盖具体要处理的doXXX方法,就可以根据不同的请求方式,实现不同的处理。一般不要覆盖父类中的Service方法只要覆盖doGet/doPost就可以。
7.Servlet细节问题
1)一个<servlet>可以对应多个<servlet-mapping>,从而一个Servlet可以有多个路径来访问。
2)url-partten中的路径可以使用*匹配符号进行配置,但是要注意,只能是“/开头/*”结尾 或 “*.后缀”这两种方式
由于*的引入,有可能一个路径被多个url-partten匹配,这时优先级判断条件如下:
哪个最像找哪个
*.后缀永远匹配级最低
3)在<servlet>可以配置<load-on-starup>可以用来知道那个启动顺序
4)缺省Servlet:如果有一个Servlet的url-partten被配置为了“/”,这个Servlet就变成了缺省Servlet。其他Servlet都不处理的请求,由缺省Servlet来处理。
其实对于静态资源的访问就是由缺省Servlet来执行。
设置404页面,500页面等提示页面也是由缺省Servlet来执行的。
通常我们不会自己去配置缺省Servlet。
5)线程安全问题
由于默认情况下Servlet在内存中只有一个对象,当多个浏览器并发访问Servlet时就有可能产生线程安全问题。
解决方案:
加锁 -- 效率降低
SingleThreadModel接口 -- 不能真的防止线程安全问题
最终解决方案:
在Servlet中尽量少用类变量,如果一定要用类变量,则用锁来防止线程安全问题,但是要注意锁住内容应该是造成线程安全问题的核心代码,尽量的少锁住内容,减少等待时间提高Servlet的响应速度。
二、ServletConfig -- 代表当前Servlet在web.xml中的配置信息
String getServletName() -- 获取当前Servlet在web.xml中配置的名字
String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
Enumeration getInitParameterNames() -- 获取当前Servlet所有初始化参数的名字组成的枚举
ServletContext getServletContext() -- 获取代表当前web应用的ServletContext对象
ServletConfig config = this.getServletConfig();
//--获取当前Servlet在web.xml中配置的名称
String sName = config.getServletName();
//--获取当前Servlet中配置的初始化参数
String value = config.getInitParameter("Name");
Enumeration enumeration = config.getInitParameterNames();
while(enumeration.hasMoreElements()) {
String name = (String)enumeration.nextElement();
String value = config.getInitParameter(name);
}
三、ServletContext -- 代表当前web应用
1.获取ServletContext对象
ServletContext context = config.getServletContext();
2.作为域对象可以在整个web应用范围内共享数据
域对象:在一个可以被看见的范围内共享数据用的对象
作用范围:整个web应用范围内共享数据
生命周期:当服务器启动web应用加载后创建出ServletContext对象后,域产生。当web应用被移除出容器或服务器关闭,随着web应用的销毁,域销毁。
(未完成)JAVAWEB学习——的更多相关文章
- JAVAWEB学习
http://www.cnblogs.com/xdp-gacl/p/3744053.html JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
- JavaWeb学习总结-01 JavaWeb开发入门
一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面): ...
- JavaWeb学习总结-04 Servlet 学习和使用
一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB
JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...
- JavaWeb学习总结(一)——JavaWeb开发入门
http://www.cnblogs.com/xdp-gacl/p/3729033.html 只为成功找方法,不为失败找借口! JavaWeb学习总结(一)--JavaWeb开发入门 一.基本概念 1 ...
- javaweb学习总结(六)——Servlet开发(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
- javaweb学习之Servlet开发(二)
javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JavaWeb学习----JSP脚本元素、指令元素、动作元素
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- python爬取丁香园疫情数据
毕设需求了就是说 导师要做关于时间线的- -看发展趋势 不得不今天又现学现卖 首先 创建一个python文件 python.file 引入一点资源 # 发送请求 import requests # 页 ...
- 懂九转大肠的微软New Bing 内测申请教程
最近微软的New Bing开放内测了,网上已经有拿到内测资格的大佬们对比了ChatGPT和New Bing.对比结果是New Bing比ChatGPT更强大.来看看具体对比例子吧 1.时效性更强 Ch ...
- JZOJ 3234. 阴阳
阴阳 题面 分析 个人认为是极好的题,很容易写 如果你学点分治是无奈背板的,那就做做这道题,加深你对点分治的理解 一般的,处理树上大规模统计问题,我们分治的关键是找一棵子树的重心 找到分治中心,即新一 ...
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。(C# EXCEL导入demo)
1. 安装office包 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255 2.需要在相应的IIS应用程序池启用 ...
- day06-动态SQL语句
动态SQL语句 1.基本介绍 官方文档 mybatis – MyBatis 3 | 动态 SQL 为什么需要动态SQL? 动态SQL是MyBatis的强大特性之一 使用 JDBC 或其他类似的框架,根 ...
- unity通过隐藏layer隐藏组件
设置组件layer 修改组件layer为需要隐藏的layer 隐藏组件 修改layer为隐藏状态 CenterCam.GetComponent<Camera>().cullingMask ...
- C#辗转相除法输出最大公约数
void main() { int r, m, n, t; scanf_s("%d\n%d", &m, &n); if (m < n) { t = m; m ...
- Java 8 在使用内存爆了以后会发生什么?hs_err_pid 日志如何看?
问题: Java进程被终止了,然后在应用的目录中发现了hs_err_pid日志. 运维反馈,结论是内存不够了 之前一直运行没有问题,没什么新增访问量,为什么会内存溢出,进程被killer掉类? 1.第 ...
- 1839:【05NOIP提高组】谁拿了最多奖学金
1839:[05NOIP提高组]谁拿了最多奖学金 时间限制: 1000 ms 内存限制: 65536 KB提交数: 9569 通过数: 4431 [题目描述] 某校的惯例是在每 ...
- 有关谷歌下载PDF文件而不是直接打开预览的问题
找了很多帖子,都不行, 解决方法把链接处理成blob文件再调用下载. 但是仍然不行,最终原因找到: 缺少了这一部创建,需要把二进制数据重新用 Blob对象申明下 let data = new Blob ...