最近在用servlet写一个简单的微博程序,途中出现了好多小错误,通过百度和请教别人,学到了很多的知识。也在这次练手中加深了对前端,后台处理机制的理解,对于后台与前端之间的交互也更加清晰。我觉得收获很大。
总结一下最近的东西,对于编写微博程序代码这块,先是分析需求,决定先让程序实现注册登录功能,大体框架搭起来,整体先保证跑起来,再逐步往上加功能,这样的设计思路我觉得能减轻后续的工作量。
今天先来说说注册部分,后续的登录等等功能之后更新~~
会员注册
会员注册这块,分为前端html页面和后台的servlet服务器处理部分。前端注册页面和服务器处理部分是使用标签连接起来的。
我代码中是通过下面这行代码实现的连接:
<form action="http://localhost:8080/register.do" method = "post">
关于存储部分决定用数据库实现,暂时是用文件处理的,之后会更改为数据库。
贴上我的相关注册代码如下(文件实现):
注册的页面部分:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>微博</title>
</head>
<body>
<center>
<form action="http://localhost:8080/register.do" method = "post">
<tr>
<th>
<img src = "111.jpg" width = "300" height = "200"> <br>
</th>
</tr>
<br>
<br>
<tr>
<td>
会员注冊 <br>
邮箱地址:
<input type = "TEXT" name = "邮箱地址:" size="25" maxlength="16"> <br>
用户名:
<input type = "TEXT" name = "名称:" size="25" maxlength="16"> <br>
密码:
<input type = "password" name = "password" size="25" maxlength="16"> <br>
确认密码:
<input type="password" name="confirmedPasswd" size="25" maxlength="16"> <br>
<br>
<button>注冊</button> <br>
</td>
</tr>
</form>
</center>
</body>
</html>
注册的servlet部分:
package com.dongmengyuan;
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 java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
/**
* Created by dongmengyuan on 17-4-11.
*/
@WebServlet("/register.do")
public class Register extends HttpServlet {
private final String USERS = "/home/dongmengyuan/Desktop";
private final String SUCCESS_VIEW = "success.view";
private final String ERROR_VIEW = "error.view";
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;
//窗体验证出错误,设置收集错误的List为请求属性
if(!errors.isEmpty()) {
request.setAttribute("errors",errors);
}
else {
resultPage = SUCCESS_VIEW;
createUserData(email,username,password); //创建用户资料
}
request.getRequestDispatcher(resultPage).forward(request,response);
}
private boolean isInvalidEmail(String email) {
//return email == null || !email.matches("^[_a-z0-9-]+([.]" + "[_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$");
return true;
}
//检查用户资料夹是否创建来确认用户是否已注册
private boolean isInvalidUsername(String username) {
for(String file : new File(USERS).list()) {
if(file.equals(username)) {
return true;
}
}
return false;
}
private boolean isInvalidPassword(String password,String confirmedPasswd) {
return password == null || password.length() < 6 || password.length() > 16 || !password.equals(confirmedPasswd);
}
//创建用户资料次,在profile中储存邮件与密码
private void createUserData(String email, String username, String passwd) throws IOException {
File userhome = new File(USERS + "/" + username);
out.println(USERS + "/" + username);
userhome.mkdir();
String fileName = userhome + "/profile";
File myFile = new File(fileName);
if(!myFile.exists()) {
myFile.createNewFile();
}
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(email + "\t" + passwd);
writer.close();
}
}
在编程时犯了一个低级错误,参数大小写不一致,导致注册时密码验证一直出错,还有保存文件的路径问题也值得注意哦。
操作时需要返回的成功及错误页面代码没贴出来,可以自己添加对于操作成功和错误的处理部分,试试自己编写一下SUCCESS_VIEW和ERROR_VIEW~