Servlet开发(一)

邮差的信 提交于 2020-03-14 02:38:42

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中的映射名称”就可以进行访问了。

更多精彩内容,欢迎搜索微信公众号“程序员考拉”!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!