个人建议 这个项目 还是蛮不错的 有很多注意思考的地方
所用技术 以及环境介绍
环境搭建 配置
技术选层
-
Web层
Servlet 前端控制器 Html 视图 数据展示 效果展示 Filter 过滤器 Beanutils 数据封装 Jackson json序列化工具 -
Service层
Javamail 邮件发送邮件 Redis nosql内存数据库 Jedis java的redis的客户端 -
Dao层 数据访问层
Mysql 数据库 Druid数据库连接池 JdbcTempalte jdbc的工具
服务器使用的是Tomcat 数据库mysql
导入对应的pom.xml时候 对应加载Maven
过滤器 防止出现乱码
//将父接口转为子接口
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) rep;
//获取请求方法
String method = request.getMethod();
//解决post请求中文数据乱码问题
if(method.equalsIgnoreCase("post")){
request.setCharacterEncoding("utf-8");
}
//处理响应乱码
response.setContentType("text/html;charset=utf-8");
filterChain.doFilter(request,response);
项目结构

注册功能 表单展示

Register.html
使用js完成表单检验
使用ajax完成表单提交
注册完成跳转到成功页面
regisUserServlet
获取数据
封装User对象
调用service完成注册
根据service的返回 提示信息
1. 将提示信息转为json
2. 设置响应头contertType
对应的注册提交表单后 后端处理 核心代码 清楚session会话域 防止验证码因为刷新失效
@WebServlet("/registerUserServlet")
public class RegisUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 验证码
String check = req.getParameter("check");
// 从session中获取
HttpSession session = req.getSession();
String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
// 清楚Session会话域 保证验证码只能使用一次
session.removeAttribute("CHECKCODE_SERVER");
// 比较
if(checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)){
// 验证码 错误
ResultInfo info = new ResultInfo();
// 注册失败
info.setFlag(false);
info.setErrorMsg("验证码错误");
// 将info对象序列化为json
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(info);
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(json);
return ;
}
Map<String, String[]> map = req.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 调用service完成注册
UserService service = new UserServiceImpl();
boolean flag= service.regist(user);
ResultInfo info = new ResultInfo();
// 响应结果
if(flag){
// 注册成功
info.setFlag(true);
}else{
// 注册失败
info.setFlag(false);
info.setErrorMsg("注册失败");
}
// 将info对象序列化为json
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(info);
// 将json数据写回客户端
// 设置content-type
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(json);
}
注册完成之后会进行一个邮箱的注册激活认证 需要邮箱的验证
工具类的展示
/**
* 发邮件工具类
*/
public final class MailUtils {
private static final String USER = ""; // 发件人称号,同邮箱地址
private static final String PASSWORD = ""; // 如果是qq邮箱可以使户端授权码,或者登录密码
/**
*
* @param to 收件人邮箱
* @param text 邮件正文
* @param title 标题
*/
/* 发送验证信息的邮件 */
public static boolean sendMail(String to, String text, String title){
try {
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
// 发件人的账号
props.put("mail.user", USER);
//发件人的密码
props.put("mail.password", PASSWORD);
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthenticatio
Java Web项目实践:注册、登录与邮件验证

本文详述了一个Java Web项目的实现,包括环境配置、Servlet、Filter、Beanutils、Jackson等技术的使用。项目涵盖注册功能,使用Ajax提交表单,邮箱验证,以及session管理和邮件发送。此外,还涉及了分页查询、Redis缓存优化、旅游线路搜索和收藏功能。在处理中,特别强调了防止乱码、异常处理和性能优化。
最低0.47元/天 解锁文章
878

被折叠的 条评论
为什么被折叠?



