Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。当客户机将请求信息发送到服务器时,服务器可以将请求信息发送给Servlet,并让Servlet进行响应。通过这个方式,Servlet可以实现许多功能:
-
1.创建并返回一个基于客户请求实质的、动态内容的完整HTML页面;
-
2.创建可嵌入到现有HTML页面中的HTML片段
-
3.读取客户端发送过来的隐藏数据
-
4.读取客户端发送过来的显示数据
-
5.与其它服务器资源进行通信
-
6.通过状态码和响应头向客户端发送隐藏数据
Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理。
Servlet的生命周期在它被装入Web服务器内存时开始,在Web服务器终止或重新装入Servlet时结束。一个Servlet程序在Web服务器上的运行过程经历了:装入、初始化、调用、销毁四个阶段,它的生命周期在第二个阶段开始,在第四个阶段终止。
生命周期方法:
载入(init)
,Web服务器加载和实例化Servlet的工作,该工作可以在Web服务器启动时到Web服务器受到请求时,之间任一时刻完成,之后进行初始化工作,这些工作在整个生命周期中只执行一次。
服务(service)
,从请求对象处获取响应信息,进行处理之后再次响应给客户机, 每次客户机请求时,Service方法都会被调用一次。
销毁(destroy)
:当服务器不再需要Servlet对象时,或者需要载入新的Servlet对象实例时,Web服务器会调用destroy方法执行销毁(一般只有在服务器正常关闭时执行),只执行一次。
public class ServletDemo implements Servlet{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Hello Servlet");
}
}
在我们开发过程中,实现Servlet的方法有3种,分别是实现Servlet接口、继承GenericServlet类和继承HttpServlet类,
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,HttpServlet是对http协议的一种封装,我们可以定义类继承HttpServlet,然后复写doGet/doPost方法。(在实际应用中,继承HttpServlet应用居多)
如果我们想要发送一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成:编写一个Java类,实现servlet接口,把开发好的Java类部署到web服务器中这两步。
-
搭建步骤:
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口(public class ServletDemo1 implements Servlet)
3. 实现接口中的抽象方法
4. web.xml中配置Servlet
定义MyServlet类,通过继承HttpServlet类来实现Servlet接口
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//........................
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//........................
}
}
配置web.xml文件,访问路径为/servlet
<!--配置Servlet -->
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>cn.ly.web.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
-
执行原理:
1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2. 查找web.xml文件,是否有对应的标签体内容。
3. 如果有,则在找到对应的全类名
4. tomcat会将字节码文件加载进内存,并且创建其对象
5. 调用其方法
注意:Servlet3.0之后,我们可以通过使用注解来代替web.xml配置,我们只需要在MyServlet类种的上方添加一个@WebServlet("/servlet")即可(适用于单个Servlet的配置)
@WebServlet相关配置