【原创101】Servlet精细笔记
一、什么Servlet?
servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
1.1、编写一个servlet程序:
a、写一个java类,实现servlet接口

b、修改web.xml文件,给servlet提供一个可访问的URI地址

c、部署应用到tomcat服务器
D、测试:http://locahost:8080/day08_servlet/demo1
二、执行过程

三、Servlet生命周期(重要)
实例化(构造方法)-->初始化(init方法)-->服务(service方法)->销毁(destroy方法)
出生:(实例化-->初始化)第一次访问Servlet就出生(默认情况下)
活着:(服务)应用活着,servlet就活着
死亡:(销毁)应用卸载了servlet就销毁。


小知识:
如何让servlet在服务器启动时就创建。

四、Servlet的三种创建方式
4.1、实现javax.servlet.Servlet接口(参见:编写一个servlet程序:)
4.2、继承javax.servet.GenericServlet类(适配器模式)

4.3、继承javax.servlet.http.HttpServlet类(模板方法设计模式)
(开发中常用方式)重写doXXX()

重写doget和dopost方法
Service细节
因为httpservlet中没有service方法,所以找父类(genericservlet)的service方法
1.继承而来的service

Service参数造型加协议,再执行service方法(自身的)
2.跳转至自己的service方法,寻找匹配,执行相应doxxx方法

3.执行doGet()
因为重写了该方法,执行重写的方法
Tomcat执行相当于:
servlet s = new servletDemo3();
S.service(); 中的s==>servletDemo3==>httpservlet==>genericservlet
Servlet --> GenericServlet --> HttpServlet (继承HttpServlet)
曾祖父 爷爷 爸爸 孙子
小技巧:使生成的servlet更清新一些
找到:MyEclipse\Common\plugins目录
把com.genuitec.eclipse.wizards_9.0.0.me201108091322.jar复制到上面目录
servet映射细节:
servet映射细节1:

servet映射细节2: 通配符* 代表任意字符串
url-pattern: *.do 以*.字符串的请求都可以访问 注:不要加/
url-pattern: /* 任意字符串都可以访问
url-pattern: /action/* 以/action开头的请求都可以访问
匹配规则:
优先级:从高到低
绝对匹配--> /开头匹配 --> 扩展名方式匹配
如果url-pattern的值是/,表示执行默认映射。所有资源都是servlet
五、Servlet的线程安全
单实例:每次访问多线程
解决线程安全问题的最佳办法,不要写全局变量,而写局部变量。
六、Servlet获取配置信息
ServletConfig的使用
作用1:可以获取servlet配置信息
即获取<init-param>中<param-name><param-value>
使用getInitParameter()方法
方式1:使用 继承自genericservlet中的init(servletconfig config)
先在init方法中得到servletconfig对象,再使用getInitParameter()方法

根据config.getInitParameter(“参数”),获得值(value)
方式2:使用 继承自servlet中的getServletConfig() 与getInitParameter
this.getServletConfig().getInitParameter(“参数”)

方式3:使用 继承自genericservlet中的getInitParameter(String name)

this.getInitParameter(“参数”)
作用2:可以获得ServletContext对象
七、ServletContext(重要)
ServletContext: 代表的是整个应用。一个应用只有一个ServletContext对象。单实例。
作用:
1.域对象:在一定范围内(当前应用),使多个Servlet共享数据。
常用方法:
void setAttribute(String name,object value);//向ServletContext对象的map中添加数据
Object getAttribute(String name);//从ServletContext对象的map中取数据
void removeAttribute(String name);//根据name去移除数据

ServletContext对象中维护一个map集合
Servletdemo1

Servletdemo2

2.获取全局配置信息:
修改web.xml文件:

|
getInitParameter(String name) //根据配置文件中的key得到value |

3.获取资源路径:
String getRealPath(String path);//根据资源名称得到资源的绝对路径.
可以得到当前应用任何位置的任何资源。


实现Servlet请求的转发

RequestDispatcher getRequestDispatcher(String path) ;//参数表示要跳转到哪去
Servlet1办不了转给servlet2,servlet2办完了返回给servlet1,servlet1将结果给浏览器

八、Servlet相关对象

【原创101】Servlet精细笔记的更多相关文章
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- # jsp及servlet学习笔记
目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...
- Servlet学习笔记(四)
目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...
- Servlet学习笔记(三)
目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
- [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- JS分两种数据类型,你都知道吗?
大牛请无视此篇! JS主要分基本数据类型和引用数据类型,这两者区别可大了,此篇看完必有长进,下面进入正题 首先我们看下什么是基本数据类型(概念我就不说了,直接上代码): var i = 10: var ...
- 每天一个linux命令(56)--crontab命令
上一节学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,Linux 系统则是由 cron(crond)这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
- 条件查询php
页面1.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- Hibernate 迫切连接和普通连接的区别
package com.baidu.test; import java.util.ArrayList;import java.util.LinkedHashSet;import java.util.L ...
- Docker笔记二:Lumen & Redis
Lumen 基于 Laravel 打造,专为构建微服务和 APIs 而生:Redis 与 Memcached 均为常用的 key-value 内存对象缓存服务(系统),免费开源,Redis 支持持久化 ...
- redis的数据类型 (一) 字符串
redis中存储方式是以键值对存储的,所以叫做字典试.redis(Remote dictionary server)远程字典服务器 每个redis数据类型,都会有增加.删除,查看的功能,用实例来学习命 ...
- 腾讯云分布式高可靠消息队列服务CMQ架构
在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值 ...
- AtomicInteger源码分析——基于CAS的乐观锁实
1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换.切换涉及 ...
- java aes encrypt
本次使用aes 对称加密算法. 选用aes的原因是,可以还原加密串. 程序如下: public static String encode(String content){ KeyGenerator k ...
- netty-all maven中 缺少jzlib
在一个项目中引用 <dependency> <groupId>io.netty</groupId> <artifactId ...