第一个 JavaEE 应用程序

JavaEE 是 Java Web 开发当中事实上的标准,诸多框架也都是建立在 JavaEE 的 API 基础之上的。为了从头理解 Java Web 开发,我们将从一个最简单的 JavaEE Servlet 应用开始,一步一步进入 Java Web 开发的世界。

准备工作

要完成这个教程,你只需要有网络就可以了,首先下载 IntelliJ IDEA Community 版。没错,我们就是故意要使用 Community 版,尽管 Utimate 版对 JavaEE 开发的支持更好,但是更好的工具却可能让我们忽略底层的细节。Community 版对于入门来说已经足够。

然后你需要下载 JavaSE 的 JDK,也就是大家使用最多的 JDK 版本。示例使用的 1.8.0 版本。

最后你需要一个 Servlet Container,去 Tomcat 网站下载一个版本,主要要和 JDK 的版本要求相匹配。示例使用的是 Tomcat 8.5.0。

第一个 Servlet

首先创建一个工程,选择好 JDK 版本,一路 Next 就可以了。创建好工程之后,我们创建一个新的 Servlet。首先在左边的 src 上右键创建一个 package,然后在 package 上右键,创建一个 Java Class:

  1. package com.skyline;
  2. import javax.servlet.*;
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. public class MyFirstServlet implements Servlet {
  6. public void init(ServletConfig config) throws ServletException {
  7. System.out.println("Init");
  8. }
  9. public void service(ServletRequest request, ServletResponse response)
  10. throws ServletException, IOException {
  11. System.out.println("From service");
  12. PrintWriter out = response.getWriter();
  13. out.println("Hello, Java Web.");
  14. }
  15. public void destroy() {
  16. System.out.println("Destroy");
  17. }
  18. public String getServletInfo() {
  19. return null;
  20. }
  21. public ServletConfig getServletConfig() {
  22. return null;
  23. }
  24. }

这时候代码上会报很多错误,核心原因是 javax.servlet 这个包找不到。前面提的过 Servlet API 是包含在 JavaEE 当中的。为了方便,我们直接使用 Tomcat 附带的 servlet-api.jar 包。

在 IDEA 中打开 Library Settings(External Libraries 下面的任意一项右键 -> Open Library Settings。

加入依赖有两种办法。一种是在 Classpath 中加入 servlet-api.jar,这个 Classpath 会影响所有使用该 JDK 的工程(不只是当前工程):

classpath

另一种办法是只给当前工程添加依赖,在左侧选择 Modules,在 Dependencies 中加入所需依赖的路径:

module

为了避免对别的工程产生影响,推荐使用后一种方式添加依赖。

添加依赖完成之后,这时工程应该可以正常通过编译了。

部署

为了让 Servlet 跑起来,我们需要把它部署到 Tomcat 上。首先在 src 目录隔壁,创建一个 WEB-INF 目录(注意名字一定要正确),然后在里面创建一个 web.xml 文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  5. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  6. <servlet>
  7. <servlet-name>MyFirstServletName</servlet-name>
  8. <servlet-class>com.skyline.MyFirstServlet</servlet-class>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>MyFirstServletName</servlet-name>
  12. <url-pattern>/hello</url-pattern>
  13. </servlet-mapping>
  14. </web-app>

可以看到 web.xml 的作用是告诉 Tomcat,我们想使用哪个 Servlet 来处理对应的请求。Tomcat 通过 web.xml 找到对应的 Servlet 完成请求以及响应过程。

下面是具体的部署过程。首先找到 Tomcat 的目录,其中有一个 webapps 文件夹,在里面创建一个新的 MyFirstServlet 文件夹,然后把整个 WEB-INF 文件夹拷贝过去,此时的目录结构应该是这样的:

  1. webapps
  2. - MyFirstServlet
  3. - WEB-INF
  4. - web.xml

下一步,将 IDEA 编译出的产物(默认应该在 out 文件夹中),把 package 结构已经对应的产物拷贝到 WEB-INF 中的 classes 文件夹里,完成之后的目录结构应该是这样的:

  1. webapps
  2. - MyFirstServlet
  3. - WEB-INF
  4. - classes
  5. - com
  6. - skyline
  7. - MyFirstServlet.class
  8. - web.xml

运行

完成部署工作之后,需要启动 Tomcat 服务器。找到 Tomcat 目录中的 bin 文件夹,使用 cmd 运行其中的 startup.bat。如果提示没有设置 JAVA_HOMEJRE_HOME,需要到环境变量中设置一下。完成设置之后,Tomcat 应该可以正常启动。

然后在任意一个浏览器当中,访问 http://localhost:8080/MyFirstServlet/hello 可以看到结果:

result