# Experiment4 **Repository Path**: mysingleroom/Experiment4 ## Basic Information - **Project Name**: Experiment4 - **Description**: No description available - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-05-14 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《JAVA EE企业级架构》课程实验报告 院(系)名称:网络空间安全学院 专业班级: 17软卓1班 学号: 201741404127 姓名: 黄鑫杰 实验题目:实验4 JDBC 实验日期:2019.4.27 实验(上机)学时: 2 成绩: ## 一、实验内容、要求 *改写用户注册/登录模块,使用JDBC或JPA技术实现用户数据的持久化,大致功能如下: >1、 设计用户实体Entity与莞工登录用户Entity,并设置关联。 2、 Entity需要校验用户数据的合法性。 3、 用户照片保存在数据库中;前端显示用户照片时,改为读取数据库。 4、 任何数据库操作发生错误时,请导向error.jsp,并回滚数据库事务。 5、 增加绑定莞工中央认证账号的功能。本地账号登录的用户,可以在用户中心绑定莞工认证账号。 绑定后,本地账号与莞工中央认证账号关联(一对一),并且使用莞工中央认证登录等价于本地账号登录。 > ## 二、所采用的Java EE技术规范 1. JSP的基础语法 2. Filter配置 3. Serlet配置 4. HttpClient组件 5. JPA的配置以及应用 6. web.xml的配置 7. jsonbean 8. html,css,js ## 三、实验的主要模块及其功能 ### local_login_Servlet.java 获取前端网页post请求中的信息,读取数据库中的用户信息,然后一一检验账号,密码是否符合 若正确则存入session中 > HttpSession session = request.getSession(true); Map map = new HashMap(); map.put("password",personDTO.getPassword()); map.put("用户名",personDTO.getUsername()); map.put("电话号码",personDTO.getPhonenumber()); map.put("学号",personDTO.getStu_number()); map.put("img",personDTO.getImg()); //HttpSession session = request.getSession(true); session.setAttribute("userName", map); session.setAttribute("token", "not null2"); > 错误则提示用户账号或者密码错误 ### indexServlet.java 获取前端网页post请求中的信息,使用jsonbean完成json的转化,在转化为实体然后存入到数据库中 ### loginoutServlet.java 清除key为userName,token的session,并申请退出莞工登陆再重定向到index.jsp ### loginFilter3.java 利用userName,token的session判定登陆状态,若无登陆则重定向到index.jsp ### loginFilter2.java 利用getParameter验证获取的token,state,若无则再重定向到```https://cas.dgut.edu.cn?appid=javaee&state=STATE```获取token ###getInformation.java ```public static String get(HttpServletRequest request, HttpServletResponse response)``` 获取当前登陆用户的userName ### check.java 内部有两个方法 ```public static void jion_message(Message MessageDTO, HttpServletRequest request, HttpServletResponse response)``` 检验是否存在与第三方学号的用户,若无则使用“工号”自动创建一个本地账号,密码预设为“123456”,若有则登陆该用户 ```public static void chang_img(HttpServletRequest request, HttpServletResponse response,String filename)``` 读取数据库中的用户信心,匹配当前登陆用户的信息,并修改头像信息,将新更新的```usermessage```实体类存入数据库中完成用户换头像的请求 ```public static void change_Bone(Message MessageDTO, HttpServletRequest request, HttpServletResponse response)``` 读取数据库中的用户信心,匹配当前登陆用户的信息,并修改绑定信息,将新更新的```Message```,```usermessage```实体类存入数据库中,完成用户换头像的请求 ### uploadServlet.java 使用注解设置绝对路径完成上传照片,并获取图片信息filename ```@MultipartConfig(location = "E:\java_ee\Experiment3\src\main\webapp\assets\img")``` 再调用```check.chang_img(request,response,fileName)```完成用户信息的修改 ### loginServlet.java 获取莞工第三方传输的```token``` *利用httpClient组件去执行post请求获取对应所需要的信息,类似如下 > HttpPost httpPost = new HttpPost("https://cas.dgut.edu.cn/ssoapi/v2/checkToken"+ "?" +param); // 设置ContentType(注:如果只是传普通参数的话,ContentType不一定非要用application/json) httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf8"); // 响应模型 CloseableHttpResponse res = null; res = httpClient.execute(httpPost); HttpEntity entity2 = res.getEntity(); > 若获取不到便利用执行post请求直到获取到对应的实体,并解析 并将最后获取的用户信息json字符串```message```调用```check.jion_message(MessageDTO,request,response);``` ## 四、程序运行时的输入数据/输出结果 ### 登陆界面 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0514/162547_e0ff3a96_4839826.jpeg "登陆界面.jpg") ### 注册界面 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0514/162606_07d05611_4839826.jpeg "注册界面.jpg") ### 登陆失败 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0514/162619_76e07877_4839826.jpeg "登陆失败.jpg") ### 登陆成功 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0519/190610_a4197faa_4839826.jpeg "登陆成功.jpg") ### 换头像 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0519/190629_fe28a389_4839826.jpeg "成功换头像.jpg") ### 更改绑定 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0519/190645_88fbf721_4839826.jpeg "更改绑定信息.jpg")