这里我们直接创建一个java项目:

初始创建时,项目只有一个src目录,我们需要新建一个web模块

然后在配置里面添加一个tomcat服务器

配置 Maven 依赖
我们使用包管理器来管理安装的包
在项目根目录(servlet_learn 目录下)右键 → New → File ,输入 pom.xml,然后粘贴以下代码:
xml
<?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>com.example</groupId>
<artifactId>servlet_learn</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Servlet API,必须加 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
创建完 pom.xml 后:
- 右侧会出现 Maven 面板(没出现就点 View → Tool Windows → Maven)
- 点面板左上角的 刷新按钮 🔄(Reload All Maven Projects)
- 等 IDEA 下载完依赖(右下角有进度条)
如果没看到 Maven 面板,说明 IDEA 没识别到。右键
pom.xml→ Add as Maven Project
配置tomcat
Tomcat 是运行 Servlet 的容器
如果还没装 Tomcat:
-
下载 Tomcat 9
-
解压到任意目录,比如
D:\dev\tomcat-9.0.xx -
点击右上角运行配置(显示 Add Configuration... 的下拉框)
-
选 Edit Configurations...
-
点左上角 + 号
-
找到 Tomcat Server → Local
-
在 Application server 处点 ...,选择你的 Tomcat 安装目录
-
Name 可以改成
Tomcat 9方便识别

-
在 Tomcat 配置窗口中,点 Server 标签
-
在 After launch 可以选 Open browser ,填
http://localhost:8080/servlet_login/login.html -
这样启动后会自动打开浏览器
然后就可以编写前后端代码了,这里简单的做个登录网页
最终的项目结构长这样:
servlet_learn/
├── src/ # Java 源码目录
│ └── com/
│ └── example/
│ ├── LoginServlet.java # 登录处理 Servlet
│ └── User.java # 用户数据类
├── web/ # Web 资源目录(前端文件)
│ ├── login.html # 登录页面
│ └── WEB-INF/
│ └── web.xml # Web 应用配置
├── pom.xml # Maven 依赖配置
└── servlet_learn.iml # IDEA 模块配置(自动生成)
User.java
java
package com.example;
public class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
LoginServlet.java
java
package com.example;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.rmi.ServerException;
import java.util.Base64;
@WebServlet(name = "LoginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServerException, IOException {
// 1. 获取表单参数
String username = request.getParameter("username");
String password = request.getParameter("password");
String auto = request.getParameter("auto");
// 2. 设置响应格式
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
// 3. 自动登录逻辑(无表单提交时)
if(username.isEmpty() && password.isEmpty() && auto == null){
// 从 Cookie 读取自动登录信息
String cookieValue = null;
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
if(cookie.getName().equals("txjavac")){
cookieValue = cookie.getValue();
}
}
}
if (cookieValue == null){
response.getWriter().write("请登录");
return;
} else {
// 解码 Cookie,恢复用户名和密码
String[] split = new String(Base64.getDecoder().decode(cookieValue)).split(":");
username = split[1];
password = split[2];
// 创建 Session
User user = new User(username, password);
HttpSession session = request.getSession();
session.setAttribute("user", user);
response.getWriter().write("登录成功");
}
}
// 4. 正常登录逻辑
if(username != null && password != null &&
username.equals("admin") && password.equals("123456")){
User user = new User(username, password);
HttpSession session = request.getSession();
session.setAttribute("user", user);
// 勾选了"自动登录"则写入 Cookie
if(auto != null && auto.equals("1")) {
String value = "txjavac:" + username + ":" + password + ":" + 24 * 3600;
String encode = Base64.getEncoder().encodeToString(value.getBytes());
Cookie cookie = new Cookie("txjavac", encode);
cookie.setMaxAge(24 * 3600);
response.addCookie(cookie);
}
response.getWriter().write("登录成功");
return;
} else {
response.getWriter().write("用户名或密码错误");
return;
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServerException, IOException {
doPost(request, response);
}
}
login.html
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="login" method="post">
用户:<input type="text" name="username"/><br>
密码:<input type="password" name="password"/><br>
<input type="checkbox" value="1" name="auto"/> 一天内自动登录<br>
<input type="submit" value="登录"/>
</form>
</body>
</html>
web.xml
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">
</web-app>
因为我们用了
@WebServlet注解,所以web.xml里不需要再配置 Servlet 映射了。
配置 IDEA 模块
在项目根目录找到 servlet_learn.iml 文件(如果没有就新建一个),内容改成:
xml
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$" dumb="true">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/web" type="java-resource" />
</content>
</component>
</module>
修改 Artifact 配置
找到 .idea/artifacts/servlet_learn_Web_exploded.xml 文件(如果没有,先按下面的创建):
如果没有 artifacts 目录:
- 点菜单 File → Project Structure
- 左侧选 Artifacts
- 点 + → Web Application: Exploded → From Modules
- 选择你的模块,点 OK
- 在 Output Layout 里,确保左边有 web 目录的内容
启动 Tomcat
-
右上角选择 Tomcat 9并运行
-
等控制台输出
Server startup in [xxxx] ms表示启动成功
浏览器打开:
应该能看到登录表单了。