• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

通过Java Script 和Servlet实现简易的登录注册页面

武飞扬头像
SmashDreams
帮助1

这是一道大学Web开发技术课程中的课程作业:

实现一个简单的企业会员注册和登录功能。具体要求如下: (1)注册页面register.html包括用户名、密码、姓名、性别、邮箱、手机号等信息,要求对所有字段进行非空判断,密码为数字、字母和特殊字符的组合(不少于8位),对邮箱和手机号进行有效性判断,否则弹出对话框进行提示。注册信息处理由映射地址为register.do的RegisterServlet.java进行处理,将所有用户注册的登录名、密码、姓名、性别、邮箱、手机号等信息按行保存到userinfo.txt中,每个字段用“|”分隔,要求将密码以SHA256加密(可用JDK自带的java.security.MessageDigest实现)后写入文件,userinfo.txt文件格式如下: 如果当前注册的用户名不与已注册的用户名冲突,则提示“注册成功”,5秒后自动跳转或有超链接至登录页面,否则提示“你的用户名已被注册,请返回重新注册”。

(2)登录页面login.html。用户登录页面需判断用户名或密码是否为空,登录成功与否由映射地址为login.do的LoginServlet.java处理,该Servlet从userinfo.txt查询判断用户名与密码是否一致,如果一致则跳转至欢迎页面welcome.html提示“登录成功!”,否则跳转至失败页面failed.html提示“用户名或密码错误,请重新登录”,其中“重新登录”为超链接,可以跳转至登录页面login.html。

userinfo.txt的格式:学新通

 登录界面:学新通注册界面:学新通

 以下是基于本题的代码,html主题模块不提供注释,Java Script和Servlet提供注释:

  1.  
    //登录界面
  2.  
    <html>
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>51job的会员登陆界面</title>
  6.  
    <script language="JavaScript" type="text/javascript">
  7.  
    function custCheck() {
  8.  
    var userName = document.getElementById("userName");
  9.  
    var password = document.getElementById("password");
  10.  
    //用户名判空
  11.  
    if (userName.value == "" || userName.value == "请输入用户名") {
  12.  
    alert("用户名不能为空!");
  13.  
    return false;
  14.  
    //密码判空
  15.  
    } else if (password.value == "" || password.value == "请输入密码") {
  16.  
    alert("密码不能为空!");
  17.  
    return false;
  18.  
    }
  19.  
    return true;
  20.  
    }
  21.  
    </script>
  22.  
    </head>
  23.  
    <style>
  24.  
    .div1{
  25.  
    position: fixed;
  26.  
    width: 200px;
  27.  
    height: 150px;
  28.  
    top:30%;
  29.  
    left: 43%;
  30.  
    /*margin-top: -75px;*/
  31.  
    /*margin-left:-100px ;*/
  32.  
    }
  33.  
    </style>
  34.  
    <body>
  35.  
    <div class="div1">
  36.  
    <form action="login.do" method="post" onsubmit="return custCheck()">
  37.  
    <table style="border: 1px solid #0000FF;" rules=none cellspacing=0 width=340 align=center >
  38.  
    <tr height=40>
  39.  
    <td colspan=2>
  40.  
    <h2 align=center>
  41.  
    <font color=blue>企业会员登录</font>
  42.  
    </h2>
  43.  
    </td>
  44.  
    </tr>
  45.  
    <tr height=40>
  46.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  47.  
    <td width=240><input style="width: 95%; height: 25px;"
  48.  
    type="text" value="请输入用户名"
  49.  
    onFocus="if(value==defaultValue){value='';this.style.color='#000'}"
  50.  
    onBlur="if(!value){value=defaultValue; this.style.color='#999'}"
  51.  
    style="color: #999" name="userName" id="userName"></td>
  52.  
    </tr>
  53.  
    <tr height=40>
  54.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  55.  
    <td width=240><input style="width: 95%; height: 25px;"
  56.  
    type="text" value="请输入密码"
  57.  
    onFocus="if(value==defaultValue){value='';this.style.color='#000'}"
  58.  
    onBlur="if(!value){value=defaultValue; this.style.color='#999'}"
  59.  
    style="color: #999" name="password" id="password"></td>
  60.  
    </tr>
  61.  
    <tr height=40>
  62.  
    <td height=40 colspan=2 align=center>
  63.  
    <input type="image" src="login.png" name="img" />
  64.  
    </td>
  65.  
    </tr>
  66.  
    <tr height=40>
  67.  
    <td height=40 colspan=2 align=right>没有帐号?
  68.  
    <a href="register.html" style='text-decoration: none;'>
  69.  
    <font color=red>免费注册&nbsp;&nbsp;&nbsp;</font></a>
  70.  
    </td>
  71.  
    </tr>
  72.  
    </table>
  73.  
    </form>
  74.  
    </div>
  75.  
    </body>
  76.  
    </html>
  1.  
    //注册界面
  2.  
    <html>
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>51job的会员登陆界面</title>
  6.  
    </head>
  7.  
    <script language="JavaScript" type="text/javascript">
  8.  
    function custCheck() {
  9.  
    var userName = document.getElementById("userName");
  10.  
    var password = document.getElementById("password");
  11.  
    var name=document.getElementById("name");
  12.  
    var mail=document.getElementById("mail");
  13.  
    var tel=document.getElementById("tel");
  14.  
    var sex=document.getElementsByName("sex");
  15.  
    var pattern=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^[0−9]3,4[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/; //验证电话号码的正则表达式
  16.  
    var reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*.-]).{8,}$/;//对于密码格式的正则表达式,需求为数字,大小写字母和特殊字符
  17.  
     
  18.  
    var emailRegExp=/^\w ([- .]\w )*@\w ([-.]\w )*\.\w ([-.]\w )*$/;//验证邮箱的正则表达式
  19.  
    //判空和手机号、邮箱、密码的合法性判别
  20.  
    if (userName.value == "" || userName.value == "请输入您的用户名") {
  21.  
    alert("用户名不能为空!");
  22.  
    return false;
  23.  
    } else if (password.value == "" || password.value == "请输入您的密码") {
  24.  
    alert("密码不能为空!");
  25.  
    return false;
  26.  
    }else if (name.value == "" || name.value == "请输入您的姓名"){
  27.  
    alert("姓名不能为空!");
  28.  
    return false;
  29.  
    }else if(mail.value == "" || mail.value == "请输入您的邮箱"){
  30.  
    alert("邮箱不能为空!");
  31.  
    return false;
  32.  
    }else if (tel.value == "" || tel.value == "请输入您的手机号"){
  33.  
    alert("手机号不能为空!");
  34.  
    return false;
  35.  
    }else if(!emailRegExp.test(mail.value)){
  36.  
    alert("邮箱格式不合法");
  37.  
    return false;
  38.  
    }else if(!pattern.test(tel.value.replace(/\s /g,'').replace(/-/g,'')) ){
  39.  
    alert("手机号不合法");
  40.  
    return false;
  41.  
    }else if(!reg.test(password.value)){
  42.  
    alert("密码为数字、大小写字母和特殊字符的组合(不少于8位)");
  43.  
    return false;
  44.  
    }
  45.  
    //试验代码
  46.  
    // for(var i=0;i<sex.length;i ){
  47.  
    // if(sex[i].checked==true){
  48.  
    // break;
  49.  
    // }
  50.  
    // if(i==sex.length-1){
  51.  
    // alert("性别不能为空!");
  52.  
    // return false;
  53.  
    // }
  54.  
    // }
  55.  
    if(sex[0].checked != true && sex[1].checked != true){
  56.  
    alert("性别不能为空!");
  57.  
    return false;
  58.  
    }
  59.  
    return true;
  60.  
    }
  61.  
    </script>
  62.  
    <style>
  63.  
    .div1{
  64.  
    position: fixed;
  65.  
    width: 200px;
  66.  
    height: 150px;
  67.  
    top:30%;
  68.  
    left: 43%;
  69.  
    }
  70.  
    </style>
  71.  
    <body>
  72.  
    <div class="div1">
  73.  
    <form action="register.do" method="post" onsubmit="return custCheck()">
  74.  
    <table style="border: 1px solid #0000FF;" rules=none cellspacing=0 width=340 align=center >
  75.  
    <tr height=40>
  76.  
    <td colspan=2>
  77.  
    <h2 align=center>
  78.  
    <font color=blue>用户注册</font>
  79.  
    </h2>
  80.  
    </td>
  81.  
    </tr>
  82.  
    <tr height=40>
  83.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  84.  
    <td width=240><input style="width: 95%; height: 25px;"
  85.  
    type="text" value="请输入您的用户名"
  86.  
    onFocus="if(value==defaultValue){value='';this.style.color='#000'}"
  87.  
    onBlur="if(!value){value=defaultValue; this.style.color='#999'}"
  88.  
    style="color: #999" name="userName" id="userName"></td>
  89.  
    </tr>
  90.  
    <tr height=40>
  91.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  92.  
    <td width=240><input style="width: 95%; height: 25px;"
  93.  
    type="text" value="请输入您的密码"
  94.  
    onFocus="if(value==defaultValue){value='';this.style.color='#000'}"
  95.  
    onBlur="if(!value){value=defaultValue; this.style.color='#999'}"
  96.  
    style="color: #999" name="password" id="password"></td>
  97.  
    </tr>
  98.  
    <tr height=40>
  99.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  100.  
    <td width=240><input style="width: 95%; height: 25px;"
  101.  
    type="text" value="请输入您的姓名"
  102.  
    onFocus="if(value==defaultValue){value='';this.style.color='#000'}"
  103.  
    onBlur="if(!value){value=defaultValue; this.style.color='#999'}"
  104.  
    style="color: #999" name="name" id="name"></td>
  105.  
    </tr>
  106.  
    <tr height=40>
  107.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  108.  
    <td>
  109.  
    <div>
  110.  
    <input type="radio" name="sex" value="男" >
  111.  
    <input type="radio" name="sex" value="女" >
  112.  
    </div>
  113.  
    </td>
  114.  
    </tr>
  115.  
    <tr height=40>
  116.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  117.  
    <td width=240><input style="width: 95%; height: 25px;"
  118.  
    type="text" value="请输入您的邮箱"
  119.  
    onFocus="if(value==defaultValue){value='';this.style.color='#000'}"
  120.  
    onBlur="if(!value){value=defaultValue; this.style.color='#999'}"
  121.  
    style="color: #999" name="mail" id="mail"></td>
  122.  
    </tr>
  123.  
    <tr height=40>
  124.  
    <td height=40 align=right width=80>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  125.  
    <td width=240><input style="width: 95%; height: 25px;"
  126.  
    type="text" value="请输入您的手机号"
  127.  
    onFocus="if(value==defaultValue){value='';this.style.color='#000'}"
  128.  
    onBlur="if(!value){value=defaultValue; this.style.color='#999'}"
  129.  
    style="color: #999" name="tel" id="tel"></td>
  130.  
    </tr>
  131.  
    <tr height=40>
  132.  
    <td height=40 colspan=2 align=center>
  133.  
    <input type="image" src="login.png" name="img" />
  134.  
    </td>
  135.  
    </tr>
  136.  
    </table>
  137.  
    </form>
  138.  
    </div>
  139.  
    </body>
  140.  
    </html>

以下是两个主体的Servlet,具体跳转界面不提供:

RegisterServlet:

  1.  
    import jakarta.servlet.*;
  2.  
    import jakarta.servlet.http.*;
  3.  
    import jakarta.servlet.annotation.*;
  4.  
    import org.apache.commons.codec.binary.Hex;
  5.  
     
  6.  
    import java.io.*;
  7.  
    import java.nio.charset.StandardCharsets;
  8.  
    import java.security.MessageDigest;
  9.  
    import java.security.NoSuchAlgorithmException;
  10.  
     
  11.  
    @WebServlet("/register.do")
  12.  
    public class RegisterServlet extends HttpServlet {
  13.  
    @Override
  14.  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15.  
    request.setCharacterEncoding("UTF-8");
  16.  
    response.setContentType("text/html;charset=UTF-8");
  17.  
     
  18.  
    String userName=request.getParameter("userName");
  19.  
    String password=request.getParameter("password");
  20.  
    String name=request.getParameter("name");
  21.  
    String mail=request.getParameter("mail");
  22.  
    String tel=request.getParameter("tel");
  23.  
    String[] sex=request.getParameterValues("sex");
  24.  
     
  25.  
    PrintWriter out=response.getWriter();
  26.  
    out.println("<html><head>");
  27.  
    out.println("<title>注册</title>");
  28.  
    out.println("</head><body>");
  29.  
    out.println("<h4>注册中……</h4>");
  30.  
    out.println("</body></html>");
  31.  
     
  32.  
    File file = new File("C:/Users/16287/IdeaProjects/登录注册/src/userinfo.txt");
  33.  
    InputStreamReader isr = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
  34.  
    BufferedReader br = new BufferedReader(isr);
  35.  
    //利用MessageDigest进行的SHA256加密
  36.  
    String temp;
  37.  
    MessageDigest messageDigest;
  38.  
    String encodeStr = "";
  39.  
    try {
  40.  
    messageDigest = MessageDigest.getInstance("SHA-256");
  41.  
     
  42.  
    byte[] hash = messageDigest.digest(password.getBytes("UTF-8"));
  43.  
     
  44.  
    encodeStr = Hex.encodeHexString(hash);//利用了Apache工具包里的Hex进制转换函数
  45.  
    } catch (NoSuchAlgorithmException e) {
  46.  
    e.printStackTrace();
  47.  
    }
  48.  
    boolean judge;
  49.  
    judge=true;
  50.  
    while((temp=br.readLine())!=null){
  51.  
    String s[]=temp.split("\\|");
  52.  
    if(userName.equals(s[0])){
  53.  
    judge=false;
  54.  
    response.setHeader("Refresh","3;URL=regfailed.html");//注册失败跳转
  55.  
    }
  56.  
    }
  57.  
    if(judge){
  58.  
    BufferedWriter bw= new BufferedWriter(new FileWriter(file, true));
  59.  
    String content;
  60.  
    content=userName "|" encodeStr "|" name "|" sex[0] "|" mail "|" tel;//写入userinfo.txt的字符串
  61.  
    bw.write(content);
  62.  
    bw.newLine();
  63.  
    bw.close();
  64.  
    response.setHeader("Refresh","3;URL=refresh.html");//注册成功跳转登录页面的中转网站
  65.  
    }
  66.  
    }
  67.  
     
  68.  
    @Override
  69.  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  70.  
    doGet(request,response);
  71.  
    }
  72.  
    }

LoginServlet:

  1.  
    import java.nio.charset.StandardCharsets;
  2.  
    import java.security.MessageDigest;
  3.  
    import java.security.NoSuchAlgorithmException;
  4.  
     
  5.  
    @WebServlet("/login.do")
  6.  
    public class LoginServlet extends HttpServlet {
  7.  
    @Override
  8.  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  9.  
    request.setCharacterEncoding("UTF-8");
  10.  
    response.setContentType("text/html;charset=UTF-8");
  11.  
     
  12.  
    PrintWriter out=response.getWriter();
  13.  
    out.println("<html><head>");
  14.  
    out.println("<title>登录</title>");
  15.  
    out.println("</head><body>");
  16.  
    out.println("<h4>登录中……</h4>");
  17.  
    out.println("</body></html>");
  18.  
     
  19.  
    String userName=request.getParameter("userName");
  20.  
    String password=request.getParameter("password");
  21.  
    String temp;
  22.  
    MessageDigest messageDigest;
  23.  
    String encodeStr = "";
  24.  
    File file = new File("C:/Users/16287/IdeaProjects/登录注册/src/userinfo.txt");
  25.  
    InputStreamReader isr = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
  26.  
    BufferedReader br = new BufferedReader(isr);
  27.  
    //通过直接对输入密码加密和userinfo.txt内部的已加密代码的比较判断密码输入是否正确
  28.  
    try {
  29.  
    messageDigest = MessageDigest.getInstance("SHA-256");
  30.  
     
  31.  
    byte[] hash = messageDigest.digest(password.getBytes("UTF-8"));
  32.  
     
  33.  
    encodeStr = Hex.encodeHexString(hash);
  34.  
    } catch (NoSuchAlgorithmException e) {
  35.  
    e.printStackTrace();
  36.  
    }
  37.  
    while((temp=br.readLine())!=null){
  38.  
    String s[]=temp.split("\\|");
  39.  
    if(userName.equals(s[0])){
  40.  
    if(encodeStr.equals(s[1])){
  41.  
    response.setHeader("Refresh","3,welcome.html");//登录成功,进入welcome界面
  42.  
    }else{
  43.  
    response.setHeader("Refresh","3,failed.html");//登录失败,提示重新登录
  44.  
    }
  45.  
    }
  46.  
    }
  47.  
    }
  48.  
     
  49.  
    @Override
  50.  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  51.  
    doGet(request,response);
  52.  
    }
  53.  
    }

具体实现界面不具备提供,题目的所有要求已经完成,因为使用了web4.0所以不提供非注释映射,web.xml没有进行解释,如有需要可以自行进行。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghachg
系列文章
更多 icon
同类精品
更多 icon
继续加载