Servlet的三种模式
1.1实现Servlet接口
一个类要实现Servlet接口需要重写所有方法
package li.test;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletTest implements Servlet {
//获取请求信息,并设置响应信息
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("Hello Servlet");
}
//Servlet实例从服务器中移除时,或者释放内存或容器关闭的时候调用
@Override
public void destroy() {
} //
//从web.xml中获取Servlet配置信息
@Override
public ServletConfig getServletConfig() {
return null;
}
//获取容器信息
@Override
public String getServletInfo() {
return null;
}
//初始化
@Override
public void init(ServletConfig config) throws ServletException {
}
}
1.2继承GenericServlet抽象类(适配器模式)
实现了Servlet接口可以直接调用
只用自己重写service
package li.test;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletTest2 extends GenericServlet {
private static final long serialVersionUID = 1L;
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("Hello");
}
}
1.3继承HttpServlet抽象类(模板方法设计模式) 最常使用
实现了Servlet接口
只用重写doPost和doGet,二者都是处理http请求和返回信息给webserver,实际上最终都是重写了Servlet的service方法
package li.test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletTest3 extends HttpServlet {
private static final long serialVersionUID = 1L;
public ServletTest3(){
super();
}
//处理浏览器的doGet请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getOutputStream().print("get");
}
//处理浏览器的doPost请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getOutputStream().print("post");
}
}
get浏览器向服务器申请内容
post一般是提交请求,但是不绝对
如图中基本全是get获取服务器的内容,只有回复的内容是post,即提交的请求。
get也可以提交请求只要改变html提交的方式即可。
get和post提交数据的一些区别
- Get提交把提交数据写在url后面, 而Post提交不会
- Get提交有数据容量限制(4K), 而Post提交原则上是没有数据大小限制的, 但是不建议超过64k
- Get提交是即时相应, 所以反应快, 而Post提交会被WebServer放入队列, 所以有时相应会慢点.