Servlet的定义
Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。
使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其它源的记录,还可以动态创建网页。
Java Servlet通常情况下与使用CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于CGI,Servlet有以下几点优势:
● 性能明显更好。
● Servlet在Web服务器的内存空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
● Servlet是独立于平台的,因为Servlet是用Java编写的。
● 服务器上的Java安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet是可信的。
● Java类库的全部功能对Servlet来说都是可用的。它还可以通过socket和RMI机制与数据库或其他软件进行交互。
图1.23显示了Servlet在Web应用程序中的位置。
Servlet在Web应用程序中的位置
Servlet的任务
Servlet 执行以下主要任务:
● 读取客户端(浏览器)发送的显式的数据。这包括网页上的HTML表单,或者也可以是来自自定义的HTTP客户端程序的表单。
● 读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型和浏览器能理解的压缩格式等等。
● 处理数据并生成结果。这个过程可能需要访问数据库,执行RMI或CORBA调用,调用其它Web服务,或者直接计算得出相应的响应。
● 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML或XML)、二进制文件(GIF图像)、Excel等。
● 发送隐式的HTTP响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如HTML),设置cookies和缓存参数,以及其他类似的任务。
使用Eclipse创建Servlet
创建Servlet非常的简单,只需要使自定义类继承javax.servet.http.HttpServlet类并重写其中的service方法即可。Eclipse开发工具为了方便我们开发Servlet,提供了创建Servlet的功能,现在为大家介绍如何使用Eclipse创建一个Servlet并在浏览器中访问。
1)打开Eclipse,选择JavaEE视图。在菜单栏中点击File,选择New-other,在Web目录下找到并选择Dynamic Web Project,弹出如图1.24所示的对话框。
2)在Project name中填入项目名称:xdl_servlet_demo,Target runtime选择已经配置好的Tomcat服务器Tomcat8.5,其他选项保持默认,然后点击Finish。Eclipse会自动创建如图1.25所示的目录结构。
3)鼠标右键src目录,在弹出的菜单中选择New-Servlet,将弹出如图1.26所示的对话框。在该对话框中,填入Java Package为com.xdl.servlet,Class name填写为MyServlet,其它选项保持默认,然后点击Finish。
Eclipse创建动态Web工程的目录结构
Create Servet对话框
此时在src目录下,Eclipse就会为我们自动创建com.xdl.servlet包,并创建一个继承javax.servlet.http.HttpServlet类的Servlet。我们打开MyServlet类的源代码并做一些修改,在其中的doGet方法中添加了一行代码,使我们打开浏览器访问这个Servlet时能在浏览器的页面中显示Hello World!。修改后的MyServlet类的完整代码如下:
package com.xdl.servlet;
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;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MyServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("Hello World!");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
注意,在这段代码中,使用了Servlet3.0后新增的注解@WebServlet("/MyServlet"),该注解的作用是用于配置Servlet。但是在Servlet3.0之前是需要使用配置文件web.xml来配置Servlet的。关于Servlet的注解将在下一节进行讲解,现在我们来运行一下刚刚创建的Servlet。
4)在项目名上单击鼠标右键,在弹出的菜单中选择Run as-Run on Server,然后在弹出的对话框中选择在Eclipse中配置的Tomcat服务器,然后点击Finish即可将项目部署到Tomcat服务器中并启动Tomcat服务器。Tomcat服务器启动完成后,打开浏览器输入localhost:8080/xdl_servlet_demo/MyServlet,如果没有错误将显示如图1.27所示的内容。
网页版Hello World!
配置Servlet
要使Servlet对象正常地运行,需要进行适当的配置,以告知Web容器(Web服务器)哪一个请求调用哪一个Servlet对象进行处理,对Servlet起到一个注册的作用。在Servlet3.0后,推荐使用注解的方式对Servlet进行配置,所以使用Eclipse创建Servlet会默认使用注解的方式配置Servlet。但是对于一些第三方的类或接口,是无法使用注解的方式进行配置的,这时就需要使用配置文件进行配置了。当然,在Servlet3.0后使用注解和配置文件都是可行的,接下来我们首先介绍配置文件的使用方式,然后再为大家介绍注解的使用方式。
● 使用配置文件web.xml配置Servlet
使用配置文件的方式是Servlet经典的配置方式,方法如下:
打开项目中WEB-INF目录下的web.xml文件(如果没有该文件,请使用鼠标右键点击工程目录中的Deployment Descriptor,在弹出的菜单中选择Generate Deployment Descriptor Stub选项,即可在WEB-INF目录下生成web.xml文件),在其中的web-aap标签中添加子标签<servlet>和<servlet-mapping>。例如:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.xdl.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myservlet.do</url-pattern>
</servlet-mapping>
其中servlet-name指定的是Servlet的名字,作用域是整个web.xml中,所以在同一个web.xml文件中不能出现两组servlet-name名字相同的servlet标签,servlet-class指定的是Servlet类的包名加类名,在servlet-mapping中设置的servlet-name指定的是要映射的Servlet的名字,需要正确的配置为已经在servlet标签中配置的servlet-name,而url-pattern指定的是请求路径,表示客户端使用该路径即可访问配置的Servlet。
● 使用注解annotation配置Servlet
使用注解的方式配置Servlet是Servlet3.0后新增加的功能,所以在Servlet3.0版本之前是不能使用注解的方式来配置servlet的,使用注解的方式来配置Servlet非常简单,只需要在类前加入@WebServlet注解即可。例如:
@WebServlet("/myservlet.do")
public class MyServlet extends HttpServlet{
...
}
只需要使用@WebServet注解即可给当前的类注册为Servlet,然后传入一个URL即可配置请求地址。