使用 IntelliJ IDEA 创建简单的 Java Web 项目

以下是使用 IntelliJ IDEA 创建几个简单的 Java Web 项目的步骤,每个项目实现基本的登录、注册和查看列表功能,依赖 Servlet/JSP 和基本的 Java Web 开发。


前置准备

  1. 确保安装了 IntelliJ IDEA Ultimate(社区版不支持 Web 应用)。
  2. 确保安装了 JDK 8 或以上版本
  3. 下载并配置 Tomcat 服务器(确保 IDEA 中已配置 Tomcat)。
  4. 创建 MySQL 数据库,并准备对应表结构。

项目功能实现步骤

1. 创建项目
  1. 打开 IntelliJ IDEA,点击 File -> New -> Project
  2. 在左侧选择 Java Enterprise,在右侧配置:
    • 勾选 Web Application
    • 勾选 Java(选择对应的 JDK)。
    • 点击 Next
  3. 输入项目名称(如 SimpleLoginApp),选择项目位置。
  4. 勾选 Create Web.xml 生成标准的 Web 项目结构。
  5. 点击 Finish

2. 配置 Tomcat
  1. 点击顶部菜单的 Run -> Edit Configurations
  2. 点击左上角的 +,选择 Tomcat Server -> Local
  3. 配置 Tomcat:
    • 填写 Name,如 Tomcat-SimpleLoginApp
    • Application Server 中选择 Tomcat(点击 Configure 指向本地的 Tomcat 安装目录)。
    • Deployment 选项卡中,点击 +,选择 Add Artifact,并添加项目的 WAR 包。
  4. 点击 Apply -> OK

3. 项目文件结构

创建后的项目基本结构如下:

SimpleLoginApp/
├── src/main/java/
│   └── com.example.controller/
│       ├── LoginServlet.java
│       ├── RegisterServlet.java
│       ├── UserListServlet.java
│       └── DatabaseConnection.java
├── src/main/resources/
├── src/main/webapp/
│   ├── WEB-INF/
│   │   ├── web.xml
│   ├── index.jsp
│   ├── login.jsp
│   ├── register.jsp
│   └── userlist.jsp

4. 创建数据库和表

使用 MySQL 创建一个简单的 user 表,用于存储用户名、密码等信息。

CREATE DATABASE simple_login_app;USE simple_login_app;CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL,email VARCHAR(100),gender ENUM('male', 'female', 'other'),birthday DATE
);

5. 实现功能
1. 数据库连接工具类

com.example.controller 包中创建 DatabaseConnection.java

package com.example.controller;import java.sql.Connection;
import java.sql.DriverManager;public class DatabaseConnection {private static final String URL = "jdbc:mysql://localhost:3306/simple_login_app";private static final String USER = "root";private static final String PASSWORD = "your_password";public static Connection getConnection() throws Exception {Class.forName("com.mysql.cj.jdbc.Driver");return DriverManager.getConnection(URL, USER, PASSWORD);}
}

2. 登录功能

com.example.controller 包中创建 LoginServlet.java

package com.example.controller;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");try (Connection conn = DatabaseConnection.getConnection()) {String query = "SELECT * FROM user WHERE username = ? AND password = ?";PreparedStatement stmt = conn.prepareStatement(query);stmt.setString(1, username);stmt.setString(2, password);ResultSet rs = stmt.executeQuery();if (rs.next()) {request.getSession().setAttribute("username", username);response.sendRedirect("userlist.jsp");} else {response.getWriter().println("<h3>Invalid username or password</h3>");}} catch (Exception e) {e.printStackTrace();}}
}

3. 注册功能

com.example.controller 包中创建 RegisterServlet.java

package com.example.controller;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;public class RegisterServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");String email = request.getParameter("email");String gender = request.getParameter("gender");String birthday = request.getParameter("birthday");try (Connection conn = DatabaseConnection.getConnection()) {String query = "INSERT INTO user (username, password, email, gender, birthday) VALUES (?, ?, ?, ?, ?)";PreparedStatement stmt = conn.prepareStatement(query);stmt.setString(1, username);stmt.setString(2, password);stmt.setString(3, email);stmt.setString(4, gender);stmt.setString(5, birthday);stmt.executeUpdate();response.sendRedirect("login.jsp");} catch (Exception e) {e.printStackTrace();}}
}

4. 查看用户列表功能

com.example.controller 包中创建 UserListServlet.java

package com.example.controller;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class UserListServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try (Connection conn = DatabaseConnection.getConnection()) {String query = "SELECT * FROM user";PreparedStatement stmt = conn.prepareStatement(query);ResultSet rs = stmt.executeQuery();request.setAttribute("users", rs);RequestDispatcher dispatcher = request.getRequestDispatcher("userlist.jsp");dispatcher.forward(request, response);} catch (Exception e) {e.printStackTrace();}}
}

5. JSP 页面
  1. 登录页面 login.jsp:
<form action="LoginServlet" method="post">用户名: <input type="text" name="username" required><br>密码: <input type="password" name="password" required><br><button type="submit">登录</button>
</form>
  1. 注册页面 register.jsp:
<form action="RegisterServlet" method="post">用户名: <input type="text" name="username" required><br>密码: <input type="password" name="password" required><br>邮箱: <input type="email" name="email"><br>性别: <select name="gender"><option value="male"></option><option value="female"></option><option value="other">其他</option></select><br>生日: <input type="date" name="birthday"><br><button type="submit">注册</button>
</form>
  1. 用户列表页面 userlist.jsp:
<%@ page import="java.sql.ResultSet" %>
<%ResultSet rs = (ResultSet) request.getAttribute("users");
%>
<table border="1"><tr><th>用户名</th><th>邮箱</th><th>性别</th><th>生日</th></tr><%while (rs.next()) {%><tr><td><%= rs.getString("username") %></td><td><%= rs.getString("email") %></td><td><%= rs.getString("gender") %></td><td><%= rs.getDate("birthday") %></td></tr><%}%>
</table>

6. 配置 web.xml
<web-app><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.example.controller.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping><servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>com.example.controller.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/RegisterServlet</url-pattern></servlet-mapping><servlet><servlet-name>UserListServlet</servlet-name><servlet-class>com.example.controller.UserListServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserListServlet</servlet-name><url-pattern>/UserListServlet</url-pattern></servlet-mapping>
</web-app>

启动项目

  1. 运行 Tomcat 服务器。
  2. 打开浏览器访问登录页面:http://localhost:8080/SimpleLoginApp/login.jsp
  3. 测试注册、登录和查看用户列表功能。

这样就可以实现一个基础的 Java Web 应用。如果有更多需求,可以继续扩展!

ps:

我承接各类软件开发项目,技术栈涵盖Python、Java(Swing、JSP)、H5、原生安卓、iOS、Web(PHP、Vue、Node)、C#、Java、C++等,能够为客户提供高效、专业的定制化软件解决方案,满足不同平台和需求的开发要求,如有需要请联系我。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抓包工具之mitmproxy

一、mitmproxy简介 mitmproxy介绍 mitmproxy又名中间人攻击代理&#xff0c;是一个抓包工具&#xff0c;类似于WireShark、Filddler&#xff0c;并且它支持抓取HTTP和HTTPS协议的数据包&#xff0c;只不过它是一个控制台的形式操作。另外&#xff0c;它还有两个非常有用的组件…

Flutter项目开发模版,开箱即用(Plus版本)

前言 当前案例 Flutter SDK版本&#xff1a;3.22.2 本文&#xff0c;是由这两篇文章 结合产出&#xff0c;所以非常建议大家&#xff0c;先看完这两篇&#xff1a; Flutter项目开发模版&#xff1a; 主要内容&#xff1a;MVVM设计模式及内存泄漏处理&#xff0c;涉及Model、…

rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库

问题说明&#xff1a; 客户反馈 &#xff0c;buildroot 系统 &#xff0c;使用qt 使用sqlite &#xff0c;有报错&#xff0c;无法使用sqlite. 测试情况说明&#xff1a; 我自己测试&#xff0c;发现&#xff0c; buildroot 自己默认就是 使能了 sqlite 的。 是否解决说明&…

嵌入式系统 tensorflow

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 探索嵌入式系统中的 TensorFlow&#xff1a;机遇与挑战一、TensorFlow 适配嵌入式的优势二、面临的硬件瓶颈三、软件优化策略四、实…

投机解码论文阅读:Falcon

题目&#xff1a;Falcon: Faster and Parallel Inference of Large Language Models through Enhanced Semi-Autoregressive Drafting and Custom-Designed Decoding Tree 地址&#xff1a;https://arxiv.org/pdf/2412.12639 一看它的架构图&#xff0c;可以发现它是基于EAGLE…

鸿蒙UI(ArkUI-方舟UI框架)

参考&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-layout-development-overview-V13 ArkUI简介 ArkUI&#xff08;方舟UI框架&#xff09;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff…

《探索 PC 端的开源神经网络多模态模型宝藏》

《探索 PC 端的开源神经网络多模态模型宝藏》 一、多模态模型&#xff1a;开启智能交互新纪元二、主流 PC 端开源多模态模型大赏1. Obsidian&#xff1a;轻量级多模态先锋2. GLM-Edge 系列&#xff1a;移动端与 PC 端的全能选手3. Minicpm-llama3-v2.6&#xff1a;紧凑高效的多…

二次雷达的详细介绍及代码示例

一、二次雷达的工作原理 二次雷达&#xff0c;又称空管雷达信标系统&#xff08;Air Traffic Control Radar Beacon System&#xff0c;ATCRBS&#xff09;&#xff0c;是一种无线电电子测位和辨认系统。它由地面询问雷达和飞机上的应答雷达&#xff08;又称雷达信标&#xff0…

Clojure语言的多线程编程

Clojure语言的多线程编程 在现代软件开发中&#xff0c;多线程编程是一项重要的技能。它使程序能够在同一时间执行多个任务&#xff0c;充分利用多核处理器的性能。在众多编程语言中&#xff0c;Clojure作为一门函数式编程语言&#xff0c;提供了强大的并发支持。本文将深入探…

人工智能-数据分析及特征提取思路

1、概况 基于学生行为数据预测是否涉黄、涉黑等。 2.数据分析 数据分析的意义包括得到数据得直觉、发掘潜在的结构、提取重要的变量、删除异常值、检验潜在的假设和建立初步的模型。 2.1数据质量分析 2.1.1数据值分析 查看数据类型&#xff1a; 首先明确各字段的数据类型…

ChatGPT网络错误如何解决

在当今的信息化社会&#xff0c;网络技术已无处不在。无论是日常生活中的在线购物&#xff0c;还是工作中的远程会议&#xff0c;网络的稳定性和可靠性成为了我们无时无刻不在关注的重要问题。而在智能技术的快速发展中&#xff0c;像ChatGPT这样的人工智能模型&#xff0c;因其…

TensorFlow Quantum快速编程(基本篇)

一、TensorFlow Quantum 概述 1.1 简介 TensorFlow Quantum(TFQ)是由 Google 开发的一款具有开创性意义的开源库,它宛如一座桥梁,巧妙地将量子计算与 TensorFlow 强大的机器学习功能紧密融合。在当今科技飞速发展的时代,传统机器学习虽已取得诸多瞩目成就,然而面对日益…

Qt天气预报系统获取天气数据

Qt天气预报系统获取天气数据 1、获取天气数据1.1添加天气类头文件1.2定义今天和未来几天天气数据类1.3定义一个解析JSON数据的函数1.4在mainwindow中添加weatherData.h1.5创建今天天气数据和未来几天天气数据对象1.6添加parseJson定义1.7把解析JSON数据添加进去1.8添加错误1.9解…

[ASISCTF 2024 final]

过去有些日子的比赛的&#xff0c;国外很多比赛题目水平很高。没事的时候拿来作作。只是WP不全我不会的大多没有。 Crypto Lozib 这个题就挺有意思。由于远程都关了&#xff0c;只在本地把思路作了下。 #!/usr/bin/env python3import sys from Crypto.Util.number import *…

es 单个节点cpu过高

背景&#xff1a; es 单个节点cpu一直持续很高&#xff0c;其它节点cpu不高。 观察这个节点的jvm使用率比较高&#xff0c;怀疑是jvm内存没释放导致内存寻址效率低&#xff0c;引起cpu过高。 解决方法&#xff1a;手动执行fullgc&#xff0c; 在线执行对业务无影响。 jcmd pi…

国产编辑器EverEdit - 扩展脚本:关闭所有未修改文档

1 扩展脚本&#xff1a;关闭所有未修改文档 1.1 应用场景 当用户打开过多文档时&#xff0c;部分文档已经修改&#xff0c;而大部分没有修改&#xff0c;为了减少在众多已打开文档中来回跳转的不便&#xff0c;可以将没有修改的文档全部关闭&#xff0c;但目前提供的快速关闭窗…

高斯函数Gaussian绘制matlab

高斯 约翰卡尔弗里德里希高斯&#xff0c;&#xff08;德语&#xff1a;Johann Carl Friedrich Gau&#xff0c;英语&#xff1a;Gauss&#xff0c;拉丁语&#xff1a;Carolus Fridericus Gauss&#xff09;1777年4月30日–1855年2月23日&#xff0c;德国著名数学家、物理学家…

dolphinscheduler2.0.9升级3.1.9版本问题记录

相关版本说明 JDK&#xff1a;JDK (1.8&#xff09; DolphinScheduler &#xff1a;3.1.9 数据库&#xff1a;MySQL (8)&#xff0c;驱动&#xff1a;MySQL JDBC Driver 8.0.16 注册中心&#xff1a;ZooKeeper (3.8.4) 问题一&#xff1a;dolphinscheduler2.0.9对应zk版本使用…

Sqoop1.4.7安装

环境说明 准备三台服务器&#xff0c;分别为&#xff1a;bigdata141&#xff08;hadoop 主节点&#xff09;、bigdata142、bigdata143确保 hadoop 集群先启动好&#xff0c;hadoop 版本为 3.2.0如果只安装不使用的话&#xff0c;以上可以暂时不用管另准备一台服务器&#xff0…

STM32Flash读写BUG,坑—————4字对齐

在 STM32 的 Flash 存储中&#xff0c;数据通常需要 4 字节对齐&#xff0c;这是由于其 Flash 存储的硬件设计和写入操作的限制决定的。 以下是更详细的原因与解释&#xff1a; 1. STM32 的 Flash 写入单位 STM32 的 Flash 通常以字&#xff08;Word&#xff0c;4 字节 32 位…