(未完成)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 ...
随机推荐
- P32_全局配置 - tabBar
什么是 tabBar tabBar 是移动端应用常见的页面效果,用于实现多页面的快速切换.小程序中通常将其分为: 底部 tabBar 顶部 tabBar 注意:tabBar中只能配置最少 2 个.最多 ...
- P18_Day2.学习目标
能够使用 WXML 模板语法渲染页面结构 能够使用 WXSS 样式美化页面结构 能够使用 app.json 对小程序进行全局性配置 能够使用 page.json 对小程序页面进行个性化配置 能够知道如 ...
- LC761.特殊的二进制序列
import org.junit.jupiter.api.Test;import java.util.ArrayList;import java.util.Collections;import jav ...
- 软件教程 | Jupyter&stata之stata_kernel攻略
![](http://mdimg.yxj1010.top/xlbxs_ydt2.png) 目录: 目录 一.什么是stata_kernel 1. stata_kernel简介 2. 为什么要使用sta ...
- JZOJ 7685. 【2022.10.06冲剌NOIP2022模拟】奇怪的函数(function)
\(\text{Solution}\) 观察到关于 \(x\) 的函数在 \(n\) 个操作之后一定是这样的: 一段水平直线加上一段斜率为 \(1\) 的直线再加上一段水平直线 于是线段树维护这个分段 ...
- Android实现仿微信实时语音对讲功能|与女友游戏开黑
与亲朋好友一起玩在线游戏,如果游戏中有实时语音对讲能力就可以拉进玩家之间的距离,添加更多乐趣.我们以经典的中国象棋为例,开发在线语音对讲象棋.本文主要涉及如下几个点: 在线游戏的规则,本文以中国象棋为 ...
- vue路由中pdfjs插件使用及找不到 viewer.html解决
官方下载: https://mozilla.github.io/pdf.js/getting_started/#download 同目录下pdfjs-2.12.313-dist.zip为官方下载包 此 ...
- Android Studio 模拟器(AVD)访问本机服务器
问题说明 若安卓模拟器(AVD)调试安卓 App,访问本机上的 Tomcat 服务器时,很有可能会不成功,按照下面的步骤来一遍以尝试解决问题. 模拟器配置 DNS 服务器 (一)找到模拟器安装的位置 ...
- TouchableOpacity无效
错误代码如下: <TouchableOpacity onPress={this.handleConfirmPress} activeOpacity={0.6} > <Text sty ...
- 通过docker 安装部署sentry
一.下载项目 git clone https://github.com/getsentry/self-hosted 二.安装 1.安装docker和docker-compose 2.运行sentry ...