基于Servlet实现的微博的点滴记录(1)
来源:互联网 发布:名越seo 编辑:程序博客网 时间:2024/06/04 19:53
其实这两天本是在期末复习的,但在自习的时候没法淡定地好好复习英语和数据库orz于是就翻出了林信良的《JSP&Servlet学习笔记》,白天在自习室里翻书,晚上回寝就照着码些代码,完成下课后习题。应该说拜上个寒假看U2B上Java Web相关教学视频的福吧,重要的概念是有那么个印象的,剩下的主要是各种api吧,当然也暴露许多自己不懂的事实(IO、Java2D啦),希望在跟书中项目的过程中可以记录下来,以求在将来用的到吧。
首先介绍下是个怎样的项目吧。目前完成的部分来看,包括了注册用户和登陆的功能,注册用户是通过保存为文件的形式。感觉其中最吸引我的,果然还是IO操作吧(Java SE没学好,不要婊我T T)。奉上Login.java和Register.java两个Servlet的代码:
package cc.bellchet58.controller;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 处理注册相关的Servlet * 将注册以文件的形式存储 */@WebServlet("/register.do")public class Register extends HttpServlet { private static final String USERS = "/Users/bellchet58/Documents/workspace/Weibo/users/"; private static final String SUCCESS_VIEW = "success.jsp"; private static final String ERROR_VIEW = "error.jsp"; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 取得请求参数 String email = request.getParameter("email"); String username = request.getParameter("username"); String password = request.getParameter("password"); String confirmedPasswd = request.getParameter("confirmedPasswd");// 验证请求参数 List<String> errors = new ArrayList<String>(); if(isInvalidEmail(email)){ errors.add("未填写邮件或邮件格式不正确"); } if(isInvalidUsername(username)){ errors.add("用户名称为空或已存在"); } if(isInvalidPassword(password,confirmedPasswd)){ errors.add("请确认密码符合格式并再次确认密码"); } String resultPage = ERROR_VIEW; if(!errors.isEmpty()){ request.setAttribute("errors", errors); }else{ resultPage = SUCCESS_VIEW;// 创建用户资料 createUserData(email,username,password); } request.getRequestDispatcher(resultPage).forward(request, response); } private void createUserData(String email, String username, String password) throws IOException{ File userhome = new File(USERS +"/"+username); userhome.mkdir(); BufferedWriter writer = new BufferedWriter( new FileWriter(userhome+"/profile")); writer.write(email+"\t"+password); writer.close(); } private boolean isInvalidPassword(String password, String confirmedPasswd) { return password ==null || password.length() < 6 || password.length() > 16 || !password.equals(confirmedPasswd); } private boolean isInvalidUsername(String username) {// System.out.println(username);// System.out.println(new File(USERS));// System.out.println(new File(USERS).list()); for(String file:new File(USERS).list()){ if(file.equals(username)){ return true; } } return false; } private boolean isInvalidEmail(String email) { return email == null || !email.matches("^[_a-z0-9-]+([.]" +"[_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$"); }}
啊,OS是MacOSX,所以文件的路径会是那样啊,和windows稍微不太一样哈。最先写的时候遇上问题,也是和IO有关啦,就是路径的事。详细的,是"/Users/bellchet58/Documents/workspace/Weibo/users/"
这句原来是有问题的,因为一开始 我是写作"~/Documents/workspace/Weibo/users/"
的,但是有报错。因为用的是Mac嘛,很自然地就想偷懒,”~”这个符号的意思是/Users/你自己的用户名/
,这点可以在控制台上用echo ~命令来确认。
而实际上程序能识别的也就只有绝对路径和相对路径两种吧,如果才有相对路径的话,还得用上getServletContext().getRealPath()
来获得当前的Servlet的绝对路径来逆推回相对路径,十分不便。
还有就是缓冲写文件的方式值得一提(仅仅是我记不住啦。。) BufferedWriter writer = new BufferedWriter(
new FileWriter(userhome+"/profile"));
writer.write(email+"\t"+password);
包括之前的步骤,先是创建用户名文件夹,然后在文件夹下建立对应的配置文件以记录邮箱和用户名,觉得还是蛮有意思的。
对应地,在Login.java部分的读取,也是BufferedReader+FileReader 的这种读取方式,再获取密码进行比对。
package cc.bellchet58.controller;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet 登录用 */@WebServlet("/login.do")public class Login extends HttpServlet { private final static String USERS = "/Users/bellchet58/Documents/workspace/Weibo/users"; private final String SUCCESS_VIEW = "member.jsp"; private final String ERROR_VIEW = "index.html"; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if(checkLogin(username,password)){ request.getRequestDispatcher(SUCCESS_VIEW).forward(request, response); }else{ response.sendRedirect(ERROR_VIEW); } } private boolean checkLogin(String username, String password) throws IOException{ if(username != null && password != null){ for(String file:new File(USERS).list()){ if(file.equals(username)){ BufferedReader reader = new BufferedReader(new FileReader(USERS+"/"+file+"/profile")); String passwd = reader.readLine().split("\t")[1]; if(passwd.equals(password)){ return true; } } } } return false; }}
其实好像真没记录什么真正有意思的,毕竟其实大多时候其实是在照本宣,按书上的来,所以果然要记录也得挑自己思考创作的吧。所以这个系列。。可能会烂尾诶。
- 基于Servlet实现的微博的点滴记录(1)
- 记录C#的点滴
- 记录人生的点滴
- 记录我的点滴
- 记录学习的点滴
- QTP的点滴记录
- 记录Shell的点滴
- 记录每天的点滴
- 记录的点滴
- 记录学习的点滴
- 记录生活的点滴
- 基于Servlet的Ajax实现
- Python 的点滴记录(1)
- 记录学习的点滴(ArrayList的实现原理)
- 记录在实验室的点滴
- 计划记录技术的点滴
- 创刊号--记录学习的点滴
- 记录java学习的点滴
- eclipse的代码贴到word文档的时候,原先的颜色设置都不见了,全都变成黑色的了
- 关于Android 的内存泄露及分析
- 虚幻4引擎虚拟现实项目制作教程
- poj 2864
- FragmentPagerAdapter无法刷新的最简单解决办法
- 基于Servlet实现的微博的点滴记录(1)
- Android仿虾米音乐播放器之本地音乐获取
- 郑州俊风网络科技有限公司
- PostgreSQL基本函数
- 如何得到yum的rpm包
- 修饰器
- App布局初探之简单模型
- Mysql中表操作删除表、清空表(主键从0开始、不从0开始的清空)
- TreeView 精确查找