开发Servlet的三种方法:
a.实现Servlet接口
b.通过继承GenericServlet
c.通过继承HttpServlet
以下代码是通过实现Servlet接口来实现业务逻辑的:
package com.hello;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyFirstServlet implements Servlet{
//该函数用于初始化servlet,就是把该servlet装载到内存中
//该函数只会调用一次
public void init(ServletConfig config)
throws ServletException{
}
//得到ServletConfig对象
public ServletConfig getServletConfig(){
return null;
}
//该函数是服务函数,业务逻辑函数写在这里
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
java.io.IOException{
}
//该函数得到servlet配置信息
public java.lang.String getServletInfo(){
return null;
}
//销毁该servlet
public void destroy(){
}
}
以上Servlet调用流程为:
1.Web服务器首先检查是否已经装载并创建了该Servlet的实例对象,如果是,则直接执行第3步,否则执行第2步。
2.装载并创建该Servlet的一个实例对象,即调用init()方法。
3.创建一个用于封装HTTP请求消息的HTTPServletRequest对象和一个代表HTTP响应消息的HTTPServletResponse对象,然后调用
Servlet的service()方法并将请求和响应对象作为参数传递进去。
4.Web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用destroy()方法。
一般以下3种情况,会导致destroy()方法的调用。
1.Web服务器重新启动
2.重新reload该Webapp时
3.重新启动计算机时
第二种实现Servlet的方法是继承GenericServlet,代码如下
<span style="font-size:12px;">package com.hello;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyFirstServlet extends GenericServlet{
//该函数是服务函数,业务逻辑函数写在这里
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
java.io.IOException{
}
}</span>
代码较第一种方法较少,不用强制重写5种方法,只需重写service方法,即可实现业务逻辑。
第三种实现Servlet的方法是继承HttpServlet,代码如下
<span style="font-size:12px;">package com.hello;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyFirstServlet extends HttpServlet{
//对get提交方式的回应
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException{
}
//对post提交方式的回应
protected void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException{
//可以在doPost()方法中调用doGet()方法,这样就相当于一个service()方法
this.doGet();
}
}</span>
HttpServlet方式开发Servlet需要重写doPost()和doGet()两种方法
那么表单提交数据get请求和post请求的区别在哪里呢?
1.从安全性来看 get<post get提交的数据会在浏览器的地址栏显示
2.从提交的内容大小来看 get<post get提交的数据不能大于2K,而post提交的数据理论上没有限制,但是实际中建议不要大于64K
3.从请求响应速度上来看 get>post get要求服务器立即处理,而post请求可能形成一个队列请求
编写完Servlet后生成class文件,放在classes目录下,然后再在web.xml文件中进行Servlet的部署即可调用