Web基础知识(2)- Java Servlet (二) | 创建 Servlet 程序


本文将在 Windows 下使用 IntelliJ IDEA 和 Apache Maven 创建一个简单的 Servlet 程序。在开始之前,确保已经正确搭建了 Servlet 开发环境,如何搭建 Servlet 开发环境见:Web基础知识(1)- Java Servlet (一)

Windows版本 : Windows 10 Home (20H2)
IntelliJ IDEA:Community Edition for Windows 2020.1.4
Apache Maven:3.8.1
Tomcat Server: 9.0.52

1. 在 IDEA 上创建 Maven Webapp 项目

    1) 运行 IDEA
   
        点击菜单 New 创建 Project:
        
        New Project -> Project Type: Maven -> Project SDK: 1.8 -> Check "Create from archtype" -> select "org.apache.maven.archtypes:maven-archtype-webapp" -> Next

            Name: WebBasic
            GroupId: com.example
            ArtifactId: WebBasic

        -> Next

            Maven home Directory: C:\Applications\java\apache-maven-3.8.1
            User settings file: C:\Applications\java\apache-maven-3.8.1\conf\settings.xml
            Local repository: C:\Applications\java\maven-repository

        -> Finish

    2) 生成的项目目录结构和文件

          |-- src
          |   |-- main
          |         |-- webapp
          |                 |-- WEB-INF
          |                 |          |- web.xml
          |                 |
          |                 |-- index.jsp
          |
          |-- pom.xml


2. 使用 tomcat7-maven-plugin, 将 tomcat 内嵌运行

    1) 修改 pom.xml

        <project ... >

            <build>
                <plugins>

                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat7-maven-plugin</artifactId>
                        <version>2.2</version>

                        <configuration>                
                            <path>/</path>
                            <port>9090</port>
                            <uriEncoding>UTF-8</uriEncoding>
                        </configuration>
                    </plugin>

                </plugins>
            </build>

        </project>

        *注: path 项目访问路径 本例:localhost:9090, 如果配置的aa,则访问路径为 localhost:9090/aa;uriEncoding 非必需项。

    2) 运行

        Run -> Edit configurations -> Click "+" -> Select "Maven"

            Command line: clean tomcat7:run
            Name: WebBasic [clean,tomcat7:run]

            Before Launch:
                Click "+", select "Launch Web Browser"
                Browser: default
                Url: http://localhost:9090

        -> OK

        Run -> Run "WebBasic [clean,tomcat7:run]"

        Goals: help, deploy, deploy-only, redeploy, redeploy-only, undeploy,
                                exec-war, exec-war-only, run, run-war, run-war-only,
                                standalone-war, standalone-war-only,  shutdown

    3) 打包 War 后运行

        Run -> Edit configurations -> Click "+" -> Select "Maven"

            Command line: clean tomcat7:run-war
            Name: WebBasic [clean,tomcat7:run-war]

            Before Launch:
                Click "+", select "Launch Web Browser"
                Browser: default
                Url: http://localhost:9090

        -> OK

        Run -> Run "WebBasic [clean,tomcat7:run-war]"

        Check target/WebBasic.war

    4) 打包 War (只打包)

         在IDE中项目列表 -> 点击鼠标右键 -> Maven -> Reload Project

         View -> Tool Windows -> Maven -> WebBasic -> Lifecycle -> Clean | Package

         Check target/WebBasic.war

3. 导入 Servlet、JSP 依赖包

    访问 http://www.mvnrepository.com/,查询 Servlet、JSP

    修改 pom.xml:

    <project ... >

        <dependencies>
            ...

            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
               <version>4.0.1</version>
               <scope>provided</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
            <dependency>
               <groupId>javax.servlet.jsp</groupId>
               <artifactId>javax.servlet.jsp-api</artifactId>
               <version>2.3.1</version>
               <scope>provided</scope>
            </dependency>          
            ...
        </dependencies>

    </project>

    在IDE中项目列表 -> 点击鼠标右键 -> Maven -> Reload Project


4. 创建 TestServlet 类

    新建 src/main/java 目录,如果它不是 "Sources Root",把它 Mark as "Sources Root"。 在 src/main/java 目录下添加 com.example 包(Package),再在 com.example 包下添加 TestServlet 类。

     TestServlet 类对应文件是 src/main/java/com/example/TestServlet.java:

 1         package com.example;
 2 
 3         import java.io.IOException;
 4         import java.io.PrintWriter;
 5 
 6         import javax.servlet.ServletConfig;
 7         import javax.servlet.ServletException;
 8         import javax.servlet.http.HttpServlet;
 9         import javax.servlet.http.HttpServletRequest;
10         import javax.servlet.http.HttpServletResponse;
11 
12         public class TestServlet extends HttpServlet {
13 
14             protected void doGet(HttpServletRequest request, HttpServletResponse response)
15                     throws ServletException, IOException {
16 
17                 ServletConfig config = getServletConfig();
18 
19                 response.setContentType("text/html;charset=UTF-8");
20                 PrintWriter writer = response.getWriter();
21                 writer.write(config.getServletName() + " -> doGet()<br/>");
22                 writer.close();
23 
24             }
25 
26             protected void doPost(HttpServletRequest request, HttpServletResponse response)
27                     throws ServletException, IOException {
28                 //doGet(request, response);
29             }
30         }

 

5. 修改 web.xml

 1      <web-app id="WebApp_ID" version="2.4"
 2                   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         
 7         <display-name>Web Basic</display-name>
 8 
 9         <welcome-file-list>
10             <welcome-file>TestServlet</welcome-file>
11         </welcome-file-list>
12 
13         <servlet>
14             <servlet-name>TestServlet</servlet-name>
15             <servlet-class>com.example.TestServlet</servlet-class>
16             <load-on-startup>1</load-on-startup>
17         </servlet>
18         <servlet-mapping>
19             <servlet-name>TestServlet</servlet-name>
20             <url-pattern>/</url-pattern>
21         </servlet-mapping>
22 
23     </web-app>

 

    IDEA 创建的 org.apache.maven.archtypes:maven-archtype-webapp 项目,默认使用 JSP 1.2 规范,EL (Expression Language) 是关闭的,必须手动在 JSP 文件里加入 <%@page isELIgnored="false" %> 才能使用 EL 表达式。

    这里在 <web-app> 引入 JSP 2.x 相关的命名空间,就不需要在每个 JSP 文件里手动加入 isELIgnored="false" 语句,因为 JSP 2.x 下 EL 默认是打开的。

    也可以在 <web-app> 引入 Servlet/JSP 3.x 的命名空间,格式如下:
    
        <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">

      ...

    </web-app>


6. 测试运行

    跳转到第 2 步d的 “3) 打包 War 后运行” ,生成 target/WebBasic.war 后运行。

    访问 http://localhost:9090

        TestServlet -> doGet()

 

7. 部署到 Tomcat 运行

    把 WebBasic.war 复制到 Tomcat 的 webapps 目录,运行中的 Tomcat 会自动解压 WebBasic.war 到 WebBasic目录。

    WebBasic 的目录结构如下:

        |- WEB-INF
        |    |- Classes
        |    |     |- com
        |    |         |- example
        |    |              |- TestServlet.class
        |    |- web.xml
        |
        |- META-INF
        |    |- maven
        |    |    |- com.example
        |    |           |- WebBasic
        |    |                 |- pom.properties
        |    |                 |- pom.xml
        |    |- MANIFEST.MF
        |    |- war-tracker
        |
        |- index.jsp

    Tomcat 运行在 8080 端口,访问 http://localhost:8080/WebBasic/

        TestServlet -> doGet()

 

posted @ 2022-03-13 18:46  垄山小站  阅读(222)  评论(0)    收藏  举报