需求:
1、流程分析:客户端程序拿到用户名和密码,将用户名和密码发送到服务端(在客户端验证合法性),服务端接收并存储用户名和密码,返回给客户端一个信息(可能是成功也可能是失败。)
2、数据怎么存?服务端的用户数据为什么存入数据库而不是通过IO存入一个文件?数据库就是封装了CRUD的“专业化”存数据的软件,相比自己写的“非专业”存储方式更安全(不是任何人都可以访问、不易丢失)性能更好(CRUD更快)。。
3、应对多用户注册。
参考:
1、java正则表达式Pattern和Matcher:http://www.cnblogs.com/lzq198754/p/5780340.html
2、java单元测试:http://blog.csdn.net/liushuijinger/article/details/32140843、http://blog.csdn.net/andycpp/article/details/1327147
3、socket传输对象:http://blog.csdn.net/kongxx/article/details/7259827(关于socket的内容很全、代码质量高。。,有时间可以通看。。。)
4、swing消息提示框:http://hnulanwei.iteye.com/blog/2218639
思路:
代码:
1、创建一个User类。封装对象传输显然比拆分字符串传输要好。
package com.xkfx.qq.tools; public class User implements java.io.Serializable { private String username; private String password; public User() { } public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2、检查用户名和密码的合法性
package com.xkfx.qq.tools.check; import java.util.regex.*; public class Check { private static final String regEx = "^[A-Za-z][A-Za-z1-9_-]+$"; private static final Pattern pattern = Pattern.compile(regEx); public static boolean idAndPass(String username, String password) { Matcher userMatcher = pattern.matcher(username); Matcher passMatcher = pattern.matcher(password); return userMatcher.matches() && passMatcher.matches(); } }
3、融入主代码
// 用户点击了注册 if (e.getActionCommand().equals("Sign up")) { // 从JTextField获取用户名和密码 String username = txtUsername.getText(); String password = txtPassword.getText(); // 本地验证用户名、用户密码的合法性 if (Check.idAndPass(username, password)) { User user = new User(username, password); System.out.println("正在向服务发送注册请求"); } else { // 提示用户重新输入 JOptionPane.showMessageDialog(this, "输入不合法,请重新输入!"); } }
后续 & 补充:
修改了目录结构: