怎么判断表单中的用户名和密码和数据库的一致,就是简单的登录判断,我只实现了一个用户名判断,如何实现密码判断,并且成功登录后打开新的页面
html代码
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Insert title here</title>
</head>
<body>
<form action="http://localhost:8080/2023-04-04_02_JDBC/UsernameServlet" method="post">
<input type="text" id="username" /><br />
<span id="nameshow"></span><br />
<input type="password" id="password" /><br />
<span id="pwdshow"></span><br />
<input type="submit" value="注册" id="zhuce"/>
<input type="submit" value="登录" id="denglu"/>
</form>
<script src="js/jq.js"></script>
<script>
$(function(){
$('#username').blur(function(){
$.ajax({
url:'http://localhost:8080/2023-04-04_02_JDBC/UsernameServlet',
data:{
username:$('#username').val(),
},
type:'post',
success(result) {
if(result==0){
$('#nameshow').html('用户名不存在').css('color','red');
}else{
$('#nameshow').html('用户名正确').css('color','red');
}
}
});
});
});
</script>
</body>
</html>
servlet代码
package com.qf.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.impl.UserServiceImpl;
/**
* Servlet implementation class CheckNameServlet
*/
@WebServlet("/UsernameServlet")
public class UsernameServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UsernameServlet() {
super();
}
private UserServiceImpl userServiceImpl = new UserServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String us = request.getParameter("username");
String pa = request.getParameter("password");
User u = userServiceImpl.selectByUsername(us);
if(u == null) {
response.getWriter().print(0);
}else {
//用户名输入正确
response.getWriter().print(1);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
引用chatgpt部分指引作答:
您好,首先需要在html中添加密码输入框的id和name,以便在servlet中获取密码参数。修改后的代码如下:
<input type="password" id="password" name="password" /><br />
接下来,在servlet中获取密码参数,与用户名一同查询数据库,判断用户名和密码是否正确。如果用户名和密码都正确,则在session中添加一个标识符,用于判断用户是否已经登录,并重定向到一个新页面。如果密码不正确,则返回登录页面。
修改后的servlet代码如下:
package com.qf.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.impl.UserServiceImpl;
/**
* Servlet implementation class CheckNameServlet
*/
@WebServlet("/UsernameServlet")
public class UsernameServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UsernameServlet() {
super();
}
private UserServiceImpl userServiceImpl = new UserServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String us = request.getParameter("username");
String pa = request.getParameter("password");
User u = userServiceImpl.selectByUsername(us);
if(u == null) {
response.getWriter().print("用户名不存在");
}else {
// 判断密码是否正确
if (pa.equals(u.getPassword())) {
HttpSession session = request.getSession();
session.setAttribute("user", u);
response.sendRedirect("newPage.jsp");
} else {
response.getWriter().print("密码不正确");
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
在新页面中,您可以从session中获取用户信息并显示在页面上,如下所示:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.qf.pojo.User" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>新页面</title>
</head>
<body>
<%
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
out.println("欢迎您," + user.getUsername());
%>
</body>
</html>
希望对您有所帮助。
Ajax请求时,增加password 参数
$.ajax({
url:'http://localhost:8080/2023-04-04_02_JDBC/UsernameServlet',
data:{
username:$('#username').val(),
password:$('#password').val()
}
});
selectByUsername方法怎么写的,需要加上密码这个条件即可。
前端代码里传到后端controller的参数带有密码(如果需要加密传输,可以md5后传给后端)
<script>
$(function(){
$('#username').blur(function(){
$.ajax({
url:'http://localhost:8080/2023-04-04_02_JDBC/UsernameServlet',
data:{
username:$('#username').val(),
password:$('#password').val(),
},
type:'post',
success(result) {
if(result==0){
$('#nameshow').html('用户名不存在').css('color','red');
}else{
$('#nameshow').html('用户名正确').css('color','red');
}
}
});
});
});
</script>
后端根据用户名查找数据库,存在该用户则比对密码,用户不存在和密码不正确都提示前端用户名和密码不正确(避免被猜用户和密码)
后端的代码逻辑比较清晰就不贴了。
java
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private UserService userService = new UserServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userService.selectByUsernameAndPassword(username, password);
if (user == null) {
response.getWriter().print("0");
} else {
// 登录成功
response.sendRedirect("http://www.example.com/loggedin.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
方式一:
<%
java 代码
%>
<%
//不推荐在jsp中写Java代码,不易于维护
//页面数据处理,推荐使用JSTL 和 EL 表达式
String name = (String)request.getAttribute("name");
out.println("欢迎," + name);
%>
方式二:
<c: 标签
<c:out value="${requestScope.name}"></c:out><br /><br />
<c:out value="${sessionScope.name}"></c:out><br /><br />
<c:out value="${applicationScope.name}"></c:out><br /><br />
方式三
${}
${param.username}<br /><br />
${requestScope.name}<br /><br />
${sessionScope.name}<br /><br />
${applicationScope.name}<br /><br />
由于没有完整的代码和数据库信息,无法进行具体测试和编写,以下给出大致思路:
// 在Servlet中设置Session信息
HttpSession session = request.getSession();
session.setAttribute("username", username);
// 在JSP中获取Session信息
<%
HttpSession session=request.getSession();
String username=(String)session.getAttribute("username");
%>
// 在Servlet中设置Cookie信息
Cookie cookie = new Cookie("username", username);
cookie.setMaxAge(60 * 60 * 24 * 7); // 设置过期时间为一周
response.addCookie(cookie);
// 在JSP中获取Cookie信息
<%
String username = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username")) {
username = cookie.getValue();
break;
}
}
}
%>
以上是大致思路,需要根据具体的情况进行调整和完善。