黑马旅游网项目后端思路 以及常见错误的总结 需源码请私信

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

个人建议 这个项目 还是蛮不错的 有很多注意思考的地方
所用技术 以及环境介绍

环境搭建 配置

技术选层

  1. Web层

    	Servlet 前端控制器
    	Html 视图   数据展示  效果展示
    	Filter 过滤器
    	Beanutils  数据封装
    	Jackson  json序列化工具 
    
  2. Service层

    	Javamail 邮件发送邮件
    	Redis  nosql内存数据库
    	Jedis  java的redis的客户端
    
  3. 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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值