1.Servlet是什么
Servlet 是Java Web 三大组件之一,它属于动态资源,Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要 1.接收数据请求。2.处理请求。3.完成响应。 例如客户端发出登录请求,或者输入注册请求,这些请求都应该由Servlet来完成处理。当然Servlet类需要我们自己来编写。每个Servlet类都必须实现javax.servlet.Servlet接口
2.实现Serlvet的方式
1.实现javax.servlet.Servlet接口。2.继承javax.servlet.GenericServlet类。3.继承javax.servlet.http.HttpServlet类
一般来说我们都选择实现HttpServlet类来完成我们的Servlet.但学习Servlet还是要从javax.servlet.Servlet接口来学起。
2.1实现javax.servlet.Servlet接口
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
/**
* Created by ql on 2018/4/6.
*/
import java.io.IOException;
public interface Servlet {
/*
Servlet生命周期方法
它会在Servlet对象创建之后马上执行,并且只执行一次
* */
void init(ServletConfig var1) throws ServletException;
//该方法用来获取Servlet的配置信息
ServletConfig getServletConfig();
/*
它会被调用多次,每次处理请求都是在调用这个方法
*/
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
//该方法用来获取Serlvet的信息
String getServletInfo();
/*
它会在Servlet销毁之前调用,并且只调用一次。
*/
void destroy();
}
其中三个生命周期方法是由服务器调用的,我们是无法调用的。
2.2继承HttpServlet类
HttpServlet类使我们永达送次数最多的也是最简单的。由类名可知,与http有关。
方法中,值得我们关注的是doGet()和doPost()。还有两个service()方法.其中doGet()和doPost()方法是需要我们来重写的。
uml如下:
图中405的含义是说服务器不支持客户端(即浏览器)用此种方法访问,因为HttpServlet类的源码中doGet()和doPost()方法体里面就是这样写的,你在定义的xxxservlet中如果不重新重写这两个方法就会出现405的状态吗。在实现中,常以一下形式
FServlet即为我们自己定义的servlet类,doGet()和doPost()方法中即可写相应的业务逻辑。
扩展:对ServletContext的解释
服务器会为每个应用创建一个ServletContext 对象,一个应用只有一个ServletContext对象!我们可以再N多个Servlet中来获取这个唯一对象,使用它可以给多个Servlet传递数据。此对象在Tomcat(服务器)启动时就创建,在服务器关闭时就销毁。
ServletContext是JavaWeb四大域对象(PageContext,ServletRequest,HttpSession,ServletContext)之一,域对象所具有的特点是:1.能够存数据。2能够取数据
所有的域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:
Servlet类三大域:
1.request:在Servlet中直接用,因为实现的doPost()方法中有request这个参数
2.session:在Servlet中通过HttpSession session=request.getSession();得到
3.application:在Servlet中通过ServletContext application=this.getServletContext();得到。
JSP中四大域
1.page域:即9大内置对象中的pageContext,为PageContext的实例。注意:“page域”不同于9大内置对象中“page”。
2.request域:即9大内置对象中的request,为HttpServletRequest的实例。
3.session域:即9大内置对象中的session,为HttpSession的实例。
4.application:即9大内置对象中的ServletContext的实例。
如上几种方式便可实现我们自定义的Servlet类。但实际开发中我们只需要使用继承HttpServlet类完成我们的自定义xxxServlet
(另外学了SSM框架中的Spring MVC 框架后,就用不着我们再这样实现Servlet 了)