servlet的三种开发方式

开发servlet,首先需要import javax中的servlet包可能还用用到java中的io包。需要注意的是这三种方式执行业务逻辑的方法。实现Servlet接口里 会将业务逻辑代码放在service方法中;继承GenericServlet里面 也是将业务逻辑代码放在service方法中,两种方法都会将ServletRequest和ServletResponse的对象作为入参;在继承HttpServlet类方式里面业务逻辑代码可以放在doGet和doPost方法里面,而且传入的参数也不一样,传入的是HttpServletRequest和HttpServletResponse的对象,一定要注意!!
①通过实现Servlet接口来开发servlet
这种方式能很好的体现一个servlet的生命周期但是不常用到。
在Servlet接口中一共定义了五个方法,我们要将他们一一实现才能算是完成一个servlet。以下这五个方法。
⑴void init()throws ServletException{} 是servlet的生命周期方法,该方法是用来初始化servlet的,只在该servlet第一次创建对象的时候被调用一次。

⑵void service(ServletRequest req,ServletResponse res){}
  生命周期方法, 这个方法中用来存放该servlet的业务代码,也就是需要完成的程序代码。每次servlet被调用该方法都会执行。

⑶void destroy(){}   生命周期方法,当servlet被销毁时执行这个方法。
⑷public ServletConfig getConfig(){} 好像是一个返回该Servlet初始化参数和启动参数的ServletConfig对象的方法。一般在编写Servlet时都让它返回null。
⑸public String getServletInfo(){}  返回该Servlet类的信息,开发者,开发时间之类的。
代码如下:
import java.io.*;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


//实现Servlet接口来开发Servlet。
public class Welcom implements Servlet{
	
	//处理业务的方法,每当客户端访问一次该Servlet就会被调用一次
	public void service(ServletRequest request,ServletResponse response){
	//javax.servlet.ServletResponse response;
	try{
		PrintWriter pw=response.getWriter();
		pw.println("welcom !");
	}catch(Exception ex){
		ex.printStackTrace();
		}
	}
	public ServletConfig getServletConfig(){
		return null;
		}
	public String getServletInfo(){
		return null;
		}
	//初始化的方法,只会在用户访问该Servlet时被调用,且只会被调用一次。
	public void init (ServletConfig arg0){
		System.out.println("init it! ");
	}
	//释放内存。
	public void destroy(){
		System.out.println("destroy");
	}

}


②通过继承GenericServlet
这种方式也不是经常会用到的方式,
这种方式通过继承GenericServlet类,覆盖该类中的service方法来开发servlet,
public void servic(ServletRequest request,ServletResponse response)
{}在这个方法中写入业务代码。代码如下:
[java] view plain copy
package com.kiritor.servlet;  
  
import java.io.IOException;  
import java.io.PrintWriter;  
  
import javax.servlet.GenericServlet;  
import javax.servlet.Servlet;  
import javax.servlet.ServletException;  
import javax.servlet.ServletRequest;  
import javax.servlet.ServletResponse;  
  
/** 
 * Servlet implementation class ExGenericServlet 
 */  
public class ExGenericServlet extends GenericServlet implements Servlet {  
    private static final long serialVersionUID = 1L;  
         
    /** 
     * @see GenericServlet#GenericServlet() 
     */  
    public ExGenericServlet() {  
        super();  
        // TODO Auto-generated constructor stub  
    }  
  
    /** 
     * @see Servlet#service(ServletRequest request, ServletResponse response) 
     */  
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {  
        PrintWriter writer = response.getWriter();  
        writer.write("Imp Servlet!");  
                writer.flush();  
                writer.close();  
 }  
  
}  

③通过继承HttpServlet类来创建servlet
这种方式是最常见的一种方式开发Servlet

因为http在提交表单的时候一般都是get和post两种方法。
用这种方式的话,就要通过覆盖
doGet(HttpServletRequest req,HttpServletResponse res)和
doPost(HttpServletRequest req,HttpServletResponse res)两种方法来完成。
在覆盖两个方法时,需要传入HttpServletRequest 和HttpServletResponse 两个类的实例对象,这两个对象不需要我们去创建,web容器会帮我们去创建,我们只需要在方法中传入就行了。

在方法体中因为在调用的过程中可能会抛出异常,所以需要方法内try{}catch()住可能会抛异常的代码。
如果两种方法处理业务逻辑都相同的话,在两个方法中都写出同样的代码就会代码重复,为了提高代码复用性我们只需要在doPost()方法中通过this.doGet(),来完成同样的任务,反之亦可。
代码如下:
import javax.servlet.http.*;

import java.io.*;
public class DengLu extends HttpServlet {
	
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		try{
		res.setContentType("text/html;charset=gbk");
		PrintWriter pw=res.getWriter();
		pw.println("<HTML>");
		pw.println("<BODY>");
		pw.println("<h1 align='center'>登录界面</h1>");
		pw.println("<form action=tiaozhuan method=post>");
		pw.println("<p align='center'>用户名:<input type=text name=username></p>");
		pw.println("<p align='center'>密码&nbsp:<input type=password name=pw></p>");
		pw.println("<p align='center'><input type=submit valua=登录></p>");
		pw.println("</form>");
		pw.println("</BODY>");
		pw.println("</HTML>");
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req, res);
	}

}

猜你喜欢

转载自201610222643.iteye.com/blog/2339891