文章目录
开发第一个 Servlet
Servlet 本身不能独立运行,需要在一个 Web 应用中运行,而一个 Web 应用是部署在 Tomcat 服务器中。
开发一个 Servlet 需要如下几个步骤
- 创建 Web 应用项目
- 编写 Servlet 代码
- 部署到 Tomcat 中
开发 Web 应用项目的 IDE 可以选择 Eclipse 的 EE 版,MyEclipse 和 IDEA 等。
选择使用 Eclipse EE 版 结合独立的 Tomcat 进行一次 Java 普通项目的创建。通过最原始的方式创建一个 web 应用,掌握最基本的知识。
基于 Tomcat 的程序要成功运行,对于配置文件的正确性有着苛刻的要求,任何一个地方出错了,都会导致运行失败。
创建一个 Java 项目
依次选择 File -> New -> Other -> Java -> Java Project
,输入项目名 xxx,创建一个单纯的基于 Java 的项目。
暂时不使用 File -> New -> Other - Web -> Dynamic Web Project
这种方式。这是 Eclipse EE 创建项目的方式,它会自动生成与 Tomcat 相关的各种配置文件。
导入 servlet-api.jar 包
开发 Servlet 需要用到 servlet-api.jar 包中的相关类。servlet-api.jar 包位于 Tomcat 目录\lib\servlet-api.jar
。
导入方式:右键点击项目 -> properties -> Java Build Path -> Libraries -> Add External JARs -> 查找选择 servlet-api.jar 文件
编写一个 Servlet
创建 HelloServlet:右键点击项目 -> New -> Class
注意: Eclipse 创建时会带有一个包名,不使用包名,让包名置空。
HelloServlet 继承了 HttpServlet 并且提供了一个 doGet 方法。在浏览器中输入地址提交数据的方式是 GET。 所以该 Servlet 需要提供一个对应的 doGet 方法。
import java.io.IOException;
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 HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 输出标题元素 <h1> 和当前时间的字符串到 HTML 中
resp.getWriter().println("<h1>Hello Servlet!</h1>");
resp.getWriter().println(new Date().toLocaleString());
}
}
配置 web.xml
首先在项目 xxx 下创建目录 web
,接着再创建目录 web/WEB-INF
,然后在 WEB-INF
目录下创建 web.xml
。
web.xml
提供路径与 Servlet
的映射关系,把 /hello
这个路径,映射到 HelloServlet
这个类上
<servlet>
标签下的 <servlet-name>
与 <servlet-mapping>
标签下的 <servlet-name>
必须一样。<servlet-name>
与 <servlet-class>
可以不一样,但是为了便于理解与维护,一般都会写成一样。
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
指定项目输出到 classes 目录
首先在 WEB-INF
下创建 classes
目录,然后把项目的 class
文件输出由原来的 xxx/bin
设置到 xxx/web/WEB-INF/classes
下。
步骤: 项目右键 -> properties -> Java Build Path -> Source -> 右下角的 Brower -> 指定位置是 /web/WEB-INF/classes
。
在 Ecilpse 中默认输出的 class 是在 bin
目录下。但是 Tomcat 启动之后,在默认情况下,不会去 bin
目录找这些 class 文件,而是到 WEB-INF/classes
这个目录下去寻找。通过这一步的配置,使得 Eclipse 的 class 文件输出到 WEB-INF/classes
目录下,那么就和 Tomcat 兼容。
配置 Tomcat 的 server.xml
把 xxx/web
这个目录部署到 Tomcat 中,进行如下操作:
- 打开 Tomcat 的
/conf/sever.xml
- 在
<Host...>...</Host>
标签中添加<Context path="/xxx" docBase="xxx项目完整路径\\web" debug="0" reloadable="false" />
path="/xxx"
表示通过 http://127.0.0.1/xxx/hello
访问网页。如果是 path="/"
则表示直接通过 http://127.0.0.1/hello
就可以访问网页。但是这样配置为 path="/"
与 webapps
下的 ROOT
目录冲突,要删除 ROOT
目录才能使用这种方式。
启动 Tomcat,访问 Servlet
运行 startup.bat 启动 Tomcat 服务器,访问 http://127.0.0.1/xxx/hello
就可以看到 Servlet 的输出,并且每一次刷新,都能看到输出新的时间。