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("<HTML>\n"+
          "<HEAD><TITLE>Hello</TITLE></HEAD>\n"+
          "<BODYBGCOLOR=\"#FDF5E6\">\n" +
          "<H1>Hello,"+username+",你的密码是: "+password+"</H1>\n" +
          "</BODY></HTML>");

相关阅读:

配置Struts2后如何使用Servlet 

Android通过http传输文件到Servlet 

Servlet 调用 Spring 容器的 service 

使用 Spring 容器管理 Servlet 

WAS Websphere下新增Servlet无法访问的问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7c9436fe70c31399e262ef4bb4d41203.html