javaweb作业11,注册登录页面
实现注册登录功能,参考效果 http://47.93.11.179/test/register.jsp,不要求效果完全一样,自由发挥即可。附件是工程目录,包含了注册和登录的两个页面及素材,可直接导入使用(启动外面浏览器访问)。功能实现好再提交,作业提供截图及代码。提前建好表user,包含userid(主键)和userpwd两个字段。(1)注册(2分),用js验证:用户名不为空,密码不能小于6位。另外注册时,用户名重复要给出提示。(2)登录(2分),先用js验证:用户名不为空,密码不能小于6位。
服务器体验版本:
https://yuheng.tech:8080/test11/register.jsp
大概长这样
@author:于衡
@time:2019/4/20 04:23
核心代码:
注册页核心代码 register.jsp: 1. <script type="text/javascript"> 2. function check(){ 3. if(checkAll()){ 4. document.getElementById("form1").submit(); 5. return true; 6. }else return false; 7. } 8. function checkAll() { 9. var name = document.getElementById("user").value; 10. var pwd1 = document.getElementById("pwd").value; 11. var pwd2 = document.getElementById("rpwd").value; 12. //用户名检验 13. var namePattern = /^[a-zA-Z0-9_-]{4,16}$/;//4到16位(字母,数字,下划线,减号) 14. if(name==''||name==null||!namePattern.test(name)) 15. { 16. alert("用户名不够规范。\r\n要求长度4到16位且只能由字母,数字,下划线,短横线构成"); 17. return false; 18. } 19. //密码验证 20. if (pwd1==''||pwd1==null) 21. { 22. alert("密码为空"); 23. return false; 24. } 25. if (pwd1!=pwd2) 26. { 27. alert("两次密码不一致"); 28. return false; 29. } 30. //正则验证密码强度 31. if(checkPassword(pwd1)) return true; 32. else return false; 33. } 34. function checkPassword(str){ 35. var Pattern1 = /([a-zA-Z0-9!@#$%^&*()_?<>{}]){8,18}/; 36. var Pattern4 = /[!@#$%^&*()_?<>{}]{1,}/; 37. var warning4= "建议密码包含一个以上的特殊字符\r\n特殊字符包括!@#$%^&*()_?<>{}\r\n"; 38. var Pattern2 = /[a-zA-Z]+/; 39. var Pattern3 = /[0-9]+/; 40. if(Pattern1.test(str) && Pattern2.test(str) && Pattern3.test(str) && Pattern4.test(str)){ 41. return true; 42. } 43. if(!Pattern1.test(str)){ 44. alert("长度必须在8-18位"); 45. return false; 46. } 47. if(!Pattern2.test(str)){ 48. alert("必须含有字母"); 49. return false; 50. } 51. if(!Pattern3.test(str)){ 52. alert("必须含有数字"); 53. return false; 54. } 55. if(!Pattern4.test(str)){ 56. if(confirm("弱密码警告\r\n"+warning4+"仍然要使用输入的弱密码么?")) 57. return true; 58. else return false; 59. } 60. } 61. </script>
数据库登记用户 insert_stu.jsp 1. <body> 2. <% 3. Connection conn = null; 4. String sql; 5. String url = "???" ; 6. String username = "???"; 7. String password = "???" ; 8. try { 9. Class.forName("com.mysql.cj.jdbc.Driver"); 10. } catch (ClassNotFoundException e) { 11. System.out.println("没有成功加载MySQL驱动程序"); 12. }// 动态加载mysql驱动 13. System.out.println("成功加载MySQL驱动程序"); 14. conn = DriverManager.getConnection(url,username,password); 15. try{ 16. String sql1="insert into user values(?,?)";//准备sql语句,?是占位符,内容待定 17. PreparedStatement pst1=conn.prepareStatement(sql1);//创建封装语句的对象 18. String name = request.getParameter("account"); 19. String pwd = request.getParameter("password"); 20. pst1.setString(1,name); 21. pst1.setString(2,pwd); 22. pst1.executeUpdate(); 23. pst1.close(); 24. %> 25. <script> 26. alert("注册成功,可以登录啦"); 27. window.location.href='login.jsp'; 28. </script> 29. <% 30. } 31. catch(Exception e)//因为userid作为数据库的主键是不允许重复的,所以用户名被注册可以使用try catch解决 32. { 33. %> 34. <script> 35. alert("注册失败,用户名重复"); 36. window.location.href='register.jsp'; 37. </script> 38. <% 39. } 40. %>
登录页核心代码login.jsp: 1. <script> 2. function check(){ 3. if(checkAll()){ 4. document.getElementById("form1").submit(); 5. return true; 6. }else return false; 7. } 8. function checkAll() { 9. var name = document.getElementById("account").value; 10. var pwd = document.getElementById("password").value; 11. //用户名检验 12. var namePattern = /^[a-zA-Z0-9_-]{4,16}$/;//4到16位(字母,数字,下划线,减号) 同时禁止使用#渗透 13. if(name==''||name==null||!namePattern.test(name)) 14. { 15. alert("用户名打错了嘛?"); 16. return false; 17. } 18. //密码验证 19. if (pwd==''||pwd==null||!checkPassword(pwd)) 20. { 21. alert("密码打错啦?"); 22. return false; 23. } 24. return true; 25. } 26. //正则密码合法性验证函数 27. function checkPassword(str){ 28. var Pattern1 = /([a-zA-Z0-9!@#$%^&*()_?<>{}]){8,18}/; 29. var Pattern2 = /[a-zA-Z]+/; 30. var Pattern3 = /[0-9]+/; 31. if(Pattern1.test(str) && Pattern2.test(str) && Pattern3.test(str)) 32. return true; 33. else return false; 34. } 35. 36. </script>
数据库验证代码 Log_check.jsp: 1. <body> 2. <% 3. 4. Connection conn = null; 5. String sql; 6. String url = "jdbc:mysql://localhost:3306/yuheng?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai" ; 7. String username = "???"; 8. String password = "???" ; 9. try { 10. Class.forName("com.mysql.cj.jdbc.Driver"); 11. } catch (ClassNotFoundException e) { 12. System.out.println("没有成功加载MySQL驱动程序"); 13. }// 动态加载mysql驱动 14. System.out.println("成功加载MySQL驱动程序"); 15. conn = DriverManager.getConnection(url,username,password); 16. try{ 17. String name = request.getParameter("account"); 18. String pwd = request.getParameter("password"); 19. String sql1="select * from user where userid=?"; 20. PreparedStatement pst1=conn.prepareStatement(sql1); 21. pst1.setString(1, name); 22. ResultSet rs= pst1.executeQuery();//查询结果返回到ResultSet中 23. if(rs.next()){ 24. if(rs.getString(1).equals(name) && rs.getString(2).equals(pwd)) 25. { 26. out.print("<script>alert(\"登录成功啦\");</script>"); 27. %><jsp:forward page="success.jsp"></jsp:forward> <% 28. //采用转发,网址不改变,一定程度上保护安全 29. } 30. else { 31. out.print("<script>alert(\"密码错误\");</script>"); 32. %><jsp:forward page='login.jsp'></jsp:forward><% 33. } 34. } 35. else out.print("<script><jsp:forward page='login.jsp'>;alert(\"没有这个账号\");</script>"); 36. rs.close();//关闭结果集 37. pst1.close(); 38. } 39. catch(Exception e) 40. { 41. out.print("<script>alert(\"未知错误\");</script>"); 42. } 43. %> 44. </body>
登陆成功页面 1. <h1 align="center">这是登录成功页面</h1> 2. <% 3. Connection conn = null; 4. String sql; 5. String url = "jdbc:mysql://localhost:3306/yuheng?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai" ; 6. String username = "???"; 7. String password = "???" ; 8. String names=""; 9. try { 10. Class.forName("com.mysql.cj.jdbc.Driver"); 11. } catch (ClassNotFoundException e) { 12. System.out.println("没有成功加载MySQL驱动程序"); 13. }// 动态加载mysql驱动 14. System.out.println("成功加载MySQL驱动程序"); 15. conn = DriverManager.getConnection(url,username,password); 16. try{ 17. String sqlcount="select count(*) from user"; 18. PreparedStatement pstcount=conn.prepareStatement(sqlcount); 19. ResultSet rs1= pstcount.executeQuery();//查询结果返回到ResultSet中 20. int i=1; 21. if(rs1.next()){ 22. out.print("<br><h2 align='center'>本页面共有"+rs1.getString(1)+"人注册<br>以下是已经注册的用户名:</h2><br>"); 23. } 24. rs1.close();//关闭结果集 25. pstcount.close(); 26. %> 27. <div align="center"> 28. <% 29. 30. String sql1="select * from user"; 31. PreparedStatement pst1=conn.prepareStatement(sql1); 32. ResultSet rs= pst1.executeQuery();//查询结果返回到ResultSet中 33. int num=1; 34. while(rs.next()){ 35. names+=(num+++": "+rs.getString(1)); 36. if(num%5==0) names+="<br>"; 37. else names+=" "; 38. } 39. out.print("<h3>"+names+"</h3>"); 40. rs.close();//关闭结果集 41. pst1.close(); 42. %> 43. </div> 44. <% 45. } 46. catch(Exception e) 47. { 48. out.print("<script>alert(\"未知错误\");</script>"); 49. } 50. %>