# 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

* 点击注册


* 注册成功的页面

* 点击头像进行上传头像

* 点击修改信息按钮

* 点击绑定信息按钮


* 保存用户数据文本

### 文件介绍
* 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);
}
}
```