一、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. rt-thread模糊到清晰系列: irq.c

    #include <rthw.h> #include <rtthread.h> // 进入离开中断的钩子函数 #ifdef RT_USING_HOOK static void ...

  2. Zstack使用经验系列1-安装的网络配置

    https://www.zstack.io/help/product_manuals/maintenance_manual/4.html 在官网上从这里有详细的安装,读者可以从上面链接开始起步装起来. ...

  3. Java开发中要避免的坑和一些代码优化技巧

    1:动态SQL遇到的坑,先看下面OGNL表达式的说明. Any object can be used where a boolean is required. OGNL interprets obje ...

  4. LeetCode-630 课程表Ⅲ

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/course-schedule-iii 题目描述 这里有 n 门不同的在线课程,按从 1 到 n  ...

  5. Kali配置gmssl密码算法库

    Kali配置gmssl密码算法库 一.密码算法库的下载 https://github.com/guanzhi/GmSSL/releases 二.安装配置 1 解压 把刚刚下载的GmSSL 3.0.0. ...

  6. c# RegistryKey 的相关简单操作(转)

    c# RegistryKey 的相关简单操作   以下从'读''写''删除''判断'四个事例实现对注册表的简单操作 1.读取指定名称的注册表的值 private string GetRegistDat ...

  7. Day 13 13.1 refer反爬

    Referer 一.referer是什么: 图片防盗链的技术应该还有其他的,目前了解到的是浏览器的referer,其实这是错误的拼写,正确是应该是referrer.不过现在可以看到Chrome的开发者 ...

  8. 周练7(ssti)

    {7*7} ->49 -> smarty {{7*'7'}} -> 49 -> twig {{7*'7'}} -> 7777777 -> jinjia2 1. [B ...

  9. MyFreeMarkerConfigurer

    public class MyFreeMarkerConfigurer extends FreeMarkerConfigurer { @Override public void afterProper ...

  10. N63050 第十二周运维作业 ansible常用模块介绍未完成

    就业和全程班本周学习内容: 二十三.Mysql数据库四 1.MySQL主从复制实现和故障排错(50分钟) 2.MySQL级联复制和主主复制架构实现(51分钟) 3.MySQL的半同步复制和复制过滤器( ...