You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Servlet登录验证输入正确用户名仍提示登录失败问题排查

问题核心原因

  • 代码中判断字符串相等使用了==运算符,这是Java中典型的字符串比较误区:==对比的是两个字符串对象的内存地址,而非字符串的实际内容。req.getParameter("username")返回的字符串是运行时生成的新对象,和常量池中的"abc"内存地址不一致,所以判断永远返回false。
  • 同时存在两处笔误:成功日志拼写错误为LOG IN SCUCCESSFUL(正确应为SUCCESSFUL),失败日志拼写错误为LOG IN FAILD(正确应为FAILED)。
  • 额外的冗余代码:String.valueOf(req.getParameter("username"))没有必要,req.getParameter本身返回值就是String类型,若参数为空时调用String.valueOf反而会把null转为"null"字符串,增加逻辑异常风险。

修复方案

将字符串判断逻辑替换为equals()方法,equals()才是用于对比字符串实际内容的方法,为了避免用户名取空时的空指针异常,推荐将常量"abc"放在前面调用equals方法:

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/login")
public class Servlet1 extends HttpServlet{
   // 推荐重写doPost方法单独处理POST请求,不要直接覆写service,避免破坏Servlet默认的请求分发逻辑
   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       String userName = req.getParameter("username");
       String password = req.getParameter("pswd");
       
       System.out.println(userName);
       
       if("abc".equals(userName)) {
           System.out.println("LOG IN SUCCESSFUL");
       }
       else {
           System.out.println("LOG IN FAILED");
       }
   }
}

内容的提问来源于stack exchange,提问作者V V ARJUN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:54:07