servlet和jsp,登录页面的判断

怎么判断表单中的用户名和密码和数据库的一致,就是简单的登录判断,我只实现了一个用户名判断,如何实现密码判断,并且成功登录后打开新的页面

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>


后端根据用户名查找数据库,存在该用户则比对密码,用户不存在和密码不正确都提示前端用户名和密码不正确(避免被猜用户和密码)
后端的代码逻辑比较清晰就不贴了。

该回答引用ChatGPT
在servlet中,用户名和密码输入正确后跳转到登录后的新页面,可以通过以下步骤实现:

1. 在前端增加密码输入框(type为password)。

2. 在servlet中取出密码参数,然后查询数据库中是否存在用户名和密码都匹配的记录(可以使用UserServiceImpl中的selectByUsernameAndPassword方法)。

3. 如果存在匹配记录,则可以使用response.sendRedirect方法跳转到登录后的新页面(如:response.sendRedirect("http://www.example.com/loggedin.jsp"))。

修改后的servlet代码如下:

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);
}
}
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/664398
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:servlet跳转到jsp页面,jsp样式失效怎么解决!
  • 除此之外, 这篇博客: jsp 获取servlet 传输过来的数据中的 jsp 获取servlet 传输过来的数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 方式一:
    <%
    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 />
    
  • 您还可以看一下 王磊老师的javaweb 入门到精通Servlet&JSP;课程中的 02.servlet生命周期-init方法小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    由于没有完整的代码和数据库信息,无法进行具体测试和编写,以下给出大致思路:

    1. 在servlet中获取表单中提交的用户名和密码参数,同时获取数据库中该用户名的密码信息。
    2. 对比表单中提交的密码和数据库中的密码是否一致,若一致则表示校验成功,可以进行登录操作。否则返回错误信息。
    3. 登录成功后,可以使用session保存用户信息,比如用户名,以便在其他页面使用。
    4. 对于页面跳转,可以使用response.sendRedirect()方法,将用户跳转至指定的页面。比如登录成功后跳转到success.jsp页面。
    5. 对于登录状态的保持,可以在浏览器端使用cookie来保存session的信息,使得用户下次访问网站时仍然为已登录状态。示例代码如下:
    // 在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;
             }
          }
       }
    %>
    

    以上是大致思路,需要根据具体的情况进行调整和完善。