# 实验3 **Repository Path**: lirisheng/experiment_3 ## Basic Information - **Project Name**: 实验3 - **Description**: 使用Java EE(servlet+JSP)实现本地登录以及第三方登录,完成个人信息的注册以及个人信息展示等功能 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-05-19 - **Last Updated**: 2024-06-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### <>课程实验报告 院(系)名称:网络空间安全学院 专业班级: 17软件工程1班 学号:201741412101 姓名:黎日升 实验题目:实验3 JSP编程 实验日期:2019/4/19 实验(上机)学时: 2 成绩: 一、实验内容、要求 在实验2的jsp页面的基础上,实现用户注册/登录模块各项的业务逻辑功能: 1. 启动首页为用户登录页,本地账号登录或莞工中央认证登录成功后,返回用户中心。 2. 如果用户还没有用户名和密码,则请他/她先进行注册,注册信息写入一个文本文件中,注册成功后直接回到用户中心。 3. 把存取用户名/密码及验证用户名/密码都放在一个JavaBean中,在bean中对用户的合法性进行验证。 4. 登录不成功则返回登录页面,提示用户名不存在或密码错误。 5. 如果用户选择莞工中央认证登录,则使用“工号”自动创建一个本地账号,密码预设为“123456”,并把莞工中央认证与本地账号关联。 6. 任何页面发生错误时,请导向error.jsp。 7. 使用JavaBean,实现下面的业务功能: a. 上传自己的照片。(照片保存在本地文件系统) b. 查看用户信息 二、所采用的Java EE技术规范 1. JSP:Java Server Pages 2. Servlet 三、实验的主要模块及其功能 **1.注册模块:** **功能:能够实现注册账号的功能,把注册的信息写入文本文件中,并且能注册成功后返回用户界面,在注册时,会检测注册的信息是否合法(如,是否注册过,密码用户名不为空)** _注册页面jsp的逻辑:_ ``` <% request.setCharacterEncoding("utf-8"); String txtMsg = request.getParameter("username"); String txtMsg1 = request.getParameter("password1"); String txtMsg2 = request.getParameter("password2"); String t1=""; boolean a=(txtMsg1!=null); boolean b=(txtMsg!=null); if((txtMsg!=null)||(txtMsg1!=null)){ if(txtMsg1.equals(txtMsg2)){ boolean flag=s1.Judge(txtMsg,txtMsg1); //判断有没有这个用户名 if(flag){ %> <% } else{ //在这里写一个register的javabean,用来写入数据 boolean flag1= s2.Write(txtMsg,txtMsg1); if(flag1){ session.setAttribute("usename","sd"); session.setAttribute("url","login.jsp"); session.setAttribute("username",txtMsg); response.sendRedirect("individual.jsp"); } } } else{ %> <% } } else{ %> <% } %> ``` _检测用户信息是否存在(javabean实现):_ 代码: ``` public boolean Judge(String username,String password){ File fread = new File("Student.txt"); int flag=0; try { Reader in =new FileReader(fread); BufferedReader bufferRead =new BufferedReader(in); String str=null; String[] massege; while((str=bufferRead.readLine())!=null){ massege=str.split(","); if(massege[0].equals(username)&&massege[1].equals(password)){ flag=1; break; } } bufferRead.close(); in.close(); } catch(IOException e){ System.out.println(e.toString()); } if(flag==1) { return true; } else return false; } ``` _把注册信息写入文件中(javabean实现):_ 代码: ``` public boolean Write(String username,String password){ int flag=0; try { Writer out =new FileWriter("Student.txt",true); BufferedWriter bufferWrite =new BufferedWriter(out); String str=username+","+password+","+""+","+""+","+""+","+""+","+""+","+"t3.jpg"; bufferWrite.write(str); bufferWrite.newLine(); flag=1; bufferWrite.close(); out.close(); } catch(IOException e){ System.out.println(e.toString()); } if(flag==1) { return true; } else return false; } ``` **2.登陆模块:** **功能:实现登陆功能,能同时支持本地登陆和第三方登陆,在登陆时能检测登陆的信息是否合法,合法时,即跳转到用户界面** _登陆界面jsp的逻辑实现:_ 代码: ``` <% request.setCharacterEncoding("utf-8"); String txtMsg = request.getParameter("username"); String txtMsg1 = request.getParameter("password"); session.setAttribute("usename",null); if((txtMsg!=null)&&(txtMsg1!=null)){ boolean flag=s1.Judge(txtMsg,txtMsg1); if(flag){ session.setAttribute("usename","sd"); session.setAttribute("url","login.jsp"); session.setAttribute("username",txtMsg); response.sendRedirect("individual.jsp"); } %> <% } %> ``` _检测本地的账户信息是否合法:_ 代码: ``` public boolean Judge(String username,String password){ File fread = new File("Student.txt"); int flag=0; try { Reader in =new FileReader(fread); BufferedReader bufferRead =new BufferedReader(in); String str=null; String[] massege; while((str=bufferRead.readLine())!=null){ massege=str.split(","); if(massege[0].equals(username)&&massege[1].equals(password)){ flag=1; break; } } bufferRead.close(); in.close(); } catch(IOException e){ System.out.println(e.toString()); } if(flag==1) { return true; } else return false; } ``` **3.用户界面模块:** **功能:展示用户的信息,并且提供信息编辑功能以及上传图片功能,并且把这些信息永久保存在文本中,并且其逻辑检测中能够对第三方登陆的账号创建相应的本地账号** _用户界面的jsp逻辑:_ 代码: ``` <% String value=(String)session.getAttribute("usename"); String value1=(String)session.getAttribute("username"); String url=(String)session.getAttribute("url") String login1; if(value==null) { login1="登陆";%>

你没有登陆,请您登陆

<% } else { login1 = "退出"; value1=s2.Connect(value1); s1.Read(value1); String username =s1.getUsername(); String postbox=s1.getPostbox(); String fname=s1.getFname(); String sname=s1.getSname(); String department=s1.getDepartment(); String object=s1.getObject(); String pourl="images/"; pourl=pourl+s1.getUrl(); %> ``` _读取用户信息(javabean):_ 代码: ``` public void Read(String username){ File fread = new File("Student.txt"); try { Reader in =new FileReader(fread); BufferedReader bufferRead =new BufferedReader(in); String str=null; String[] massege; while((str=bufferRead.readLine())!=null){ massege=str.split(","); if(massege[0].equals(username)){ this.username=massege[0]; this.password=massege[1]; this.postbox=massege[2]; this.fname=massege[3]; this.sname=massege[4]; this.department=massege[5]; this.object=massege[6]; this.url=massege[7]; break; } } bufferRead.close(); in.close(); } catch(IOException e){ System.out.println(e.toString()); } } ``` _用户上传照片的功能:_ Servle处理表单信息: ``` protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(); request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); Part part = request.getPart("file"); String username = request.getParameter("username"); String url = request.getParameter("url"); System.out.println(username);//输出的是正确的传值 String fileName = part.getSubmittedFileName(); System.out.println("上传文件的文件名: " + fileName); part.write(fileName); EditPoBean editpo = new EditPoBean(); editpo.writeFile(editpo.readFileContent(username,fileName)); session.setAttribute("username",username); session.setAttribute("usename","usename"); session.setAttribute("url",url); response.sendRedirect("http://localhost:8080/individual.jsp"); } ``` 把照片的地址存入文本文件中: 由于过多的代码,略 _编辑功能:实现对信息的编辑_ Js代码: ``` function change(){ document.getElementById('b').innerHTML=""; document.getElementById('c').innerHTML=""; document.getElementById('d').innerHTML=""; document.getElementById('e').innerHTML="" document.getElementById('f').innerHTML="" document.getElementById('g').innerHTML=""; } function submit(){ var b=document.getElementById('b1').value; var c=document.getElementById('c1').value; var d=document.getElementById('d1').value; var e=document.getElementById('e1').value; var f=document.getElementById('f1').value; var h=<%=(String)session.getAttribute("username")%> var i="<%=(String)session.getAttribute("url")%>" var e="postbox="+b+"&fname="+c+"&sname="+d+"&department="+e+"&object="+f+"&username="+h+"&url="+i; window.location.href="/login/Edit?"+e; } ``` 把信息提交到servlet并写入文件: 代码:略 **4.绑定模块:** **功能:能够为第三方登陆的账户实现本地的账户的绑定,即建立相应的本地账户** 代码: ``` public void Build(String username){ int flag=0; try { Writer out =new FileWriter("Student.txt",true); BufferedWriter bufferWrite =new BufferedWriter(out); // String str=username+","+"123456,"+"t3.jpg"; String str=username+","+"123456"+","+""+","+""+","+""+","+""+","+""+","+"t3.jpg"; bufferWrite.write(str); bufferWrite.newLine(); flag=1; bufferWrite.close(); out.close(); } catch(IOException e){ System.out.println(e.toString()); } } ``` **5.error模块:** **功能: 任何页面发生错误时,请导向error.jsp** 代码:略 四、程序运行时的输入数据/输出结果 **注册页面:注册账户** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/203833_df6a7b0d_4840718.png "屏幕截图.png") **注册成功后,个人展示页面** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/203943_3a72793b_4840718.png "屏幕截图.png") **上传图片功能** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204020_9ed7a06f_4840718.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204045_c23833aa_4840718.png "屏幕截图.png") **编辑功能** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204210_3292aad6_4840718.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204227_4c9befbd_4840718.png "屏幕截图.png") **退出,跳转会登录** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204247_344a2d1d_4840718.png "屏幕截图.png") **本地登录** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204306_9ac3c84d_4840718.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204337_273a0b90_4840718.png "屏幕截图.png") **第三方登录** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204422_1eef4a69_4840718.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204449_10fcc2ee_4840718.png "屏幕截图.png") **文本文件的信息** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0526/204524_639c2845_4840718.png "屏幕截图.png")