求解决,用Maven搭建的javrweb项目网页登录报错,测试环境:Windows10_64位、IDEA2023.1.3、JDK-20.0.2、Tomcat-10.1.11,Servlet和Maven已经配置好,JAVA环境配置也配置好了,问题如下:
启动Tomcat后能打开web网页,但点击登录按钮时没有反应,查看控制台提示,找不到LoginServlet
package servlets;
import org.example.DbUtil;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.annotation.WebServlet;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
Connection connection = DbUtil.getConnection();
PreparedStatement statement = connection.prepareStatement
("SELECT * FROM user WHERE username=? AND password=?");
statement.setString(1, username);
statement.setString(2, password);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
// 登录成功
response.sendRedirect("success.jsp");
} else {
// 登录失败
response.sendRedirect("error.jsp");
}
resultSet.close();
statement.close();
DbUtil.closeConnection(connection);
} catch (SQLException e) {
e.printStackTrace();
// 处理异常
}
}
}
web.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"
metadata-complete="false">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
pom.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>org.example</groupId>
<artifactId>Fake</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>20</maven.compiler.source>
<maven.compiler.target>20</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>system</scope>
<systemPath>${project.basedir}/web/WEB-INF/lib/mysql-connector-j-8.0.33.jar</systemPath>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5-20081211</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
</project>
index.jsp代码如下:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/8/17
Time: 18:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>管理系统</title>
<script src="webapp/js/jquery.min.js" type="text/javascript"></script>
</head>
<title>登录页面</title>
<body>
<div>
<div id="logo">
<h1>考勤管理系统</h1>
</div>
<div id="login-form">
<h3>
<br><label for="username">登录名</label>
<input type="text" id="username" placeholder="请输入工号">
<br>
</h3>
<h3>
<label for="password">登录密码</label>
<input type="password" id="password" placeholder="登录密码">
</h3>
<from>
<button id="entry_btn" type="button">登录</button>
</from>
<div class="prompt" id="prompt"></div>
</div>
</div>
<style>
body {
background-image: url("webapp/imgs/02.png");
background-position: center;
background-size: cover;
background-repeat: no-repeat;
position: relative;
z-index: -1;
}
#logo {
font-size: 25px;
font-weight: bold;
text-align: center;
margin-bottom: 20px;
}
#login-form {
width: 200px;
margin: 0 auto ;
background-color:white;
padding: 40px;
text-align: center;
border-radius: 5px;
}
#login-button {
margin-top: 30px;
padding:20px 20px;
font-size: 30px;
background-color: #FF8C00;
color: white;
border: none;
border-radius: 20px;
cursor: pointer;
}
</style>
<script type="text/javascript">
// 获取登录按钮元素
var entryBtn = document.getElementById("entry_btn");
// 绑定点击事件处理函数
entryBtn.addEventListener("click", function() {
// 获取用户名和密码输入框的值
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
// 创建一个 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
// 设置请求方法和 URL
xhr.open("POST", "LoginServlet", true);
// 设置请求头
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// 监听请求状态变化
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
// 处理响应结果
var result = xhr.responseText;
if (result === "1") {
// 登录成功,跳转到其他页面
window.location.href = "dashboard.html";
} else {
// 登录失败,显示错误提示
var prompt = document.getElementById("prompt");
prompt.innerText = "用户名或密码错误";
}
} else {
// 请求发生错误
console.error("请求发生错误:" + xhr.status);
}
}
};
// 发送请求
xhr.send("username=" + encodeURIComponent(username) + "&password=" + encodeURIComponent(password));
});
</script>
</script>
</body>
</html>
模块配置如下:
【补充一下】Tomcat安装目录下的jsp-api.jar和servlet-api.jar也复制在了lib目录下
请求地址写login就可以了,在servlet定义的时候定义了请求路径
【相关推荐】
创建方式有点特殊,不是直接右击project创建class,而是创建一个普通class,菜单->File->New->Class)
注意:eclipse创建的时候会自带一个包名test,不要使用这个包名,让包名置空
这个类需要继承HttpServlet ,而HttpServlet这个类提供了doPost方法,我们后面需要这个方法,来获取到客户提交参数。
(注)这里的doPost方法代表只支持Post方式提交;像doGet方法只支持get方式; 而如果是Service方法的话,即代表支持所有方法提交。
最后看到的是这个类放置于src目录下面
import java.io.UnsupportedEncodingException;
import java.util.Base64;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println("name:" +name);
System.out.println("password:" +password);
}
}
五、创建web目录
1、在项目下右键创建目录web ,然后再创建web/WEB-INF ,然后在WEB-INF目录中创建 web.xml
web.xml文件内容:
注意:/login 这个是你通过url访问这个接口的时候加上的
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
2、web目录下创建login.html
注意:这里的"login" 需要和web.xml文件里的<url-pattern>/login</url-pattern> 名字对应,不然无法找到对应servlet
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆页面</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" name="name">
密码:<input type="text" name="password"><br/>
<input type="submit" value="登陆">
</form>
</body>
</html>
3、指定项目输出到classes目录
首先在WEB-INF下创建classes目录
把项目的class文件输出由原来的test/bin 设置到 test/web/WEB-INF/classes下
项目右键->properties->Java Build Path->Source->右下角的 Broswer-> 指定位置是 test/web/WEB-INF/classes