一、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学习——的更多相关文章

  1. JAVAWEB学习

    http://www.cnblogs.com/xdp-gacl/p/3744053.html JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)

  2. JavaWeb学习总结-01 JavaWeb开发入门

    一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面): ...

  3. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

  4. JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB

    JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...

  5. JavaWeb学习总结(一)——JavaWeb开发入门

    http://www.cnblogs.com/xdp-gacl/p/3729033.html 只为成功找方法,不为失败找借口! JavaWeb学习总结(一)--JavaWeb开发入门 一.基本概念 1 ...

  6. javaweb学习总结(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  7. javaweb学习之Servlet开发(二)

    javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...

  8. JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

  9. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  10. JavaWeb学习----JSP脚本元素、指令元素、动作元素

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. day13-自定义拦截器

    自定义拦截器 1.什么是拦截器 说明: 拦截器与过滤器的区别 SpringMVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求 ...

  2. shrio

    Shrio 页面报错 <link rel="shortcut icon" href="#"/> 简单的安全框架 官网:https://shiro.a ...

  3. RocketMQ - 生产者启动流程

    生产者启动流程 DefaultMQProducer是RocketMQ中默认的生产者实现 核心属性: namesrvAddr: 继承自 ClientConfig,表示 RocketMQ 集群的Names ...

  4. 研发效能DevOps推荐书单

    专注 300 页之内的经典书籍推荐 研发效能涉及的知识很多,从大的方向去划分包括制度.组织.平台.运营等:单从软件研发的角度去看也包括很多,包括最底层的软工认知.实践,到团队管理和组织.敏捷研发,项目 ...

  5. Postman操作指南

    基本使用 基本使用在这里不做记录,大多数人下载完就会用.这里记一下重点. 抓包浏览器 浏览器安装插件postman interceptor:插件在postman-interceptor界面最下面提示的 ...

  6. JZOJ 3232. 【佛山市选2013】排列

    题目 解析 很神奇的一道题 显然,对于一种排列,相当于给出了数字 \(1..n\) 的对应关系,且不重复不遗漏,刚好把 \(1\) 到 \(n\) 又包含了一遍. 对,连边! 每个数向它对应的数连边, ...

  7. 解决ssh连接远程主机出现“REMOTE HOST IDENTIFICATION HAS CHANGED”问题

    Win通过ssh连接远程主机 命令提示符方式 ssh username@ip 此后输入你的密码 通过VSCode Remote-SSH 在VSCode拓展中搜索"Remote-SSH&quo ...

  8. GetShell 之:利用 SQLServer GetShell

    GetShell 之:利用 SQLServer GetShell 目录 GetShell 之:利用 SQLServer GetShell 1 SQLServer 基础操作 2 SQLServer 利用 ...

  9. Commons-Collections反序列化

    Java反序列化漏洞 Commons Collections Apache Commons 是 Apache 软件基金会的项目.Commons Collections 包为 Java 标准的 Coll ...

  10. 计网学习笔记二 Link Layer Service

    在上一周的计网学习了network和Internet的总论.在这一周开始的未来几讲将集中在链路层link layer,并且会有相应的计网lab完成.在这一讲中,我们主要关注链路层提供的服务. 课程资料 ...