# Experiment3JavaBean **Repository Path**: bothin/Experiment3JavaBean ## Basic Information - **Project Name**: Experiment3JavaBean - **Description**: 【JavaEE实验】 javaBean的基础语法 Ajax 异步检测表单数据 jQuery基本用法 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-23 - **Last Updated**: 2021-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 实验内容、要求 *在实验2的jsp页面的基础上,实现用户注册/登录模块各项的业务逻辑功能: 1. 启动首页为用户登录页,本地账号登录或莞工中央认证登录成功后,返回用户中心。 2. 如果用户还没有用户名和密码,则请他/她先进行注册,注册信息写入一个文本文件中,注册成功后直接回到用户中心。 3. 把存取用户名/密码及验证用户名/密码都放在一个JavaBean中,在bean中对用户的合法性进行验证。 4. 登录不成功则返回登录页面,提示用户名不存在或密码错误。 5. 如果用户选择莞工中央认证登录,则使用“工号”自动创建一个本地账号,密码预设为“123456”,并把莞工中央认证与本地账号关联。 6. 任何页面发生错误时,请导向error.jsp。 7. 使用JavaBean,实现下面的业务功能:
1. 上传自己的照片。(照片保存在本地文件系统)
2. 查看用户信息 ### 采用的Java EE技术规范 * JSP的基础语法 * javaBean的基础语法 * Ajax 异步检测表单数据 * jQuery基本用法 ### 运行该项目的流程 * http://localhost:8080/index.jsp ![adsf](img/index.png) * 点击注册 ![adsf](img/register.png) ![adsf](img/registered.png) * 注册成功的页面 ![adsf](img/info.png) * 点击头像进行上传头像 ![adsf](img/uploadImg.png) * 点击修改信息按钮 ![adsf](img/change.png) * 点击绑定信息按钮 ![adsf](img/bind.png) ![adsf](img/changed.png) * 保存用户数据文本 ![adsf](img/txtInfo.png) ### 文件介绍 * index.jsp (首页) 利用session负责界面的登陆以及登出,若已登录,则显示登出按钮,以及登陆的用户信息,反之则相反 * userInfo.txt 保存用户注册信息 * loginServlet.java 增加的内容 如果用户选择莞工中央认证登录,则使用“工号”自动创建一个本地账号,密码预设为“123456”,并把莞工中央认证与本地账号关联。 ```java //如果用户选择莞工中央认证登录,则使用“工号”自动创建一个本地账号,密码预设为“123456” LocalUserInfo LocalUser = new ReadFile().find(user.getUsername()); if(LocalUser==null){ //本地没有该工号的用户 LocalUserInfo localUserInfo = new LocalUserInfo(user.getUsername(),user.getName(),null,null,"123456","boy.png",user.getFaculty_title(),user.getGroup(),null,null,null); String userJson =jsonb.toJson(localUserInfo); new ReadFile().setUserInfo(userJson); //保存信息进userInfo文件 } ``` * checkInput_Ajax.js 处理注册时的一些异步查询操作 ```javascript $(document).ready(function(){ console.log("hello"); $('input[name="phone_number"]').blur(function () { var phone_number = $(this).val(); if(phone_number.length != 11){ $("#s_0").html("号码输入错误!!!"); return; }else { $("#s_0").html(""); } $.get("/checkInfo",{phone_number:phone_number},function (data) { var span = $("#s_0"); var flag = data.exsit; if(flag==1){ span.css("color","red"); span.html("该号码已经被注册"); }else{ span.css("color","green"); span.html("号码可注册") } }); }); $('input[name="email"]').blur(function () { var email = $(this).val(); $.get("/checkInfo",{email:email},function (data) { var span = $("#s_1"); var flag = data.exsit; if(flag==1){ span.css("color","red"); span.html("该邮箱已经被注册"); }else{ span.css("color","green"); span.html("邮箱可注册") } }); }); $('input[name="name"]').blur(function () { var name = $(this).val(); $.get("/checkInfo",{name:name},function (data) { var span = $("#s_2"); var flag = data.exsit; if(flag==1){ span.css("color","red"); span.html("该用户名太受欢迎啦!请换一个"); }else{ span.css("color","green"); span.html("用户名可用") } }); }); $("#comfim").blur(function () { var pwd = $('input[name="password"]').val(); if(pwd != $(this).val()){ $("#s_comfim").html("两次密码输入不一致!!!"); }else { $("#s_comfim").html(""); } }); }); ``` * ReadFile.java 封装一些常用的对userInfo.txt操作的函数 ``` java package cn.edu.dgut.utils; import cn.edu.dgut.infomation.LocalUserInfo; import javax.json.bind.Jsonb; import javax.json.bind.JsonbBuilder; import java.io.*; public class ReadFile { private long max_user_number = 20190001; private String fileName = "userInfo.txt"; static { File f = new File("userInfo.txt"); if (!f.exists()){ try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } /** * getCount() * @return 返回用户数 * @throws IOException */ public int getCount() throws IOException { int n = 0; Reader reader = new FileReader(fileName); BufferedReader bufferedReader = new BufferedReader(reader); String str= null; while ((str = bufferedReader.readLine()) != null) { //过滤掉空格行 if(!str.trim().equals("")){ n++; } } // 注意这两个关闭的顺序 bufferedReader.close(); reader.close(); return n; } /** * getUers() * @return 返回用户数组 * @throws IOException */ public LocalUserInfo[] getUers() throws IOException { int n=getCount(); int len = 0; LocalUserInfo[] users; if(n==0){ return null; } users = new LocalUserInfo[n]; Jsonb jsonb = JsonbBuilder.create(); Reader reader = new FileReader(fileName); BufferedReader bufferedReader = new BufferedReader(reader); String str= null; while ((str = bufferedReader.readLine()) != null) { //过滤掉空格行 if(!str.trim().equals("")){ users[len++] = jsonb.fromJson(str,LocalUserInfo.class); } } // 注意这两个关闭的顺序 bufferedReader.close(); reader.close(); return users; } /** * find(String str) * 根据 工号/手机号/邮箱 来查找用户信息 * @param str 工号/手机号/邮箱 * @return 返回符合条件的用户 * @throws IOException */ public LocalUserInfo find(String str) throws IOException { LocalUserInfo[] users = getUers(); for (int i = 0; i < users.length; i++) { if(users[i].getUser_number().equals(str)||users[i].getEmail().equals(str)||users[i].getPhone_number().equals(str)){ return users[i]; } } return null; } /** * getMaxNumber() * @return 返回最大的工号 * 注册时的工号以 最大的工号+1 得到 */ public String getMaxNumber() throws IOException { LocalUserInfo[] users = getUers(); /*for(int i=0;imax_user_number) max_user_number = Integer.valueOf(users[i].getUser_number()); }*/ if(users!=null) max_user_number = max_user_number + users.length;//工号是以20190000为基值生成 return String.valueOf(max_user_number); } /** * 在userInfo.txt中追加注册信息 */ public void setUserInfo(String userinfo){ BufferedWriter out = null; File file = new File("userInfo.txt"); try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true))); out.write(userinfo+"\n"); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } public void resetUserInfo(LocalUserInfo user) throws IOException { LocalUserInfo[] users = getUers(); StringBuffer bu = new StringBuffer(); BufferedWriter out = null; Jsonb jsonb = JsonbBuilder.create(); File file = new File("userInfo.txt"); out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,false))); for (int i = 0; i < users.length; i++) { if(user.getUser_number().equals(users[i].getUser_number())){ //替换用户信息(根据工号判断) users[i] = user; } String infoJson = jsonb.toJson(users[i]); bu.append(infoJson+"\n"); } String userString = bu.toString(); out.write(userString); out.close(); } } ``` * RegisterServlet.java 处理注册的servlet ```java import cn.edu.dgut.infomation.LocalUserInfo; import cn.edu.dgut.utils.ReadFile; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; import javax.json.bind.Jsonb; import javax.json.bind.JsonbBuilder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; @WebServlet("/RegisterServlet") /*@MultipartConfig*/ public class RegisterServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String head_img = null; Map formMap = new HashMap(); //保存文本域数据进 formMap 中 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List list = null; try { list = upload.parseRequest(request); for (FileItem fi : list ) { //判断是否是文本域 if(fi.isFormField()){ String fieldName = fi.getFieldName(); formMap.put(fieldName,fi.getString("utf-8")); //保存文本域数据进 formMap 中 }else { if(fi.getSize()!=0){ //判断文件上传框是否选择了图片 head_img = fi.getName(); String path = getServletContext().getRealPath("/uploadImages"); InputStream is = fi.getInputStream(); FileOutputStream os = new FileOutputStream(new File(path, head_img)); IOUtils.copy(is,os); os.close(); is.close(); fi.delete(); } } } } catch (FileUploadException e) { e.printStackTrace(); } if(head_img==null){ //head_img==null时,用户没有上传头像,则设置为默认头像 boy.png head_img="boy.png"; } String user_number = new ReadFile().getMaxNumber();//生成工号 LocalUserInfo localUserInfo = new LocalUserInfo(user_number,formMap.get("name"),formMap.get("phone_number"),formMap.get("email"),formMap.get("password"),head_img,null,null,null,null,null); Jsonb jsonb = JsonbBuilder.create(); String userJson =jsonb.toJson(localUserInfo); new ReadFile().setUserInfo(userJson); //保存信息进userInfo文件 //保存登录信息,设置session并重定向到用户信息页面info.jsp Map info = new HashMap(); info.put("user_number", user_number); info.put("name", formMap.get("name")); info.put("faculty_title", "NULL"); info.put("group", "NULL"); HttpSession session = request.getSession(true); session.setAttribute("isLogin", info); response.sendRedirect("/info.jsp"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } } ``` * LocalLoginServlet.java 处理登录请求的servlet ```java import cn.edu.dgut.infomation.LocalUserInfo; import cn.edu.dgut.utils.ReadFile; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.HashMap; import java.util.Map; @WebServlet("/LocalLoginServlet") public class LocalLoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); LocalUserInfo user = new ReadFile().find(name); if(user!=null){ if(user.getPassword().equals(request.getParameter("password"))){ Map info = new HashMap(); info.put("user_number", user.getUser_number()); info.put("name", user.getName()); info.put("faculty_title", user.getFaculty_title()); info.put("group", user.getGroup()); HttpSession session = request.getSession(true); session.setAttribute("isLogin", info); response.sendRedirect("/info.jsp"); }else { response.getWriter().println("密码不正确!!"); } }else { response.getWriter().println("用户不存在!!"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } } ```