Servlet 是 Server Applet 的缩写,是服务端小程序的意思。使用 Java 语言编写的服务器端程序,主要功能在于交互式地浏览和生成数据,生成动态Web内容,Servlet 主要运行在服务器端,并由服务器调用执行,是一种按照 Servlet 标准来开发的类。 是 SUN 公司提供的一门用于开发动态 Web 资源的技术。(言外之意:要实现 web 开发,需要实现 Servlet 标准)
Servlet 本质上也是 Java 类,但要遵循 Servlet 规范进行编写,没有 main() 方法,它的创建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。(言外之意:写自己的类,不用写 main 方法,别人自动调用)
Servlet 是和 HTTP 协议是紧密联系的,其可以处理 HTTP 协议相关的所有内容。这也是 Servlet 应用广泛的原因之一。
提供了 Servlet 功能的服务器,叫做 Servlet 容器,其常见容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。
创建动态 web 项目
新建类
实现 Servlet 规范
重写 service 方法
配置 web.xml
发布项目
启动项目
访问并查看结果
packagecom.xxx.web;publicclassHelloWeb{}
1
2
3
4
5
实现 Servlet 规范,即继承 HttpServlet 类,并导入相应的包,该类中已经完成了通信的规则,我们只需要进行业务的实现即可。
packagecom.xxx.web;importjavax.servlet.http.HttpServlet;publicclassHelloWebextendsHttpServlet{}
1
2
3
4
5
6
7
满足 Servlet 规范只是让我们的类能够满足接收请求的要求,接收到请求后需要对请求进行分析,以及进行业务逻辑处理,计算出结果,则需要添加代码,在规范中有一个叫做 service 的方法,专门用来做请求处理的操作,业务代码则可以写在该方法中。
packagecom.xxx.web;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassHelloWebextendsHttpServlet{@Overrideprotectedvoidservice(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{System.out.println("I received a request");resp.getWriter().write("<h1>Hello World!</h1>");}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
在完成好了一切代码的编写后,还需要向服务器说明,特定请求对应特定资源,此时通过一个名叫 web.xml 的配置文件完成。
<!-- 配置servlet --><servlet><servlet-name>helloweb</servlet-name><!-- 给服务器看的 --><servlet-class>com.xxx.web.HelloWeb</servlet-class><!-- servlet对应的资源路径 --></servlet><servlet-mapping><servlet-name>helloweb</servlet-name><!-- 给服务器看的 --><url-pattern>/helloweb</url-pattern><!-- 给浏览器看的,对外访问路径 --></servlet-mapping>
1
2
3
4
5
6
7
8
9
到此,需要编写和配置的地方已经完成,项目已经完整了,但是如果需要外界能够访问, 还需要将项目发布到服务器上并运行服务器。
看到类似一长串信息表示启动成功,接下来就可以访问项目了
在项目正确发布到服务器上之后,用户即可通过浏览器访问该项目中的资源。注意 url 的格式正确,tomcat 的端口为 8080。http://localhost:8080/hw/helloweb,页面结果
后台结果
到这里我们的第一个 Servlet 就实现了!
执行过程
客户端发出请求根据 web.xml 文件的配置,找到对应的 url-pattern 读取其中的值,找到对应的 servlet-name,找到指定的 class 并加载执行该 class,返回结果由 Web 服务器将结果响应给客户端