Servlet

Hello World!

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello World!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

// @cite /examples/servlets/helloworld.html

编译

Servlet 属于 J2EE,不属于 Java Standard 的一部分,因此使用 JDK 编译时,须指定 -cp / -classpath 参数:

javac -cp ${CATALINA_BASE}/lib/servlet-api.jar HelloWorld.java

在 Tomcat 中使用 Servlet

了解如何在 Tomcat 中使用 servlet 的简便途径,是模仿 Tomcat 默认应用 /examples 的配置:

{$CATALINA_BASE}/webapps/examples/WEB-INF/web.xml
# CATALINA_BASE 代表 Tomcat 的安装路径。

分解步骤如下:

安置 .class/.jar 文件

类文件应当安置在环境变量 ${CLASS_PATH} 指定的目录下。除此之外,还有两个位置可以选择:

  • Tomcat 默认库目录
    位于 ${CATALINA_BASE}/lib/;或者
  • 应用库目录
    位于 {WEB_APP_BASE}/WEB-INF/classes

配置

取决于你希望在全局(整个 Tomcat 实例)或局部(特定应用)使用,有不止一处可以添加有关 servlet 的配置。通常建议将其放在应用的 web.xml 文件中:

<?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_4_0.xsd"
  version="4.0"
  metadata-complete="true">

  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

</web-app>

如果配置文件不存在,那就创建一个。

访问

# 假定应用名为 demo
http://localhost:8080/demo/hello

注意:如果 class 变更,需要重新启动 Tomcat 才能生效。

SEE

* https://java.net/downloads/servlet-spec/Final/servlet-3_1-final.pdf

results matching ""

    No results matching ""