首页 > 其他分享 >用户注册案例--mvc架构的实现

用户注册案例--mvc架构的实现

时间:2024-11-05 21:30:50浏览次数:1  
标签:username String 用户注册 -- req mvc import servlet javax

用户注册案例--浅谈servlet

本案例为用户注册案例,同时介绍一部分之前经常用得到servlet的知识.servlet是javaEE的技术规范之一.

基于MCV架构的分析

1.dao层在mapper代理文件中写入insert的操作,对于成功注册的用户直接写入数据库,以及查询操作判断用户名是否已经存在

 User getUserByUsername(@Param("username") String username ,@Param("password") String password);
   @Select("select * from tb_user where username=#{username}")
   User findUsername(@Param("username") String username);
   @Insert("insert into tb_user values(#{username},#{password},#{type})")
   void insertUser(User user);

2.service层,在本层中封装对于数据库的操作,同时记得执行操作之后将数据提交

   public void InsertUser(User user) throws IOException {
       String resource = "mybatis-config.xml";
       InputStream inputStream = Resources.getResourceAsStream(resource);
       SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
       SqlSession sqlSession = sqlSessionFactory.openSession();
       UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
       userMapper.insertUser(user);
       sqlSession.commit();
       sqlSession.close();

   }
    public boolean findUser(String username) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(com.stdu.mapper.UserMapper.class);
        User user=userMapper.findUsername(username);
        sqlSession.close();
        if(user==null){return false;}
        return true;
    }

3.在web层分为两部分,第一部分是在jsp中设计表单将表单中的信息提交到servlet中,然后进行逻辑判断,对于用户名已经存在的情况和成功注册的情况进行重定向和dao层操作
jsp的代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<html>
<head>
    <title>register</title>
</head>
<body>
 <h2>注册账号</h2>

<form method="POST" action="/LogIn/registerServlet" accept-charset="UTF-8">
    <p>${wr_message} </p>
    <p>用户名 <input type="text" name="username"> </p>
    <p>密码 <input type="password" name="password"></p>
    <p>验证码  <input type="text" name="code">     <img src="/LogIn/insureServlet" id="insure"></p>
    <input type="submit" value="注册">
</form>
<script>
    document.getElementById("insure").onclick = function () {
        document.getElementById("insure").src = "/LogIn/insureServlet?"+ new Date().getMilliseconds();
    }
</script>
</body>
</html>

sevlet的代码

package com.stdu.servlet;

import com.mysql.cj.Session;
import com.stdu.pojo.User;
import com.stdu.service.UserService;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        UserService userService = new UserService();
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String code = req.getParameter("code");
        HttpSession session=req.getSession();
        String insure=session.getAttribute("insure").toString();
        if(code==null||!code.equals(insure)){
            req.setAttribute("wr_message","验证码错误");
            req.getRequestDispatcher("register.jsp").forward(req, resp);
            return ;
        }

        boolean st=userService.findUser(username);
        if(st){
           req.setAttribute("wr_message","用户名已经存在");
           req.getRequestDispatcher("register.jsp").forward(req, resp);
        }
        else{
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            userService.InsertUser(user);
            req.setAttribute("wr_message","注册成功");
            req.getRequestDispatcher("index.jsp").forward(req, resp);
        }

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

package com.stdu.servlet;

import com.stdu.util.CheckCodeUtil;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
@WebServlet("/insureServlet")
public class InsureServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       ServletOutputStream outputStream= resp.getOutputStream();
       String insure=CheckCodeUtil.outputVerifyImage(140,50,outputStream,4);
       req.getSession().setAttribute("insure",insure);
    }
}

技术学习

在本案例中,加入了注册需要验证码的功能来防止机器人暴力注册来冲掉数据库.功能实现包括以下几个步骤:
1.生成验证码图片,这里使用了一个工具类,然后将图片输出到servlet的输出流,并且将src放到输出流就可以得到图片
2.同时将得到的验证码放到session上使得数据的验证可以实现
3.将图片使用js的语法绑定事件使得点击图片可以实现图片的替换

标签:username,String,用户注册,--,req,mvc,import,servlet,javax
From: https://www.cnblogs.com/yuanshitianzun123/p/18528915

相关文章

  • 新高一暑假第一期集训新课【笛卡尔树】(补)
    新高一暑假第一期集训新课【笛卡尔树】(补)B.BeautifulPair如果构建一棵笛卡尔树的话那么两个点之间的\(max\)就在笛卡尔树的\(\operatorname{LCA}\)位置。所以对于每个位置维护一个线段树,然后每次暴力枚举小的那棵子树在大子树的线段树中查询即可。然后线段树合并或者......
  • Thread多线程
    多线程并发与并行(了解)并行(parallel):指多个事件任务在同一时刻发生(同时发生)。指在同一时刻,有多条指令在多个处理器上同时执行。单核CPU同一时刻只能处理一条指令,所以单核CPU做不到并行处理。并发(concurrency):指两个或多个事件在同一个微小的时间段内发生。指在同一个时刻只能有一......
  • 动态规划
    1.打家劫舍题目:打家劫舍滚动变量节省空间;因为不能连续取值,递推公式:当前最大值=max(上一个,上上一个+当前值)classSolution{public:introb(vector<int>&nums){intf0=0,f1=0;for(intx:nums){intnew_f=max(f1,f0+x);......
  • Spring-Converter类型转换器
    Converter在Spring3中引入了一个Converter接口,它支持从一个Object转为另一个Object。除了Converter接口之外,实现ConverterFactory接口和GenericConverter接口也可以实现我们自己的类型转换逻辑。Converter接口Converter<S,T>接口定义了从类型S转换为类型T的转换器。packa......
  • 阿里云手机验证码
    阿里云手机验证码在Java中使用阿里云的短信服务发送手机号验证码,你需要使用阿里云提供的SMSSDK。添加依赖<dependency><groupId>com.aliyun.dysmsapi</groupId><artifactId>dysmsapi</artifactId><version>1.0.0</version></dependency>......
  • 支付宝支付功能
    支付宝支付官网地址:https://open.alipay.com/支付宝(中国)网络技术有限公司[1]是国内的第三方支付平台,致力于提供“简单、安全、快速”的支付解决方案[2]。支付宝公司从2004年建立开始,始终以“信任”作为产品和服务的核心。旗下有“支付宝”与“支付宝钱包”两个独立品牌。自2......
  • 支付宝退款功能
    支付宝退款功能参考地址:https://opendocs.alipay.com/open/4b7cc5db_alipay.trade.refund?scene=common&pathHash=d98b006d1、引入依赖<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId></depende......
  • 分布式锁实现
    分布式锁实现分布式锁主流的实现方案:基于数据库实现分布式锁基于缓存(Redis等)基于Zookeeper每一种分布式锁解决方案都有各自的优缺点:高性能:Redis最高可靠性:zookeeper最高分布式锁的关键是多进程共享的内存标记(锁),因此只要我们在Redis中放置一个这样的标记(数据)就可......
  • JAVA反射
    反射java.lang.Class类Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。要想解剖一个类,必须先要获取到该类的Class对象。......
  • AtCoder Beginner Contest 378 E
    https://atcoder.jp/contests/abc378/tasks/abc378_ehttps://atcoder.jp/contests/abc378/editorial/11300#include<bits/stdc++.h>#definexfirst#defineysecond#defineall(x)(x).begin(),(x).end()#definelowbit(x)(x)&-(x)usingnamespacestd;ty......