快速创建一个 Servlet 应用程序
目录
1、在 pom.xml 文件中引入 servlet-api 依赖
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 属性为 MyServlet,URL 匹配模式为 /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 编码:
至此,全文结束。