1. Servlet简介
Servlet是服务器端程序,主要用来交互式地浏览和修改数据,生成动态web内容。Servlet是SUN公司提供的一个接口,广义的Servlet可以指任何实现了Servlet这个接口的类。Servlet生成动态web内容的过程包含以下这些内容:
1. 客户端发送请求至服务器端;
2. 服务器将请求发送至Servlet;
3. Servlet生成响应内容并将其传给服务器;
4. 服务器将响应返回给客户端;
用户若想要开发一个动态web资源,也就是开发一个java程序向浏览器输出数据,需要完成以下两个步骤:
1. 编写一个java类实现Servlet接口;
2. 将开发好的java类部署到web服务器中;
2. Servlet的运行过程
Servlet程序是由web服务器调用,web服务器接收到客户端的Servlet请求后:
1. Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步;
2. 装载并创建该Servlet的一个实例对象;
3. 调用Servlet实例对象的init()方法;
4. 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去;
5. WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法;
Servelt调用图如下:
3. 在eclipse中开发Servlet
在eclipse中新建一个web project,鼠标右击eclipse中左侧的空白部分,点击new-->Danamic Web Project,输入工程名称,点击next,记得勾选generate web.xml。
eclipse会自动创建下图所示目录结构:
上图中,工程名为MyWebProject,该工程部署时,在webapps目录下就会有一个MyWebProject的web应用;
src:java程序的开发目录,该目录下所有编写的java程序在部署时,会自动部署到MyWebProject/web-inf/classes目录下;
WebContent:对应于web应用的根目录,该目录下的所有子文件和子文件目录在部署时,会原封不动地发布到web应用目录下。
3.1 Servlet接口实现类
Servlet框架主要包含两个包,Javax.servlet和javax.servlet.http。在javax.servlet中定义了所有的Servlet类都必须实现和扩展的通用接口和类,在javax.servlet.http包中定义了采用http协议的HttpServlet类。
Servlet接口SUN公司定义了两个默认的实现类:GenericServlet和HttpServlet,他们之间的继承关系如下图:
GenericServlet
先来看看Java EE API帮助文档中GenericServlet这个类继承的类和实现的接口。
可以看出,GenericServlet是Servlet和ServletConfig接口的实现类,其中的service()方法是一个抽象方法。也就是说,GenericServlet类实现了Servlet和ServletConfig接口,实现了除了service()之外的其他方法。在创建Servlet对象时,可以继承GenericServlet类来简化程序的代码,但需要实现service()方法。如果新建的servlet程序直接继承GenericServlet接口会使开发更简洁。
HttpServlet
HeepServlet指能够处理http请求的Servlet,它在原有的servlet接口上添加了一些处理http协议的方法。它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
HttpServlet在实现Servlet接口时,覆写了service()方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet()方法;如为Post请求,则调用doPost()方法。因此,开发人员在编写Servlet时,通常只需要覆写doGe()t或doPost()方法,而不要去覆写service()方法。
3.2 通过eclipse创建和编写Servlet
在之前新建的web应用中,找到src开发目录,右击新建包比如:MyServlet,之后右击MyServlet,新建Servlet,填写ClassName比如MyServletDemo,出现如下的界面:
点击next,URL mappings是在web.xml中配置Servlet的名字和Servlet的URL访问地址,如果不修改,全部使用默认的即可。
点击next,接下来是勾选需要重写的方法:
点击finish完成创建。创建好的MyServletDemo中会有如下的代码内容。
package MyServlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class MyServletDemo */ @WebServlet("/MyServletDemo") public class MyServletDemo extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public MyServletDemo() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
3.3 启动服务器并部署项目
右键单击该项目,选择Run As--->Run on Server,选择Tomcat服务器,点击finish完成。
在地址栏输入:http://localhost:8081/MyWebProject/MyServletDemo 访问这个servlet。
注意:为了让Servlet能响应用户请求,还必须将Servlet配置在web应用中。从Servlet3.0开始,配置Servlet有两种方式:
- 在Servlet类中使用@WebServlet Annotation进行配置。
- 在web.xml文件中进行配置,我们用web.xml文件来配置Servlet,需要配置<servlet>和<servlet-mapping>。
在本项目的配置中,使用的是@WebServlet Annotation进行配置,体现在代码中:
这样配置的效果和在web.xml中配置的效果一样,如果在web.xml中配置,需要如下做法:
只要在浏览器地址栏输入“http://Tomcat中配置的主机名:端口号/web项目名/@WebServlet Annotation中的映射名称”就可以进行访问了。
更多精彩内容,欢迎搜索微信公众号“程序员考拉”!
来源:https://www.cnblogs.com/naihuangbao/p/9652373.html