package com.zwq.user.web.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zwq.user.domain.User;
import com.zwq.user.service.UserService;
import com.zwq.user.service.exception.UserException;
import cn.itcast.commons.CommonUtils;
public class UserServlet extends HttpServlet{
private UserService userService = new UserService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* 此方式会在浏览器地址栏暴露method=xxx,不私密,有安全隐患
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
// @Override
// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// String method = request.getParameter("method");
// switch (method) {
// case "login":
// login(request, response);
// break;
// default:
// break;
// }
// }
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取ServletPath: /login.do
String servletPath = request.getServletPath();
//2. 去除/ 和 .do,得到类似于edit或addCustomer 这样的字符串
String methodName = servletPath.substring(1);
methodName = methodName.substring(0, methodName.length()-3);
try {
//3. 利用反射获取methodName对应的方法
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//4.利用反射调用相应的方法
method.invoke(this, request,response);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 注册
* @param request
* @param response
* @throws ServletException
* @throws IOException
* @throws SQLException
*/
private void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException{
// System.out.println("regist");
/*
* 封装表单数据到User对象
*/
User userForm = CommonUtils.toBean(request.getParameterMap(), User.class);
/*
* 校验
* 校验失败则保存错误信息,同时保存表单数据用于回显,并返回regist.jsp
*/
Map<String, String> errors = validateRegist(userForm, request.getSession());
/*
* 验证失败
*/
if (errors.size() > 0) {
//保存错误信息,保存表单数据用于回显
request.setAttribute("userForm",userForm);
request.setAttribute("errors", errors);
//转发
request.getRequestDispatcher("/jsps/user/regist.jsp").forward(request, response);
/*
* 小提示:
* forward(request, response);跳转页面,执行这个语句之后,如果此语句后面还有代码,既然跳转了页面后面代码执行不了,原页面的代码没有终止一定会出错。
* 解决方法,在forward(request, response);跳转后面不要写其他代码,且加上 return;
*/
return;
}
/*
* 校验成功,则调用service层方法保存用户注册信息到数据库
*/
userService.regist(userForm);
/*
* 保存成功信息,并转发到msg.jsp
*/
request.setAttribute("code", "success");
request.setAttribute("msg", "注册成功,请马上去邮箱激活!");
//request.getRequestDispatcher("index.jsp").forward(request, response);
request.getRequestDispatcher("jsps/msg.jsp").forward(request, response);
return;
}
/**
* 验证所有注册信息
* 这是后台校验,较前台校验更安全
* 将错误信息保存在Map中
* 要点:向HashMap中添加元素时,会调用key所在类的equals()方法,判
* 断两个key是否相同,若相同 ,则只能添加进后添加的那个元素。
* @param userForm
* @param session
* @return
* @throws IOException
* @throws ServletException
* @throws SQLException
*/
private Map<String,String> validateRegist(User userForm,HttpSession session) throws ServletException, IOException, SQLException {
Map<String, String> errors = new HashMap<String, String>();
/*
* 验证用户名
* 注意两种情形:第一种用户名为空null,
* 第二种用户名为空格(注意null != 空格)
* trim函数去掉空格
*/
if(userForm.getLoginname() == null || userForm.getLoginname().trim().isEmpty()) {
errors.put("loginnameError", "用户名不能为空");
} else if (userForm.getLoginname().length() < 3 || userForm.getLoginname().length() > 20) {
errors.put("loginnameError", "用户名长度必须在3~20之间!");
} else if (!userService.ajaxValidateLoginname(userForm.getLoginname())) {
errors.put("loginnameError", "用户名已被注册!");
}
/*
* 验证密码
*/
String loginpass = userForm.getLoginpass();
if(loginpass == null || loginpass.trim().isEmpty()) {
errors.put("loginnameError", "密码不能为空");
} else if (loginpass.length() < 6 || loginpass.length() > 16) {
errors.put("loginnameError", "密码长度必须在6~16之间!");
}
/*
* 验证确认密码
*/
String reloginpass = userForm.getReloginpass();
if(!loginpass.equals(reloginpass)) {
errors.put("reloginpassError", "两次输入的密码不一致!");
} else if(reloginpass == null || reloginpass.trim().isEmpty()) {
errors.put("reloginpassError", "确认密码不能为空!");
}
/*
* 验证邮箱
*/
String email = userForm.getEmail();
if(email == null || email.trim().isEmpty()) {
errors.put("emailError", "Email不能为空!");
//java和js有区别:/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$/中的/要去掉,\要改为\\
} else if(!email.matches("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$")){
errors.put("emailError", "Email格式错误!");
} else if (!userService.ajaxValidateEmail(email)) {
errors.put("emailError", "Email已被注册!");
}
/*
* 验证手机号
*/
String telephone = userForm.getTelephone();
if(telephone == null || telephone.trim().isEmpty()) {
errors.put("telephoneError", "手机号不能为空!");
} else if(!telephone.matches("^([0-9]{11})$")) {
errors.put("telephoneError", "手机号格式错误,必须为数字,且长度为11位!");
} else if (!userService.ajaxValidateTelephone(telephone)) {
errors.put("telephoneError", "手机号已被注册!");
}
/*
* 验证密保答案
*/
String answer = userForm.getAnswer();
if (answer == null || answer.trim().isEmpty()) {
errors.put("answerError", "密保不能为空!");
}
/*
* 验证验证码
*/
String verifyCode = userForm.getVerifyCode();
String vCode = (String) session.getAttribute("vCode");
if(verifyCode==null || verifyCode.trim().isEmpty()) {
errors.put("verifyCodeError", "验证码不能为空!");
} else if(verifyCode.length() != 4) {
errors.put("verifyCodeError", "验证码长度不对!");
} else if (!verifyCode.equalsIgnoreCase(vCode)) {
errors.put("verifyCodeError", "验证码错误!");
}
return errors;
}
/*
* 激活功能
*/
private void activation(HttpServletRequest request,HttpServletResponse response) {
String activationCode = request.getParameter("activationCode");
try {
userService.activation(activationCode);
//上一句未抛出异常时,执行下面的语句
request.setAttribute("code", "success");
request.setAttribute("msg", "恭喜您激活成功!");
} catch (UserException e) {
request.setAttribute("code", "error");
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计之基于MySQL+JDBC+JSP+JQuery的个人博客系统.zip 技术: MySQL,JDBC,JSP,Servlet,JQuery,javaScript,Ajax,JAVA 前台功能: 用户模块: 邮箱注册 激活功能,只有点击了邮件中的激活链接后方可激活 发短信找回密码 登录注册前台和后台验证 密码进行MD5加密 退出功能,退出后销毁session 后台功能: 查看所有博客 发布博客 博客管理 添加分类 分类管理 评论管理 修改密码
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计之基于MySQL+JDBC+JSP+JQuery的个人博客系统源码.zip (706个子文件)
config.ascx 5KB
class_upload.asp 9KB
io.asp 7KB
config.asp 5KB
commands.asp 5KB
connector.asp 2KB
upload.asp 2KB
basexml.asp 2KB
util.asp 1KB
connector.aspx 1KB
upload.aspx 1KB
image.cfc 45KB
ImageObject.cfc 12KB
cf5_upload.cfm 10KB
cf5_connector.cfm 10KB
cf_io.cfm 10KB
cf_commands.cfm 8KB
config.cfm 8KB
spellchecker.cfm 5KB
cf_util.cfm 4KB
cf_connector.cfm 3KB
cf_basexml.cfm 3KB
cf_upload.cfm 2KB
connector.cfm 973B
upload.cfm 962B
connector.cgi 3KB
upload.cgi 3KB
UserServlet.class 13KB
UserService.class 9KB
AdminUserServlet.class 6KB
BlogServlet.class 6KB
CategoryServlet.class 6KB
UserDao.class 6KB
CommentServlet.class 5KB
AdminBlogServlet.class 5KB
SendShortMessage.class 5KB
User.class 5KB
CommentDao.class 3KB
CategoryDao.class 3KB
BlogDao.class 3KB
AdminTest.class 3KB
PageDao.class 3KB
PageServlet.class 3KB
AdminBlogDao.class 3KB
BlogService.class 3KB
CategoryService.class 3KB
CommentService.class 3KB
AdminBlogService.class 3KB
AdminUserDao.class 2KB
PageBean.class 2KB
MD5Util.class 2KB
AdminUserService.class 2KB
BlogTest.class 2KB
Admin.class 2KB
Blog.class 2KB
UserDaoTest.class 1KB
Comment.class 1KB
PageService.class 1KB
CategoryTest.class 995B
CommentException.class 988B
BlogException.class 973B
Category.class 934B
AdminUserException.class 778B
UserException.class 761B
PageConstant.class 480B
.classpath 2KB
org.eclipse.wst.common.component 463B
org.eclipse.wst.jsdt.ui.superType.container 49B
login.css 10KB
fck_editor.css 8KB
fck_editor.css 7KB
fck_editor.css 7KB
fck_dialog.css 5KB
fck_dialog.css 5KB
fck_dialog.css 5KB
fck_internal.css 4KB
style.css 4KB
fck_editorarea.css 2KB
sample14.styles.css 2KB
addCategory.css 2KB
comment.css 2KB
findPassword.css 2KB
qqBind.css 2KB
regist.css 2KB
fck_dialog_common.css 2KB
fck_showtableborders_gecko.css 2KB
browser.css 1KB
style.css 1KB
sample.css 1KB
style.css 1KB
style.css 1KB
reset.css 1KB
spellerStyle.css 841B
updatePassword.css 452B
sample16.fla 57KB
001.gif 9.62MB
002.gif 7.46MB
c.gif 1013KB
fck_strip.gif 9KB
fck_strip.gif 5KB
共 706 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
武昌库里写JAVA
- 粉丝: 6570
- 资源: 3166
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++ primer 习题上半部分
- C#ASP.NET项目进度管理(甘特图表)源码 任务考核管理系统源码数据库 Access源码类型 WebForm
- 个人练习-练习版内网通?
- 支持向量机 - SVM支持向量机
- 可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具.zip
- 基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务+生产功能
- C#ASP.NET口腔门诊会员病历管理系统源码 门诊会员管理系统源码数据库 SQL2008源码类型 WebForm
- 微信Java开发工具包,支持包括微信支付、开放平台、公众号、企业微信、视频号、小程序等微信功能模块的后端开发
- 灰狼优化算法(Grey Wolf Optimizer,GWO)是一种群智能优化算法
- C语言课程设计项目之扫雷项目源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功