(未完成)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 ...
随机推荐
- day13-自定义拦截器
自定义拦截器 1.什么是拦截器 说明: 拦截器与过滤器的区别 SpringMVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求 ...
- shrio
Shrio 页面报错 <link rel="shortcut icon" href="#"/> 简单的安全框架 官网:https://shiro.a ...
- RocketMQ - 生产者启动流程
生产者启动流程 DefaultMQProducer是RocketMQ中默认的生产者实现 核心属性: namesrvAddr: 继承自 ClientConfig,表示 RocketMQ 集群的Names ...
- 研发效能DevOps推荐书单
专注 300 页之内的经典书籍推荐 研发效能涉及的知识很多,从大的方向去划分包括制度.组织.平台.运营等:单从软件研发的角度去看也包括很多,包括最底层的软工认知.实践,到团队管理和组织.敏捷研发,项目 ...
- Postman操作指南
基本使用 基本使用在这里不做记录,大多数人下载完就会用.这里记一下重点. 抓包浏览器 浏览器安装插件postman interceptor:插件在postman-interceptor界面最下面提示的 ...
- JZOJ 3232. 【佛山市选2013】排列
题目 解析 很神奇的一道题 显然,对于一种排列,相当于给出了数字 \(1..n\) 的对应关系,且不重复不遗漏,刚好把 \(1\) 到 \(n\) 又包含了一遍. 对,连边! 每个数向它对应的数连边, ...
- 解决ssh连接远程主机出现“REMOTE HOST IDENTIFICATION HAS CHANGED”问题
Win通过ssh连接远程主机 命令提示符方式 ssh username@ip 此后输入你的密码 通过VSCode Remote-SSH 在VSCode拓展中搜索"Remote-SSH&quo ...
- GetShell 之:利用 SQLServer GetShell
GetShell 之:利用 SQLServer GetShell 目录 GetShell 之:利用 SQLServer GetShell 1 SQLServer 基础操作 2 SQLServer 利用 ...
- Commons-Collections反序列化
Java反序列化漏洞 Commons Collections Apache Commons 是 Apache 软件基金会的项目.Commons Collections 包为 Java 标准的 Coll ...
- 计网学习笔记二 Link Layer Service
在上一周的计网学习了network和Internet的总论.在这一周开始的未来几讲将集中在链路层link layer,并且会有相应的计网lab完成.在这一讲中,我们主要关注链路层提供的服务. 课程资料 ...