04_web基础(四)之servlet详解
16.17.18.servlet生命周期
javax.servlet.Servlet接口方法:
public String getServletInfo():获取Servlet相关信息(作者,版权,版本)
public ServletConfig getServletConfig() :获取当前Servlet的配置对象.
public void init(ServletConfig config):初始化方法(准备工作)
public void service(ServletRequest req, ServletResponse res):服务方法,每次请求都会执行该方法
public void destroy():销毁方法(扫尾操作,服务器关闭的时候执行).
-----------------------------------------------------------------------
生命周期方法:
init(ServletConfig config):初始化方法(准备工作)
service(ServletRequest req, ServletResponse res):服务方法,每次请求都会执行该方法
destroy():销毁方法(扫尾操作).(该方法只要正常关闭Tomcat才执行,不需要再改方法编写扫尾代码)
执行流程:
构造器(只执行一次)--->init方法(只执行一次)---->service(每次请求都执行)---->destroy
Servlet是单例:只要Tomcat服务器不关闭,Servlet就只有一个实例.
构造器和init方法只在第一次请求之前,执行,只执行一次.
编写Servlet:
1):Servlet的构造器必须是public的.
2):Servlet的构造器必须是无参数的.
为什么:
底层创建Servlet对象(调用构造器):
Servlet obj = Class.forName("com.test.servelt.HelloServlet").newInstance();
19.servlet请求流程(非常重要)
Servlet的请求流程文字描述:
1:浏览器发出请求:http://localhost:8080/hello/hi.
2:tomcat解析请求:
上下文路径: /hello
资源名称: /hi
3:从..\webapp的WEB-INF下找到web.xml文件(当前访问项目的配置文件).
并判断web.xml文件中是否有<url-pattern>的文本内容为/hi.
若找不到:响应404.
找 到:获取当我请求资源对应Servlet类的全限定名称: com.test.servlet.HelloServlet
4:判断Servlet实例缓存池中是否存在com.test.servlet.HelloServlet对应的对象.
Map<String,Servlet> cache = ....(Servlet实例缓存池)
Servlet obj = cache.get(": com.test.servlet.HelloServlet");
if(obj==null){//实例缓存中没有: com.test.servlet.HelloServlet的对象,说明是第一次.
//使用反射创建对象(调用构造器)
obj = Class.forName(": com.test.servlet.HelloServlet").newInstance();
//把Servlet对象,放入缓存中,供下次使用
cache.put(": com.test.servlet.HelloServlet",obj);
}else{
GOTO 6:
}
5:创建ServletConfig对象,并调用init方法.
obj.init(config);
6:创建ServletRequest和ServletResponse对象,并调用service方法,并作出相应.
obj.service(req,resp);
20.servlet初始化参数
ServletConfig接口:封装了Servlet的配置信息.
该接口提供了获取Servlet配置信息(servlet的配置名称等)的方法.
---------------------------------------------------------------------------------
ServletConfig接口的方法:
String getServletName() :获取Servlet的名称
ServletContext getServletContext() :获取Servlet上下文
String getInitParameter(String paramName):获取初始化参数
Enumeration<String> getInitParameterNames():获取所有初始化参数的名字


21.模拟httpServlet


22.servlet继承体系


23.24.httpServlet简单使用
HttpServletRequest接口,表示Http的请求对象.是ServletRequest接口的子接口.
在该接口中的方法,可以获取请求信息(请求行,请求头,请求实体).
---------------------------------------------------------------------
常用的方法:
1:String getMethod():返回请求方式:如GET/POST
2:String getRequestURI():返回请求行中的资源名字部分
3:StringBuffer getRequestURL():返回客户端请求的完整URL
4:String getContextPath():返回请求URL所属Web应用的路径
5.String getRemoteAddr():返回发出请求的客户机的IP地址
6.String getHeader(String name):根据指定的请求头名,获取对应值.
获取请求参数:
01.String getParameter(String name):返回指定名字参数的值。
02.String[] getParameterValues(String name):返回指定名字参数的多个参数值。
03.Enumeration<String> getParameterNames():返回所有参数名的Enumeration对象。
04.getParameterMap():返回所有的参数和值所组成的Map对象。
------------------------------------------------------------------------
问题:
String getInitParameter(String paramName):获取初始化参数,初始化参数是我们自己为了避免硬编码在web.xml中手动设置的.
String getParameter(String paramName):获取请求参数,(用户录入的数据)

25.请求的中文乱码处理
对于中文乱码问题:
根本原因,Tomcat底层使用的ISO-8859-1编码,该编码不支持中文.
解决方案:
1:先使用ISO-8859-1,把乱码数据恢复成二进制形态
byte[] data = username.getBytes("ISO-8859-1");
2:再使用UTF-8,对二进制数据重新编码
username=new String(data,"UTF-8");
=================================================
解决方案没问题,但是如果参数过大,工程浩大.
如果请求方式是POST:
获取任意参数之前,先设置请求编码.
req.setCharacterEncoding("UTF-8");

26.HttpServletResponse接口与响应乱码

27.Servlet注解

28.servlet映射细节
Servlet的映射细节:
1:同一个Servlet,可以配置多个url-pattern.
2:资源通配符配置: *(任意个数的任意字符)
第一种: /* 或则/web/*
/*:随便一个字符,都可以访问当前Servlet.
/web/*:所以以 /web/ 打头的资源名才可以访问该Servlet.
第二种: *.拓展名
*.html:资源名必须以.html结尾才可以访问当前Servlet.
3:配置Servlet的时候,<servlet-name>不能起名为default.
在Tomcat中,主web.xml文件,规定了,访问静态资源都得通过default的Servlet.
4:Servlet对象的生命周期:
第一次访问的:
构造器--->init--->service
第N次:
service.
在框架中,我们习惯给Servlet配置:<load-on-startup>来决定其构建和初始化顺序.
学习SpringMVC的时候,优先启动该Servlet(该Servlet主要负责加载资源和初始化操作.)

04_web基础(四)之servlet详解的更多相关文章
- mysql基础篇 - SELECT 语句详解
基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...
- J2EE进阶(四)Spring配置文件详解
J2EE进阶(四)Spring配置文件详解 前言 Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸".Java EE程 ...
- Java基础-面向接口编程-JDBC详解
Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...
- ELK&ElasticSearch5.1基础概念及配置文件详解【转】
1. 配置文件 elasticsearch/elasticsearch.yml 主配置文件 elasticsearch/jvm.options jvm参数配置文件 elasticsearch/log4 ...
- java基础(3)--详解String
java基础(3)--详解String 其实与八大基本数据类型一样,String也是我们日常中使用非常频繁的对象,但知其然更要知其所以然,现在就去阅读源码深入了解一下String类对象,并解决一些我由 ...
- 计算机网络基础之IP地址详解
计算机网络基础之IP地址详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IP地址概述 1>.什么是IP地址 我们为什么要使用逻辑地址(IP地址)来标识网络设备,而不采 ...
- Java Servlet详解(体系结构+注解配置+生命周期)
Java Servlet详解(注解配置+生命周期) 什么是Servlet : (Server applet)? 顾名思义:服务端的小程序 Servlet只是一个接口,定义了Java被浏览器访问到(To ...
- ElasticSearch第四步-查询详解
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
- Servlet详解
原文出处:http://blog.csdn.net/q547550831/article/details/50458456 Servlet详解 基本概述 Session在计算机中,尤其是在网络应用中, ...
- [五]基础数据类型之Short详解
Short 基本数据类型short 的包装类 Short 类型的对象包含一个 short 类型的字段 原文地址:[五]基础数据类型之Short详解 属性简介 值为 215-1 ...
随机推荐
- SPOJ3276 D-query
题意:n个数 a1...an,q组询问,每组询问给定 l,r,输出 [ l, r ] 有多少不同的数 ( n ≤30000, q ≤200000, ai ≤ 106 ) 离线 + 树状数组维护 #in ...
- 【Jmeter自学】JMeter的安装(一)
==================================================================================================== ...
- [PHP-DI] 理解依赖注入
理解依赖注入 依赖注入 和 依赖注入容器 是不同的: 依赖注入 (Dependency injection) 是编写更好代码的一种方法 容器 (Container) 是帮助注入依赖关系的工具 你不需要 ...
- mongodb的副本集|备份|恢复备份
复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾 ...
- N的多次方Python实现
N的多次方描述编写一个程序,计算输入数字N的0次方到5次方结果,并依次输出这6个结果,输出结果间用空格分隔.其中:N是一个整数或浮点数.print()函数可以同时输出多个信息,采用如下方法可以使用空格 ...
- C# 中的 ConfigurationManager类引用方法
c#添加了Configuration;后,竟然找不到 ConfigurationManager 这个类,后来才发现:虽然引用了using System.Configuration;这个包,但是还是不行 ...
- NRF51822之使用外部32Mhz晶振
硬件平台为微雪BLE400的(将原来的16mhz晶振改为32mhz.两个旁电容改为22pf) 以nRF51_SDK_10.0.0_dc26b5e\examples\ble_peripheral\ble ...
- 机器学习进阶-图像形态学操作-腐蚀操作 1.cv2.erode(进行腐蚀操作)
1.cv2.erode(src, kernel, iteration) 参数说明:src表示的是输入图片,kernel表示的是方框的大小,iteration表示迭代的次数 腐蚀操作原理:存在一个ker ...
- Python_02 基本数据类型、while循环
1.基本数据类型 1.字符串(引号内): name=“我是Manuel” name='我是Manuel' name="""Manuel""" ...
- 使用Docker容器的十大误区
转自:http://www.dockone.io/article/1264 对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头.体验到它的强大性能之后,相信大家最终是 ...