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()
浙公网安备 33010602011771号