引言
在 web 开发中,用户登录功能是非常常见的模块之一。本文将通过使用 java servlet 和 jsp 实现一个简单的用户登录功能,展示如何创建登录页面、处理用户登录请求,并使用数据库验证用户信息。还将介绍如何在 intellij idea 中创建 servlet 项目,引入 mysql 连接器,并将 login.jsp 设置为项目的默认主页。
一、开发目标
1. 开发环境
- 开发工具: intellij idea
- 开发语言: java
- web 容器: apache tomcat
- 数据库: mysql
- jdk 版本: jdk 8 或以上
- 依赖管理: maven
2. 目标功能
实现用户在login.jsp输入账号密码后跳转到result.jsp的结果页,并提示登录是否成功。
3. 目标项目结构
servlet-study/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── com/example/loginservlet.java │ │ │ └── com/example/utils/dbutil.java │ │ └── resources/ │ │ └── db.properties ├── webapp/ │ ├── login.jsp │ ├── result.jsp │ └── web-inf/ │ └── web.xml └── pom.xml
二、创建 servlet jsp 项目
1. 创建 maven 项目
打开 intellij idea,选择 new project,填写项目名称,选择 maven,点击 create。

file 菜单栏里选择 project structure。

project settings 选择 modules,点击上方加号,新增一个 web 模块。

点击 ok。

创建结果如图:

2. 配置 tomcat 服务器
启动按钮旁边,点击 edit configurations。

添加 tomcat server > local。

如果下方有红色提示,请点击 fix。

project settings 选择 artifacts,添加 web application exploded,选择 from modules。

后面全部点击 ok。

回到 deployment 配置,将 application context 的路径设置为 /。

3. 引入 mysql 连接器依赖
在 pom.xml 中添加以下依赖:
<dependencies>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>8.0.28</version>
</dependency>
</dependencies>
右键点击项目根目录,选择 maven > reload project 更新依赖。

安装成功如图:

三、配置数据库连接与表结构
1. 创建数据库与用户表
创建 servlet_study 数据库,新建 users 表。
create database if not exists servlet_study default character set utf8mb4 collate utf8mb4_unicode_ci;
use servlet_study;
create table if not exists users (
id int auto_increment primary key,
username varchar(50) not null,
password varchar(50) not null,
created_at timestamp default current_timestamp
);
insert into users (username, password) values ('admin', 'root');

2. 配置数据库工具类 (dbutil.java)
java 目录下创建 com > example > utils 文件夹下工具类文件 dbutil.java。


编写 dbutil.java 文件。
package com.example.utils;
import java.io.inputstream;
import java.sql.*;
import java.util.properties;
public class dbutil {
private static string url;
private static string username;
private static string password;
private static string driverclassname;
static {
try (inputstream input = thread.currentthread().getcontextclassloader().getresourceasstream("db.properties")) {
properties properties = new properties();
properties.load(input);
url = properties.getproperty("jdbc.url");
username = properties.getproperty("jdbc.username");
password = properties.getproperty("jdbc.password");
driverclassname = properties.getproperty("jdbc.driverclassname");
class.forname(driverclassname);
} catch (exception e) {
e.printstacktrace();
}
}
public static connection getconnection() throws sqlexception {
return drivermanager.getconnection(url, username, password);
}
}
3. 创建数据库配置文件 (db.properties)
src > main > java > resources 目录下创建数据库配置文件 db.properties。

文件内容:
jdbc.url=jdbc:mysql://localhost:3306/servlet_study?usessl=false&servertimezone=utc jdbc.username=your_username jdbc.password=your_password jdbc.driverclassname=com.mysql.cj.jdbc.driver
提示: 请将 your_username 和 your_password 替换为实际的数据库账号、密码。

四、编写登录页面与接口代码
1. 创建登录页面 (login.jsp)
web 目录下创建 login.jsp 文件。

编写代码:
<%@ page contenttype="text/html;charset=utf-8" language="java" %>
<html>
<head>
<meta charset="utf-8">
<title>用户登录</title>
</head>
<body>
<h2>用户登录</h2>
<form action="/login" method="post">
<label for="username">账号:</label>
<input type="text" id="username" name="username" required>
<label for="password">密码:</label>
<input type="password" id="password" name="password" required>
<input type="submit" value="登录">
</form>
</body>
</html>

2. 创建登录结果页面 (result.jsp)
web 目录下创建 result.jsp 文件。
编写代码:
<%@ page contenttype="text/html;charset=utf-8" language="java" %>
<html>
<head>
<meta charset="utf-8">
<title>登录结果</title>
</head>
<body>
<h2>登录结果</h2>
<%
string message = (string) request.getattribute("message");
%>
<p><%= message %></p>
<a href="/login.jsp" rel="external nofollow" >返回登录页面</a>
</body>
</html>

3. 创建后端 servlet 接口 (loginservlet.java)
src/main/java 下创建新的 java 类 loginservlet.java。


编写 loginservlet.java 代码:
package com.example;
import com.example.utils.dbutil;
import javax.servlet.*;
import javax.servlet.annotation.webservlet;
import javax.servlet.http.*;
import java.io.ioexception;
import java.sql.*;
@webservlet(name = "loginservlet", urlpatterns = "/login")
public class loginservlet extends httpservlet {
@override
protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
string username = req.getparameter("username");
string password = req.getparameter("password");
if (validateuser(username, password)) {
req.setattribute("message", "登录成功!");
} else {
req.setattribute("message", "账号或密码错误!");
}
req.getrequestdispatcher("/result.jsp").forward(req, resp);
}
private boolean validateuser(string username, string password) {
string sql = "select * from users where username = ? and password = ?";
try (connection connection = dbutil.getconnection();
preparedstatement ps = connection.preparestatement(sql)) {
ps.setstring(1, username);
ps.setstring(2, password);
resultset rs = ps.executequery();
return rs.next();
} catch (sqlexception e) {
e.printstacktrace();
}
return false;
}
}
新建的代码会有报错,我们需要在 pom.xml 文件里引入 javax 的包。
在 pom.xml 中添加以下依赖:
<dependencies>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>8.0.28</version>
</dependency>
</dependencies>

回到 loginservlet.java 文件,可以看到已经没有报错了。

4. 编辑配置文件 (web.xml)
web.xml 里设置首页为 login.jsp,将 loginservlet 的接口url /login 配置到路由里。
<?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">
<servlet>
<servlet-name>loginservlet</servlet-name>
<servlet-class>com.example.loginservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginservlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>

五、启动和测试
启动项目。

在浏览器中访问项目根路径:http://localhost:8080/
看到我们首页自动跳转的登录页。

输入错误的账号或密码时,显示 "账号或密码错误!"。

输入正确的账号密码时,显示 "登录成功!"。

六、常见问题
1. jsp页面报404错误
解决方法:
① 检查路径是否正确;
② tomcat 的deployment 配置里 application context 的路径设置为 /(参考文章里配置 tomcat 的最后一步)
2. /login接口报404错误
解决方法:
① 检查接口上方注解内url是否正确;
② web.xml 文件是否正确配置(参考第四章第4节配置文件)
3. 连接不上数据库
解决方法:
① 检查账号、密码、数据库连接信息 (db.properties) 有没有写错;
② tomcat 运行的 jar 包来自其自身的libs文件夹,需要把 mysql-connector-java.jar 拷贝到 tomcat 的安装路径下的 lib 文件夹下面。
mysql-connector-java.jar 在 external libraries 目录下,它是由 maven 自动导入的。

复制到 tomcat 的安装路径下的 lib 文件夹下面。

重新启动项目,即可顺利连接数据库。
以上就是java基于servlet和jsp实现登录功能的详细内容,更多关于java servlet和jsp登录的资料请关注代码网其它相关文章!
发表评论