设为首页 加入收藏

TOP

Servlet原理与生命周期
2014-11-24 02:50:52 来源: 作者: 【 】 浏览:1
Tags:Servlet 原理 生命 周期

Servlet何时被实例化 何时又被销毁?


·加载: 默认情况下,如果没有在web.xml中配置自动装入(load-on-startup),那么当客户端第一次请求Servlet时,web服务器
才对Servlet类加载到内存并进行实例化,如果配置了自动装入,那么在tomcat启动时就进行加载实例化。(一个周期内
只实例化一次,即服务器里只有一个该Servlet类的实例化对象)


·初始化:Servlet被实例化后接着就会调用从父类继承来的初始化方法init()对Servlet类进行初始化。(初始化一次)
·服务:初始化之后就是等待被调用 service()方法(能够多次被调用)
|-为什么调用的是service方法,那写doGet doPost有啥用?
可以这么认为:service方法会自动区分调用哪个doXxx方法。所以一般不会覆写service
方法。 (覆写了没有自己实现区分调用哪个doXxx方法的话,那些doGet这些就没用了)
|-服务器里只有一个对象,那么怎么解决多个请求?排队等待?
Servlet中采用的是多线程的处理方式,在tomcat内部有一个线程池,提前准备了若干线程,每一个请求分配一个线
程来处理,但注意每个线程访问的是同一个Servlet对象。
·销毁:销毁正常也只有一次,web服务器关闭时会调用destroy()方法自动销毁,如果长时间不使用也会被自动销毁。


为什么修改了Servlet,编译并覆盖了硬盘上的class文件,但是访问还是原来那个?
Tomcat启动后在加载阶段Servlet类加载到内存中,当这个Servlet没有被销毁时一直存在内存的,以后的请求都直接从内存中取得,所以修改完Servlet后,单单覆盖硬盘上的类是不行的,要么重启服务器,要么修改web.xml(如果tomcat发现某一个工程的web.xml有改变,tomcat会将这个工程所有东西重新部署)


Servlet里取得其他常用对象及使用


1.request和 response 在doGet doPost方法中已经自动传进来了,直接使用
|- request response的编码设置
request.setCharacterEncoding("UTF-8");//设定接收请求内容的编码,UTF-8支持中文
response.setCharacterEncoding("UTF-8");//设定返回内容的编码,UTF-8支持中文
response.setContentType("text/html");//指定返回的内容是文本以及html格式
|-页面跳转
response.sendRedirect("index.html");



2.session(在服务器内存中写入一个变量)
HttpSessionsession=request.getSession();//在服务器内存中为当前浏览器开辟一个空间
//如果浏览器关闭,那么session会被注销
session.setAttribute("username",”surong”);//往服务器内存中写入一个变量
String a=(String)session.getAttribute("username");//在服务器内存中查找username变量
session.removeAttribute("username");//删除内存中的username变量
session.invalidate();//直接将当前浏览器的session销毁
3.out.println输出页面内容



response.setCharacterEncoding("UTF-8");//设定返回内容的编码,UTF-8支持中文
response.setContentType("text/html");//指定返回的内容是文本以及html格式
PrintWriter out = response.getWriter(); //获取一个输出流
out.println("\n"+
"Hello\n"+
"\n" +
"

Hello,"+username+",你的密码是: "+password+"

\n" +
"");


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux静态库和动态库的编写和使用 下一篇使用 Lua 编写一个 Nginx 认证模块

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: