所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

JSP实现登录界面超详细教程:新手秒会附完整源码

JSP实现登录界面超详细教程:新手秒会附完整源码 一

文章目录CloseOpen

第一步:先把环境搭对——别等写代码了才发现Tomcat没配好

做JSP登录界面,第一步不是写HTML,是把环境搭对——不然等你写了20行代码,才发现Tomcat启动报错,那才崩溃。我当年踩过最蠢的坑是:JDK装了17,Tomcat用了8,结果启动时提示“Unsupported major.minor version”,查了半天才知道JDK17要对应Tomcat10以上。给你个我亲测有效的兼容组合:

  • JDK8 → Tomcat8或9
  • JDK11 → Tomcat9或10
  • JDK17 → Tomcat10或11
  • 选好版本后,还有3个细节要注意:

  • 把JDBC驱动放到Tomcat的lib目录里
  • :比如MySQL8的驱动jar包,别放到项目的WEB-INF/lib里——Tomcat需要单独加载驱动,不然会提示“ClassNotFoundException”。我当年就是放错位置,查了3小时才解决,这坑你别踩。

  • 配置Context路径
  • :在Tomcat的server.xml里,给你的项目加个Context标签,比如——这样你访问时输http://localhost:8080/loginDemo就能进项目,不用记冗长的路径。

  • 测试环境是否正常
  • :写个简单的index.jsp,内容就放

    Hello JSP!

    ,启动Tomcat后访问,如果能看到这句话,说明环境没问题——别等写登录逻辑了才测试。

    第二步:从表单到后端——每一步都讲透,别再猜“为什么参数获取不到”

    环境搭好,接下来做登录界面的核心:HTML表单+JSP后端逻辑。我先给你个简化版的HTML表单(用Bootstrap,不用写复杂CSS):

    
    
    
    

    登录界面

    用户登录

    <!-

  • 显示错误信息 >
  • 这段代码里有2个新手必看的细节:

  • 用post方法:别用get——get会把密码暴露在URL里,不安全;
  • 错误信息显示:用request.getAttribute("errorMsg")获取后端传的错误提示,再用Bootstrap的alert组件显示——用户输错密码时,能看到友好提示,不是一串英文异常。
  • 接下来讲JSP后端(login.jsp)的逻辑,我把代码拆成3部分,每部分都加了注释:

  • 获取表单参数
  • // 获取表单里的用户名和密码(name要和表单的name一致)
    

    String username = request.getParameter("username");

    String password = request.getParameter("password");

    坑提醒:如果表单的name是“username”,你后端写request.getParameter("user"),肯定获取不到值——我当年就犯过这错,盯着代码看了1小时才发现参数名写错。

  • 连接数据库验证账号
  • // 数据库连接信息(改成你自己的)
    

    String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";

    String dbUser = "root";

    String dbPwd = "123456";

    // 加载JDBC驱动(MySQL8以上要加cj)

    Class.forName("com.mysql.cj.jdbc.Driver");

    // 建立连接

    Connection conn = DriverManager.getConnection(url, dbUser, dbPwd);

    // 预处理查询(防止SQL注入)

    PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE username = ? AND password = ?");

    pstmt.setString(1, username); // 第一个?填用户名

    pstmt.setString(2, password); // 第二个?填密码

    // 执行查询

    ResultSet rs = pstmt.executeQuery();

    权威参考:MySQL官方文档里提到,com.mysql.cj.jdbc.Driver是MySQL8及以上的标准驱动,com.mysql.jdbc.Driver已经 deprecated(过时)——别用旧的,不然会报警告。

  • 处理登录结果
  • if (rs.next()) {
    

    // 登录成功:保存session状态(这样其他页面能判断用户是否登录)

    session.setAttribute("username", username);

    // 跳转到成功页

    response.sendRedirect("success.jsp");

    } else {

    // 登录失败:传错误信息回登录页

    request.setAttribute("errorMsg", "账号或密码错误");

    // 转发回登录页(别用重定向,不然errorMsg会丢失)

    request.getRequestDispatcher("login.html").forward(request, response);

    }

    经验分享:我当年用response.sendRedirect()传错误信息,结果发现登录页看不到提示——后来才知道,重定向是“客户端跳转”,request对象的属性会丢失,得用forward(服务器端跳转)才能把错误信息带过去。

    最后写成功页(success.jsp):

    
    
    
    

    登录成功

    欢迎您,!

    退出登录

    安全提醒:别让未登录的用户访问成功页——在success.jsp开头加段代码:

    if (session.getAttribute("username") == null) {
    

    // 未登录,跳回登录页

    response.sendRedirect("login.html");

    }

    第三步:踩坑 ——我当年错了5次的地方,你一次都别犯

    最后我把自己当年踩过的坑整理成“避坑清单”,你看完能少走很多弯路:

  • 密码别明文存储:教程里用了明文,但实际项目要加密(比如MD5或SHA-256)——我后来把密码改成MD5(password),数据库存密文,这样即使数据库泄露,密码也不会被破解。
  • 别忘记关闭数据库连接:ResultSet、PreparedStatement、Connection要在finally里关闭,比如:
  • finally {
    

    if (rs != null) rs.close();

    if (pstmt != null) pstmt.close();

    if (conn != null) conn.close();

    }

    我当年没关连接,结果MySQL提示“Too many connections”,重启了服务器才好。

  • 用Chrome的开发者工具查错:如果登录没反应,按F12打开“网络”面板,看请求的状态码——404是路径错,500是代码错,200是成功但逻辑错。
  • 你按这些步骤做,肯定能跑通——如果遇到问题,比如“Tomcat启动报错”、“数据库连不上”,可以在评论区留消息,我帮你看看。最后送你完整源码,复制到项目里,改改数据库配置就能用(关注公众号回复“JSP登录”获取)。你试试,做完了来告诉我效果!


    本文常见问题(FAQ)

    JDK和Tomcat版本不兼容怎么办?

    可以参考亲测有效的兼容组合:JDK8对应Tomcat8或9,JDK11对应Tomcat9或10,JDK17对应Tomcat10或11。比如我当年JDK装了17却用Tomcat8,启动时就提示“Unsupported major.minor version”,换成对应版本就解决了。

    JDBC驱动放错位置会有什么问题?

    如果把MySQL驱动jar包放到项目的WEB-INF/lib里,Tomcat会提示“ClassNotFoundException”,因为Tomcat需要单独加载驱动。正确的位置是Tomcat的lib目录,我当年就是放错位置查了3小时才解决,这个坑别踩。

    表单参数获取不到是什么原因?

    首先要检查表单里的name属性和后端request.getParameter()的参数名是否一致,比如表单name是“username”,后端写“user”肯定获取不到。另外 用post方法提交表单,不仅安全,也能避免参数暴露在URL里的问题。

    登录成功后怎么保存用户状态?

    可以用session保存登录状态,比如登录成功时用session.setAttribute("username", username)把用户名存进session,这样其他页面(比如成功页)能通过session.getAttribute("username")判断用户是否登录。如果未登录,还能跳回登录页。

    未关闭数据库连接会有什么影响?

    如果没关闭ResultSet、PreparedStatement或Connection,MySQL可能会提示“Too many connections”,导致无法连接数据库。我当年没关连接就遇到过这个问题,后来在finally代码块里关闭所有连接才解决,比如用if (rs != null) rs.close()这样的写法。

    原文链接:https://www.mayiym.com/51700.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码