Servlet深度分析

Servlet深度分析

1.Servlet出现的技术背景

JAVASE中的程序很简单,随着IT技术的发展,有了网络,迫切需要通过网络来传输数据,此时JDK中嵌入了Socket这类API,通过这类API就可以通过网络传输数据. 有了socket是可以在网络中传输数据了,但是数据如何传,想怎么传就怎么传?不是的,需要用协议约束一下,就有了我们的HTTP协议. 如果仅仅是想在网络上展示一些静态的html宣传页面,我们用将TestServer稍作改造即可.如何改造?

但是随着技术的发展,迫切需要我们可以访问服务端的某段程序让其执行.例如我们点击登录,希望服务端有段程序可以接受我们的数据,实现登录这种功能.如何实现这种技术呢?sun早期的设计人员并没有急于实现这种技术.而是先做一些抽象的设计.sun的设计人员认为,先应该抽取一些粗糙的接口来描述一些运行在服务端的JAVA程序应该能做些什么事情. 经过缜密分析之后,sun早期的大牛觉得运行在服务端的JAVA程序应该实现init,service,destroy这几个接口.分别代表初始化,服务和销毁三件事情.

但是谁来实现Servlet接口呢?当然是程序员实现了,但是这样实现了Servlet,没有配置文件是不行的,因为客户端的请求到达服务端之后,请求的路径采用的是类似如下的请示:
http://localhost:8080/servlet/myFirst, 服务端当然可以识别到这个路径,也知道本次请
求的是day34_servlet_01这个网站,但是这个网站下的myFirst这个是什么东东呢?此时就需要有
一个配置文件来说明白,myFirst对应的是哪个字节码文件?找到这个字节码才能创建这个对象,才可以运行其中的方法.采用实现Servlet接口形式创建运行在服务端的JAVA小程序,需要我们自己配置. 后来SUN的大牛,觉得这种方式太繁琐了,于是设计了一个抽象类就是GenericServlet,这个类实现了Servlet中的init和destroy,但是对service仅仅是提供了一个抽象方法.
故事进行到此处已经很完美了,但是sun的人员还是留了个心眼,觉得如果以后tomcat要是发展好的话,是不是也可以考虑做其他的服务器,不仅仅是WEB服务器(底层走的是HTTP协议的).于是来了个httpServlet,这是和具体的协议有关的. 如果以后流媒体很厉害了,sun的人员在设计一个
流媒体servlet,这样大家就可以以继承流媒体servlet的形式来玩流媒体服务器了.

总结
1.什么是Servlet?
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范,用来处理客户端请求,
响应给浏览器的动态资源(是运行在服务端的程序,而不是以静态文件形式存在).
Servlet是JavaWeb三大组件之一(Servlet,Filter,Listener),且最重要.

2 Servlet的作用是什么?

 用来处理从客户端发送过来的请求,并对该请求作出响应.
Servlet的任务有
*_获取请求数据
*_处理请求
*_完成响应

3_Servlet生命周期

今后,只要涉及到生命周期的内容,我们要额外注意.

1_当用户通过浏览器首次访问某个Servlet时,tomcat会调用servlet的构造函数创建
  一个Servlet对象,之后调用servlet下的init方法(仅执行一次),
2_调用servlet下的service方法,在service方法中判断本次是GET/POST方法,调用servlet
  下的doget/dopost方法
3_以后从客户端浏览器每次向服务端对当前servlet发起请求,仅仅只执行其下的
service__>doget/dopost
4_停止服务器(正常/中断)/重新加载项目 servlet销毁
  正常停止服务器/重新加载项目会执行destory方法

注意: 单实例多线程模式,会有效率问题,安全问题

4 Servlet相关配置

*_启动创建Servlet
2
含义:让服务器启动就创建Servlet
*_url-pattern的编写
”/”不可缺少,否则服务器启动就报错

5_ServletConfig获取配置信息
在web.xml中为当前的sevlet配置相关参数

<init-param>
		<param-name>user</param-name>
		<param-value>root</param-value>
	</init-param>
	<init-param>
		<param-name>password</param-name>
		<param-value>123456</param-value>
	</init-param> 

用到的API
通过servletConfig获取web.xml中为当前servlet配置的参数信息
通过name获取name对应的值
返回的值为user对应的值root

String name=servletConfig.getInitParameter("uesr");

通过servletConfig获取web.xml中为当前servlet配置的所有的参数名称
本案例下获取到了user pass
servletConfig.getInitParameterNames();

获取到当前servlet中servlet-name标签中的内容
servletConfig.getServletName();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值