什么是Servlet?
Servlet是sun公司制定的一种用来扩展web服务器功能的一种组件规范。
(1)扩展web服务器功能
由于web服务器只能只能处理静态资源的请求(即需要事先将静态页面写好),不能够处理动态资源的请求(即需要进行计算的,生成动态的页面),所以需要扩展其功能。所以我们可以使用Servlet来扩展web服务器功能,web服务器收到请求之后就会调用相应的Servlet来处理请求。
(2)组件规范
符合规范、实现部分功能,并且需要部署到相应的容易中才能运行的软件模块。Servlet是一个组件,编写时必须符合Servlet规范,并且需要部署到Servlet容器中才能运行。而容器是一个符合规范性要求的、提供组件运行环境的程序,主要提供的是网络相关的服务。比如Tomcat。
(3)如何编写一个Servlet
1)编写一个Java类,这个Java类需要实现Servlet接口或者继承HttpServlet。
2)编译。
3)打包。建立一个具有如下结构的文件夹
appname
WEB-INF
classes(存放编译后的Java类的class文件)
lib(这是可选的,主要存放的是一些配置文件"*.jar")
web.xml(这是一个部署描述文件)
4)部署,部署需要将打包好的文件压缩为".war"为后缀的文件,拷贝到容器中去。
5)启动容器,访问Servlet(这里的Servlet访问地址是在web.xml文件中设置的)。
(4)Servlet是如何运行的?
1)浏览器需要依据ip和port(端口)与服务器建立链接
2)浏览器会将自己需要提交的数据存放在请求数据包当中发送给服务器
3)服务器接受到请求数据包之后,会解析请求数据并存放到request对象中,同时会创建一个response对象作为服务器相应客户端 的响应对象,
4)服务器依据请求路径,在web.xml文件中查找相应的Servlet对象,并实例化,然后根据请求消息的内容调用相应的方法(如: doGet()、doPost()、service()方法等)
5)容器从请求对象中获取数据,并处理后,然后会将需要回传的数据放入response对象中,作为响应数据包发送给浏览器。
6)浏览器接收到服务器发送来的响应数据包之后会进行解析,并利用这些数据生成相应的页面。
最后为大家做一个简单的演示:写一个Servlet,输出当前的系统时间,比如:"2019-4-26"
注:我在这里使用的eclipse编译器,和tomcat;软件的安装和下载就不做演示了,以及一些使用细节就不再阐述。
a)创建一个maven工程,细节见下图:
这里需要注意Packaging处应选择war,这是因为eclipse自动为我们把工程打包。
b)创建好maven之后,会发现工程项目报错,此时:
c)之后我们需要把工程项目部署到容器中去
我们右击我们建好的工程项目,会出现一长条菜单栏,选择最后一项"properties",就会出现上面的配置选项框。按上述配置完之后,我们就需要新建一个Java类,如下图:
DateServlet.java的代码如下:
package date;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DateServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应对象的类型以及编码格式
response.setContentType("text/html;charset=utf-8");
//从响应对象中获取输出流
PrintWriter out = response.getWriter();
//创建时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//在页面上显示当前的系统时间
out.println(sdf.format(new Date()));
}
}
Java类编辑好之后,接下来就编辑web.xml,这个文件在:
打开后配置,配置的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>date</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dateServlet</servlet-name>
<servlet-class>date.DateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dateServlet</servlet-name>
<url-pattern>/date</url-pattern>
</servlet-mapping>
</web-app>
配置好这之后,我们就可以将工程项目放入容器之中启动了:
容器启动完成之后,便可以打开浏览器,在浏览器中输入"http://localhost:8080/date/date"便可以访问了。如图:
整个Servlet的创建就到此结束了,如有讲述不全或者不当之处,请大家在评论区指出。谢谢。