java servlet示例
在本教程中,将介绍如何创建servlet并在Apache Tomcat8中部署它们
什么是servlet?
servlet是几乎所有javaweb应用程序的构建块。它们提供了接受HTTP请求和向用户返回HTTP响应的核心功能。即使我们使用JSP构建web页面,JSP文件最终也会由应用服务器或者web容器(如Glassfish或者Tomcat)编译为servlet。servlet对于web容器来说是必不可少的,它提供GET、POST、HEAD、PUT、DELETE、OPTIONS和TRACE请求,并向web客户端返回响应。我们可能最熟悉GET和POST请求。我强烈建议我们花点时间阅读上面列出的其他类型的请求。如果你还不认识他们,现在就去读这篇文章https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html .
Servlet项目结构
在我们的第一个示例中,我们将构建一个简单的Servlet,在浏览器中打印消息“Hello world”–这是多么微不足道,不是吗。我们将使用Maven来构建这个项目。我们将创建一个Servlet类和一个
web.xml
文件。这个
web.xml
文件(也称为部署描述符)向web容器提供如何处理servlet的信息。把它看作一个配置文件。
项目POM文件
建造maven
pom.xml
Servlet项目的文件如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.theitroad.tutorials</groupId> <artifactId>SimpleServlet</artifactId> <version>1</version> <packaging>war</packaging> <name>SimpleServlet</name> <url>https://theitroad.local</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <sourceDirectory>src/main/java</sourceDirectory> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <warSourceDirectory>src/main/webapp</warSourceDirectory> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
让我们拆掉
pom
归档并查看重要内容:
我们需要将包装设置为
war
. Tomcat中的Web应用程序被打包成WAR文件(Web档案),其中封装了应用程序的所有数据。WAR文件的名称是基于
arifactId
以及
version
在maven pom文件中设置的参数。我们的战争档案的名字是
SimpleServlet-1.war
我们需要创建servlet的依赖关系是
javax.servlet-api
. 我们将范围设置为“provided”,因为Tomcat已经内置了所需的所有库。
我们需要Maven WAR插件来创建WAR文件
在WAR插件集1.8的编译器部分。这意味着这些类将用Java8编译
简单的Servlet示例
让我们看看一个非常基本的servlet的源代码,它打印消息“helloworld!”在web浏览器中
package net.theitroad.tutorials; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SimpleServlet extends HttpServlet { private static final long serialVersionUID = -4751096228274971485L; @Override protected void doGet(HttpServletRequest reqest, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("Hello World!"); } @Override public void init() throws ServletException { System.out.println("Servlet " + this.getServletName() + " has started"); } @Override public void destroy() { System.out.println("Servlet " + this.getServletName() + " has stopped"); } }
所有servlet都需要扩展抽象类HttpServlet。HttpServlet提供了构建HTTP响应的所有方法—我们在这里所做的是重写一些方法来放置我们自己的逻辑。
doGet方法在客户端(浏览器)向servlet发出GET请求时执行。在我们的示例中,它将返回文本响应“Hello World!”。
init()方法在web容器第一次启动servlet时调用一次。这发生在应用程序部署或者第一次调用该servlet时。init方法可用于设置数据库连接或者其他耗时的初始化操作。
destroy()方法在web容器终止servlet时调用。我们可以使用此方法关闭与数据库或者其他开放资源的连接。
创建web.xml文件配置描述符
这个
web.xml
文件用于告诉web容器如何处理web应用程序中的文件。把它看作一个配置文件。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Simple Servlet Application</display-name> <servlet> <servlet-name>simpleServlet</servlet-name> <servlet-class>net.theitroad.tutorials.SimpleServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>simpleServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
显示名称应用程序将在Tomcat管理器中以该名称列出。阅读本教程以了解如何配置tomcatmanager以及如何使用tomcatmanager部署应用程序。
<servlet>标记保存servlet的配置。 <servlet name>是我们的servlet的别名,它用于在
web.xml
文件。<servlet class>是指向servlet的路径。 <load on startup>1</load on startup>表示在Tomcat启动时,servlet将被加载到web容器中。如果项目中有其他servlet,我们可以设置启动时加载的值,如2、3、100等。值最低的servlet具有更高的优先级,并将首先加载。
<servlet mapping>用于给servlet一个URL。在我们的示例中,我们将模式/hello指定给servlet,这意味着访问本地服务器上servlet的完整URL将是http://localhost:8080/SimpleServlet/你好
构建并部署示例
在构建源代码之后,我们将准备部署WAR文件。WAR将包含编译的servlet类和部署描述符文件
web.xml