idea配置servlet项目

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

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

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

配置 Maven 依赖

我们使用包管理器来管理安装的包

在项目根目录(servlet_learn 目录下)右键 → NewFile ,输入 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 后:

  1. 右侧会出现 Maven 面板(没出现就点 ViewTool WindowsMaven
  2. 点面板左上角的 刷新按钮 🔄(Reload All Maven Projects)
  3. 等 IDEA 下载完依赖(右下角有进度条)

如果没看到 Maven 面板,说明 IDEA 没识别到。右键 pom.xmlAdd as Maven Project


配置tomcat

Tomcat 是运行 Servlet 的容器

如果还没装 Tomcat:

  1. 去官网:https://tomcat.apache.org/

  2. 下载 Tomcat 9

  3. 解压到任意目录,比如 D:\dev\tomcat-9.0.xx

  4. 点击右上角运行配置(显示 Add Configuration... 的下拉框)

  5. Edit Configurations...

  6. 点左上角 +

  7. 找到 Tomcat ServerLocal

  8. Application server 处点 ...,选择你的 Tomcat 安装目录

  9. Name 可以改成 Tomcat 9 方便识别

  10. 在 Tomcat 配置窗口中,点 Server 标签

  11. After launch 可以选 Open browser ,填 http://localhost:8080/servlet_login/login.html

  12. 这样启动后会自动打开浏览器

然后就可以编写前后端代码了,这里简单的做个登录网页

最终的项目结构长这样:

复制代码
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"/>&nbsp;一天内自动登录<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 目录:

  1. 点菜单 FileProject Structure
  2. 左侧选 Artifacts
  3. +Web Application: ExplodedFrom Modules
  4. 选择你的模块,点 OK
  5. Output Layout 里,确保左边有 web 目录的内容

启动 Tomcat

  1. 右上角选择 Tomcat 9并运行

  2. 等控制台输出 Server startup in [xxxx] ms 表示启动成功
    浏览器打开:

    http://localhost:8080/servlet_learn/login.html

应该能看到登录表单了。

相关推荐
zzb15802 小时前
Agent学习-ReAct框架
java·人工智能·python·机器学习·ai
zhangx1234_2 小时前
java list介绍
java·开发语言·list
识君啊2 小时前
拆分与合并的艺术·分治思想:Java归并排序深度解析
java·数据结构·算法·排序算法·归并排序·分治
左左右右左右摇晃2 小时前
Java Object 类笔记
java·笔记
小箌2 小时前
JavaWeb & SpringBoot 总结
java·spring boot·后端
SimonKing2 小时前
震撼:Qoder 搭载Qwen3.2-Plus模型,5步实现完整的多数据源切换
java·后端·程序员
东离与糖宝2 小时前
Langflow-ai OpenRAG实战:Java+Spring Boot搭建企业级私有知识库(从0到1)
java·人工智能
Rsun045512 小时前
Spring AI 面试题
java·人工智能·spring
小涛不学习2 小时前
Java List 集合深度解析(ArrayList / LinkedList 原理详解)
java·开发语言·windows