在不使用jsp提交表单的情况下,如何检查数据库中是否存在用户名



我试图在不提交表单的情况下检查数据库中是否存在用户名。但我没有成功。下面是我的代码。

控制器.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ page import="java.util.regex.*"%>
<%-- <%@ page import="java.net.URLEncoder" session="false" %> --%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Controller</title>
</head>
<body>
<div class="container">
<%
String Username = request.getParameter("Username");
session.setAttribute( "theName", Username );
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/abc?autoReconnect=true&useSSL=false", "root", "");
try{
Statement st = con.createStatement();
ResultSet rs;
rs = st.executeQuery("select * from signupform where Username='" + Username + "'");
if(rs.next()){
String usermessage = "Username already exists";
request.getSession().setAttribute("usermessage", usermessage);
response.sendRedirect("Signupform.jsp");
}
else{
PreparedStatement ps = con. prepareStatement("insert into signupform(Username) values(?)");
ps.setString(1, Username);
if(Username.isEmpty())
{
String message = "Please fill all the fields";
request.getSession().setAttribute("message", message);
/* response.sendRedirect("Signupform.jsp?message="+ URLEncoder.encode(message, "UTF-8")); */
response.sendRedirect("Signupform.jsp");
}
else{
ps.executeUpdate();
response.sendRedirect("Welcome.jsp");
}
}
}
catch (Exception e) {
out.println(e);
}
%>
</div>
</body>
</html>

用于提供输入的表单显示在代码Signupform.jsp中。当用户填写相应的字段时,它应该立即在同一页面中报告用户是否存在。

注册表单.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Register</title>
<link Rel=stylesheet type="text/css" href="main.css">
</head>
<body>
<div class ="container">      
<div>
<form action="controller1.jsp" method = "POST">
Username <input type = "text" name = "Username" value="">
<br>
<input type="submit" value="Submit"/>
<input type="reset" value="Reset"/>
<br>
<p>${usermessage}</p>
<c:remove var="usermessage" scope="session"/>
</form>
</div>
</div>
</body>
</html>

对于初学者来说,这是一个巨大的安全漏洞。你不能这样做数据库查询;使用PreparedStatement。或者,填写用户名:

joe'; DROP TABLE signupform CASCADE; --

你的数据库就会消失。

你似乎知道准备好的报表是如何工作的(你用它来插入(。你必须在任何地方使用它,所有的SQL几乎都必须是一个字符串常量。如果您曾经键入"SELECT ...." +...停止。不要那样做。

你想要的不容易实现。网络不是这样运作的。客户端就是客户端,服务器就是服务器,除非你明确表示,否则它们不会相互联系

客户端必须使用javascript(在客户端上运行的代码(在您键入时询问服务器,从而触发用户名字段的更改,这本身就很棘手(在浏览器中有很多方法可以更改文本字段。例如,您可以右键单击并选择粘贴,因此注册键盘处理程序是不好的(。

简单的解决方案:使用setInterval每隔±200毫秒左右进行一次检查。如果自上次检查以来字段没有被修改,则不要执行任何操作,也不要检查ajax调用是否正在进行中。否则,向服务器发送ajax调用以进行询问,并操纵DOM来反映这一点。

你必须学习javascript。。不是一个小时就能完成的事情。这实际上可以归结为:;我如何编写网络应用程序"。这个问题有答案,但SO不是一个好地方。这更多的是书籍和很长的教程的问题。

相关内容

  • 没有找到相关文章

最新更新