spring mvc中controller通过url传递参数到jsp页面

spring mvc学习记录

欢迎使用Markdown编辑器

最近在做一个网站,在用户注册的模块需要使用邮箱激活用户,所以需要使用到Controller向jsp页面通过URL传递验证码“code”这个参数

实现效果

spring mvc中controller通过url传递参数到jsp页面_第1张图片
spring mvc中controller通过url传递参数到jsp页面_第2张图片
在这里插入图片描述
点击链接,激活用户
spring mvc中controller通过url传递参数到jsp页面_第3张图片

输入相关的注册信息后,jsp页面通过表单提交给controller会先向数据库中写入相关信息,但是账户还是未激活的状态,这个时候需要使用到邮箱验证激活码。通过url从controller向jsp页面传递code参数。

具体处理

jsp(welcome.jsp)处理
邮箱验证的URL形式是页面地址+参数。通过jsp嵌入java代码从URL中拿到激活码code的值。

<%
    String Code = "";
    if(request.getParameter("code")!=null)
        Code=request.getParameter("code");
%>

再在jsp中插入一个js的脚本拿到java变量Code的值。


再在html通过一个表单的隐形提交,将值传递给controller处理。

其中关键是Code的值的传递。

controller处理
验证码Code的产生:

    public static String generateCode(){
        Random r = new Random();
        StringBuffer captcha1 = new StringBuffer();
        for (int i = 0; i < 4; i++) {
            captcha1.append(r.nextInt(9)+"");
        }
        String captcha = new String(captcha1);
        logger.debug("验证码生成成功");
        return captcha;
    }

产生四位的随机验证码,缺陷是没有给验证码设置失效的期限。
用户激活邮件主体链接的产生:

 String body = "这是一封激活邮件,激活请点击以下链接:http://localhost:8080/welcome.html?code="+code;

code是产生的随机四位码。
映射welcome.jsp页面:

@RequestMapping("/welcome")
    public ModelAndView emailRegisterPage(@RequestParam("code") String code,ModelAndView modelAndView){
        return new ModelAndView("welcome","code",code);
    }

其中@RequestMapping和RequestParam的import代码是:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

jsp页面的表单提交相应代码:

@RequestMapping("/welcome_do.html")
    public String emailRegisterDo(HttpServletRequest httpServletRequest,RedirectAttributes redirectAttributes){
        String code = httpServletRequest.getParameter("Code");
        logger.debug("注册code:"+code);
        if(loginService.checkRegisterCode(code).getPassword().isEmpty()){
            logger.debug("注册码无效");
        }
        else{
            logger.debug("注册码有效");
            boolean isChangeState = loginService.changeAdminState(code,1);
            if(isChangeState){
                logger.debug("用户已经激活");
            }else {
                logger.debug("用户还未激活");
            }
        }
        return "redirect:/login.html";
    }

你可能感兴趣的:(web,spring,spring,mvc)