# Experiment3 **Repository Path**: mysingleroom/Experiment3 ## Basic Information - **Project Name**: Experiment3 - **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-11 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《JAVA EE企业级架构》课程实验报告 院(系)名称:网络空间安全学院 专业班级: 17软卓1班 学号: 201741404127 姓名: 黄鑫杰 实验题目: 实验3 JavaBean 实验日期:2019.4.27 实验(上机)学时: 2 成绩: ## 一、实验内容、要求 *实现一个用户注册/登录模块,大致功能如下: >1、 启动首页为用户登录页,本地账号登录或莞工中央认证登录成功后,返回用户中心。 2、 如果用户还没有用户名和密码,则请他/她先进行注册,注册信息写入一个文本文件中,注册成功后直接回到用户中心。 3、 把存取用户名/密码及验证用户名/密码都放在一个JavaBean中,在bean中对用户的合法性进行验证。 4、 登录不成功则返回登录页面,提示用户名不存在或密码错误。 5、 如果用户选择莞工中央认证登录,则使用“工号”自动创建一个本地账号,密码预设为“123456”,并把莞工中央认证与本地账号关联。 6、 任何页面发生错误时,请导向error.jsp。 7、 使用JavaBean,实现下面的业务功能: a. 上传自己的照片。(照片保存在本地文件系统) b. 查看用户信息 > ## 二、所采用的Java EE技术规范 1. JSP的基础语法 2. Filter配置 3. Serlet配置 4. HttpClient组件 5. IO流的读取与写入 6. web.xml的配置 7. jsonbean 8. html,css,js ## 三、实验的主要模块及其功能 ### local_login_Servlet.java 获取前端网页post请求中的信息,读取txt文件中的用户信息,然后一一检验账号,密码是否符合 若正确则存入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的转化,在转成字符串的形式存入txt文件中 ### 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 ### 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)``` 读取txt文件中的用户信心,匹配当前登陆用户的信息,并修改头像信息,完成用户换头像的请求 ### uploadServlet.java 使用注解设置绝对路径完成上传照片,并获取图片信息filename ```@MultipartConfig(location = "E:\\java_ee\\Experiment2\\src\\main\\webapp\\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/0514/162631_9a54648d_4839826.jpeg "无绑定登陆.jpg") ### 绑定后登陆 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0514/163128_b2752390_4839826.jpeg "1557822648(1).jpg") ### 换头像 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0514/162652_18b16f83_4839826.jpeg "换头像.jpg") ### 成功换头像 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0514/162701_e50f9413_4839826.jpeg "成功更换头像.jpg") ### 错误界面 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0514/162711_3dfd5802_4839826.jpeg "错误界面.jpg")