快速创建一个 Servlet 应用程序

目录

1、在 pom.xml 文件中引入 servlet-api 依赖

2、使用注解定义一个 Servlet

3、添加 web.xml 配置文件

4、直接使用 Tomcat 部署 Servlet 程序

5、附:如何在 Idea 中启动一个 Tomcat?

6、解决 Tomcat 控制台乱码问题


1、在 pom.xml 文件中引入 servlet-api 依赖

        创建一个普通的 Maven 工程(方便依赖导入),在 pom.xml 中需要引入 servlet-api 的 jar 包,完整的配置信息如下: // Servlet并不是Java SE的一部分,所以引入JDK后,servlet-api 包还要额外引入

<?xml version="1.0" encoding="UTF-8"?>
<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>servlet</groupId>
    <artifactId>servlet</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--javax.servlet-api-->
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>

</project>

        创建 web 工程的完整目录(主要是明确 web.xml 文件位置,必须在 WEB-INF 文件夹下),参照下图文件结构

        web.xml 配置文件内容:

​<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">

</web-app>

2、使用注解定义一个 Servlet

        接下来写 Java 代码,在项目中创建一个 Java 类,并将其声明为 Servlet。使用 @WebServlet 注解指定 Servlet 的名称和 URL 模式,示例代码如下://使用注解配置,需要注意Servlet API 版本

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "MyServlet", urlPatterns = { "/hello" })
public class MyServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Hello Servlet</title></head>");
        out.println("<body>");
        out.println("<h1>Hello Servlet</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

        在上面的代码中,我们创建了一个名为 MyServlet 的类,并使用 @WebServlet 注解指定了它的 name 属性为 MyServletURL 匹配模式为 /hello。在 HttpServlet 接口的实现中,重写了 doGet() 方法,在该方法中生成了一个 HTML 页面,并将其发送给客户端。

        @WebServlet 注解:@WebServlet 注解用于在 Servlet 3.0 之后的版本中定义一个 Servlet。使用 @WebServlet 注解可以将一个类声明为一个 Servlet,并指定 Servlet 的名称、URL 模式、初始化参数等信息。//使用注解可以省略繁琐的XML配置

3、添加 web.xml 配置文件

        添加项目的部署描述符(即 web.xml 文件),文件内容同上,不再赘述。

        接下来,创建一个启动容器后,即可访问的首页 index.html(此步骤非必需),index.html 内容如下:

<!DOCTYPE HTML><html lang="en"><head>
<meta charset="UTF-8">
    <title>Apache Tomcat Examples</title>
</head>
<body>
    <h3>
        welcome to servlet !!!
    </H3>
</body></html>

        最后,启动 Web 服务器(Tomcat),访问 http://localhost:8080/<应用名称>/hello,可以看到生成的 HTML 页面。// Tomcat 的默认端口为 8080,<应用名称> 可不配置

        到此,创建一个 HttpServlet 应用程序的所有代码都已经完成了。

4、直接使用 Tomcat 部署 Servlet 程序

        这里建议部署 Servlet/JSP 应用程序的方法是将它打包成一个 war 文件来进行部署。war 文件是指以 war 作为扩展名的 jar 文件。将 war 文件复制到 Tomcat 的 webapps 目录下。当启动或者重启 Tomcat 时,Tomcat 会自动解压 war 文件。以 war 文件的方式部署,这在所有的 Servlet 容器中都适用// Java 中有很多方式可以打 war 包

        此处,使用 maven 来打一个 war 包,在打包之前,修改一下 pom.xml 文件,修改打包的类型为 war 包//注意,我这里改了项目名字,不要直接复制

<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
  <artifactId>servlet-test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--此处,修改打包的类型为war,如果不配置,maven会默认打包成jar包-->
  <packaging>war</packaging>

    <!--javax.servlet-api-->
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>

</project>

        使用 maven 打包 war 包,如图点击 package://也可以在 Idea Terminal 中使用命令方式

        然后将 war 文件复制到 Tomcat 的 webapps 目录下。启动 Tomcat (windows 下双击 bin 目录中的 startup.bat 文件即可)

        打开任意浏览器输入:http://localhost:8080/servlet-test-1.0-SNAPSHOT/hello 即可访问到部署的 war 包项目://我此处没有修改包名,所以路径直接为:servlet-test-1.0-SNAPSHOT

        Tomcat 默认端口号为 8080,如果想修改端口号,打开 Tomcat 中的 conf 文件夹找到server.xml 文件,对如下内容中的 port 进行修改即可:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />

5、附:如何在 Idea 中启动一个 Tomcat?

        创建 Servlet 项目时,如果 IDEA 没有自动把 webapp 目录标记为 web 资源目录(目录文件夹上有一个小蓝点标记),那么就需要手动进行标记。

        点击 File -> Project Structure -> 点击左侧Modules -> 点击加号 -> 选择web

        接下来检查 Facets 的配置路径是否正确(跟 Modules 中的配置路径一致),准确无误的话,下边就可以配置事件了。

        点击:File -> Project Structure -> 点击左侧Artifacts -> 点击加号 -> 选择Web Application,如下图所示:

        此时,会弹出一个 Servlet (项目名称)选项可供选择,选择确认后,结果如下图,到此,Artifacts 内容就配置完成了。

        接下来,准备好一个干净的 Tomcat,如图所示,把 Tomcat 添加到项目中:

        此时,Tomcat 还不能正常使用,我们需要添加部署内容,如图,点击 Deployment 进行添加(此内容就是上边我们配置的 Artifacts

        OK,到这里,我们所有的准备工作都完成了,运行我们的 Tomcat,会直接跳转到我们的默认首页,如下图所示:

6、解决 Tomcat 控制台乱码问题

        在 Tomcat 的 conf 文件夹中,找到 logging.properties 日志配置文件,修改内容如下:

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK

        即把 encoding  = UTF-8 直接修改成 encoding = GBK。

        出现乱码的原因是由于电脑命令窗口和 Idea 控制台的编码是 GBK,而 Tomcat 的编码是 UTF-8//乱码的根本原因就是编码不一致

        如果修改  logging.properties 文件后,Idea 控制台的 Tomcat 日志仍然乱码,就需要去查看 Idea 控制台的默认配置是否进行了更改,如下图,Idea 控制台默认使用 GBK 编码:

        至此,全文结束。