利用 Servlet 生命周期提高资源利用率

来源:互联网 发布:java应届生简历模板 编辑:程序博客网 时间:2024/06/09 23:23
      在 Servlet 生命周期中,init(ServletConfig conf) 方法和 destroy() 方法均会被服务器执行一次,而 service() 在每次客户端请求 Servlet 时都会被执行。service()方法再根据访问本 Servlet 的方式(GET 方式和 POST 方式)来调用相应的处理方式(doGet() 或者是 doPost() ),Servlet 中可以把用得到的一些初始化资源的代码放入 init() 方法内,把销毁该资源的代码放入 destroy() 方法内,而不需要每次处理请求都要初始化资源与销毁资源。

     对于 Servlet 的 init(ServletConfig conf) 方法,HttpServlet 提供一个更简单的不带参数的替代方法 init()。HttpServlet 加载的时候会执行这个不带参数的 init() 方法,因此只需把需要初始化资源的代码放到 init() 中就可以了

     我们在读取资源,一般都将资源配置在 web.xml 内,然后在 doGet() 或者 doPost() 方法内读取资源,每一次执行doGet() 或者 doPost() 方法都会读取一次,效率低下。利用 Servlet 的生命周期可以优化该操作。把读取资源的代码写在 init() 方法里,既保证了只读取一次,又保证不耽误doGet,doPost的使用,而把销毁资源的代码写在 destroy() 方法里。这样就保证了,在 doGet() 或者 doPost() 方法之前只初始化一次资源,然后在此之后再销毁资源,优化了资源的利用率。

 

案例,个税计算器:

package com.yao.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LifeCycleServlet extends HttpServlet {private static final long serialVersionUID = -7197419401412129310L;private static double startPoint = 0;@Overridepublic void init() throws ServletException {this.log("执行 init() 方法 ... ");// 第一种利用  Servlet 对象读取 web.xml 里的初始化值,this 代表本 ServletstartPoint = Double.parseDouble(this.getInitParameter("startPoint"));// 第二种利用 ServletConfig对象读取 web.xml 里的初始化值,this 代表本 Servlet// ServletConfig conf = this.getServletConfig();// startPoint = Double.parseDouble(conf.getInitParameter("startPoint"));}@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {this.log("执行 service() 方法 ... ");super.service(arg0, arg1);}@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.log("执行 doPost() 方法 ... ");response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML><HEAD><TITLE>个人所得税计算</TITLE></HEAD>");out.println("<link rel='stylesheet' type='text/css' href='../css/style.css'>");out.println("<BODY>");out.println("<div align='center'><br/><fieldset style=width:90%><legend>个税计算器</legend><br/>");try{// 从参数中获取的工资数目double income = new Double(request.getParameter("income"));// 应纳税部分double charge = income - startPoint;// 缴税double tax = 0;if (charge<=0) {tax=0;}if (charge>0&&charge<=500) {tax=charge*0.05;}if (charge>500&&charge<=2000) {tax=charge*0.1-25;}if (charge>2000&&charge<=5000) {tax=charge*0.15-125;}if (charge>5000&&charge<=20000) {tax=charge*0.2-375;}if (charge>20000&&charge<=40000) {tax=charge*0.25-1375;}if (charge>40000&&charge<=60000) {tax=charge*0.30-3375;}if (charge>60000&&charge<=80000) {tax=charge*0.35-6375;}if (charge>80000&&charge<=100000) {tax=charge*0.4-10375;}if (charge>100000) {tax=charge*0.45-15375;}out.println("<div style='line'>");out.println("<div class='leftDiv'>您的工资为</div><div class='rightDiv'>" + income + " 元</div>");out.println("</div>");out.println("<div style='line'>");out.println("<div class='leftDiv'>您应纳税</div><div class='rightDiv'>" + tax + " 元</div>");out.println("</div><br/>");out.println("<input type='button' onclick='history.go(-1);' value='纳税光荣 逃税可耻 返回'  class=button>");}catch(Exception e){out.println("请输入数值类型数据。<input type='button' onclick='history.go(-1);' value='返回'  class=button>");}out.println("</BODY>");out.println("</HTML>");out.flush();out.close();}@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.log("执行 doGet() 方法 ... ");response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<link rel='stylesheet' type='text/css' href='../css/style.css'>");out.println("<HTML><HEAD><TITLE>个人所得税计算</TITLE></HEAD>");out.println("<div align='center'><br/><fieldset style=width:90%><legend>个税计算器</legend><br/>");out.println("<form method='post' action='LifeCycleServlet'>");out.println("<div style='line'>");out.println("<div class='leftDiv'>您的工资为</div><div align='left' class='rightDiv'><input type='text' name='income'> 单位:元</div>");out.println("</div><br/>");out.println("<div style='line'>");out.println("<div class='leftDiv'></div><div align='left' class='rightDiv'><input type='submit' value='  计算个税  ' class=button></div>");out.println("</div>");out.println("</form>");out.println("<BODY>");out.println("</BODY>");out.println("</HTML>");out.flush();out.close();}@Overridepublic void destroy() {// 销毁资源this.log("执行 destroy() 方法 ... ");startPoint = 0;}}