遇到的问题1:核心问题,就是如果需要做登陆和登陆到主界面的话,需要做三个界面。三个界面分别是:
1:登陆界面
2:验证登陆界面
3:主界面
下面来解释每个界面的作用。登录界面顾名思义了就是登录,目前JSP还不会,就outprintln代码了(大佬不要笑)。这里有一个问题,我最开始的思路是,直接在这个界面申请出一个session然后把这个界面文本框的值给session。这时候经过测试发现,在本界面无法使用
1 String uname = req.getParameter("username");
来获得文本框的值了,这时候就算直接输出uname,uname也是空。那么我是怎么处理的呢?
答案在界面2,也就是登录验证界面
先直接甩出代码
1 /注册驱动 2 Class.forName("com.mysql.jdbc.Driver"); 3 //创建出数据库连接对象并使用三个参数,接口,用户名,密码 conn = DriverManager.getConnection(url, name, password); 4 System.out.println("连接数据库成功"); 5 //预编译对象 6 String sql = "select* from user where userName = ? and userPass = ?"; 7 ps = conn.prepareStatement(sql); 8 //赋值 9 ps.setString(1,uname); 10 ps.setString(2,upass); 11 //执行 12 rs = ps.executeQuery(); 13 //业务逻辑 14 if(rs.next()){ 15 HttpSession session = req.getSession(); 16 session.setAttribute("userName", uname); 17 resp.sendRedirect("MainFace"); 18 }else{ 19 String flag = "用户名密码错误!"; 20 flag = java.net.URLEncoder.encode(flag.toString(),"UTF-8"); 21 resp.sendRedirect("Login?flag="+flag); 22 }
我这个用户名密码的验证通过JDBC访问了自己电脑里的MySQL数据库。然后,让判定登录成功的时候,申请一个session然后把这个成功并且正确的username赋值给session
然后进行到页面3也就是主页面。
主页面没什么好说的,就是首先判断一下是不是非法登录。也就是session的userName是不是空。如果username值是空的话,说明用户没用经过页面2的验证界面直接访问了主界面,所以是非法登录的,这时候就要给它反回主界面并且提示出非法登录。关于get方法在地址栏反回中文的问题我的其他博客有详细介绍,在此不多叙述了。下面给出页面三也就是主界面的代码:
- PrintWriter out = resp.getWriter();
- HttpSession session = req.getSession();
- if(session.getAttribute("userName") == null){
- String flag = "非法登录!";
- flag = java.net.URLEncoder.encode(flag.toString(),"UTF-8");
- resp.sendRedirect("Login?flag="+flag);
- }
- out.println("欢迎管理员:"+session.getAttribute("userName"));