什么是Servlet:
是开发动态web资源的技术。
一个java程序向浏览器输出数据的步骤:
1、创建一个java类,实现servlet接口
2、然后把java类部署到web服务器中
servlet运行的过程:(重点)
1、web容器会先检查有没有servlet实例,没有则执行第二步,有则执行第四步
2、web容器会装载和创建servlet实例
3、调用init()方法,这是初始化方法(像游戏里面,刚开始你要设置人物的武力值什么的)
4、创建http请求对象(用来封装数据的)和http响应对象,调用service()方法
5、当web容器关闭,调用destroy()方法释放资源
使用servlet,需要理解它的web.xml配置文件(就像取小名,小名可以代表你本人):
常见的属性:
<servlet -name>:servlet注册名称
<servlet -class>:servlet完整类名(就是servlet在项目中的绝对路径)
<url - patten>:servlet对外访问路径(就是你访问网站的网址)
例子:
web.xml
1 <Servlet> 2 <servlet-name>demo1</servlet-name> 3 <servlet-class>gacl.servlet.servlet.servletDemo1</servlet-class> 4 </Servlet> 5 6 7 <Service-mapping> 8 <service-name>demo1</servlet-name> 9 <url-patten>/servlet/1.jsp</url-patten> 10 </Servlet-mapping>
Servlet:是java类,供其他java类调用,无法独立运行,受到Servlet引擎调用
Servlet线程安全问题:(我感觉挺重要的)
出现的情况:出现多线程的情况下,会出现线程安全问题
解决方法:
1、将变量设置为局部变量(安全问题通常就是多个线程调用变量导致出现问题)
2、synchronize(就是一个锁,第一个线程调用方法时,你将方法上锁,只有第一线程结束,第二线程才可以调用方法)
SUN公司提供的解决方法:让Servlet实现一个singleThreadModel接口,如果某个Servlet实现了ServletThreadModel接口,那么Servlet引擎
将以单线程模式来调用service方法
标记接口:没有变量,没有方法
作用:打上标志(比如cloneable()方法就是允许克隆)
(重要)对于实现SingleThreadModel接口的servlet,servlet引擎仍然对servlet的多线程并发访问,其采用的方式是产生多个servlet实例对象,
并发的每个线程分别调用一个独立的servlet实例对象