jsp+dao+bean+servlet(MVC模式)实现简单用户登录和注册页面

这里是JSP+DAO+Bean+Servlet四个技术实现MVC模式的简单用户登录与注册的攻略。我们使用MySQL作为数据库。

1. 创建数据库表

首先我们需要创建两个表:用户表和用户信息表。

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `t_user_info` (
  `id` int(11) NOT NULL,
  `realname` varchar(50) DEFAULT NULL,
  `gender` varchar(10) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_id` FOREIGN KEY (`id`) REFERENCES `t_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 编写Java Bean

我们需要针对用户表和用户信息表创建Java Bean。

public class User implements Serializable {
    private int id;
    private String username;
    private String password;
    private String email;

    //getters and setters
}

public class UserInfo implements Serializable {
    private int id;
    private String realname;
    private String gender;
    private Date birthday;
    private String address;

    //getters and setters
}

3. 创建DAO层

DAO层负责处理数据库操作,主要包含增删改查。

public interface UserDao {
    void addUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
    User getUserById(int id);
    User getUserByUsername(String username);
    List<User> getAllUsers();
}

public interface UserInfoDao {
    void addUserInfo(UserInfo info);
    void updateUserInfo(UserInfo info);
    UserInfo getUserInfoById(int id);
}

使用JdbcTemplate工具类实现DAO层:

public class UserDaoImpl implements UserDao {
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void addUser(User user) {
        String sql = "insert into t_user (username,password,email) values (?,?,?)";
        jdbcTemplate.update(sql,new Object[]{user.getUsername(),user.getPassword(),user.getEmail()});
    }

    public void updateUser(User user) {
        String sql = "update t_user set username = ?,password = ?,email = ? where id = ?";
        jdbcTemplate.update(sql,new Object[]{user.getUsername(),user.getPassword(),user.getEmail(),user.getId()});
    }

    public void deleteUser(int id) {
        String sql = "delete from t_user where id = ?";
        jdbcTemplate.update(sql,new Object[]{id});
    }

    public User getUserById(int id) {
        String sql = "select * from t_user where id = ?";
        List<User> userList = jdbcTemplate.query(sql, new Object[]{id}, new BeanPropertyRowMapper(User.class));
        if(userList.isEmpty()){
            return null;
        }
        return userList.get(0);
    }

    public User getUserByUsername(String username) {
        String sql = "select * from t_user where username = ?";
        List<User> userList = jdbcTemplate.query(sql, new Object[]{username}, new BeanPropertyRowMapper(User.class));
        if(userList.isEmpty()){
            return null;
        }
        return userList.get(0);
    }

    public List<User> getAllUsers() {
        String sql = "select * from t_user";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));
    }
}

public class UserInfoDaoImpl implements UserInfoDao {
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void addUserInfo(UserInfo info) {
        String sql = "insert into t_user_info (id,realname,gender,birthday,address) values (?,?,?,?,?)";
        jdbcTemplate.update(sql,new Object[]{info.getId(),info.getRealname(),info.getGender(),info.getBirthday(),info.getAddress()});
    }

    public void updateUserInfo(UserInfo info) {
        String sql = "update t_user_info set realname = ?,gender = ?,birthday = ?,address = ? where id = ?";
        jdbcTemplate.update(sql,new Object[]{info.getRealname(),info.getGender(),info.getBirthday(),info.getAddress(),info.getId()});
    }

    public UserInfo getUserInfoById(int id) {
        String sql = "select * from t_user_info where id = ?";
        List<UserInfo> userInfoList = jdbcTemplate.query(sql, new Object[]{id}, new BeanPropertyRowMapper(UserInfo.class));
        if(userInfoList.isEmpty()){
            return null;
        }
        return userInfoList.get(0);
    }
}

4. 编写Service层

Service层实现业务逻辑,调用DAO层进行增删改查。

public interface UserService {
    void register(User user,UserInfo info);
    User login(String username,String password);
}

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    private UserInfoDao userInfoDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void setUserInfoDao(UserInfoDao userInfoDao) {
        this.userInfoDao = userInfoDao;
    }

    public void register(User user, UserInfo info) {
        userDao.addUser(user);
        info.setId(user.getId());
        userInfoDao.addUserInfo(info);
    }

    public User login(String username, String password) {
        User user = userDao.getUserByUsername(username);
        if(user == null){
            return null;
        }
        if(!user.getPassword().equals(password)){
            return null;
        }
        return user;
    }
}

5. 编写Servlet层

Servlet层作为控制器,将请求转发给Service层处理。

public class RegisterServlet extends HttpServlet {
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/jsp/register.jsp").forward(request,response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String email = request.getParameter("email");

        String realname = request.getParameter("realname");
        String gender = request.getParameter("gender");
        String birthdayStr = request.getParameter("birthday");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birthday = null;
        try {
            birthday = sdf.parse(birthdayStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        String address = request.getParameter("address");

        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setEmail(email);

        UserInfo info = new UserInfo();
        info.setRealname(realname);
        info.setGender(gender);
        info.setBirthday(birthday);
        info.setAddress(address);

        userService.register(user,info);

        response.sendRedirect(request.getContextPath() + "/login.do");
    }
}

public class LoginServlet extends HttpServlet {
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        User user = userService.login(username,password);

        if(user != null){
            request.getSession().setAttribute("user",user);
            response.sendRedirect(request.getContextPath() + "/index.do");
        }else {
            request.setAttribute("errorMsg","用户名或密码错误");
            request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
        }
    }
}

6. 编写JSP页面

最后使用JSP页面展示页面。

<!--register.jsp-->
<form method="post" action="${pageContext.request.contextPath}/register.do">
  <label>用户名:</label>
  <input type="text" name="username" required><br>

  <label>密码:</label>
  <input type="password" name="password" required><br>

  <label>确认密码:</label>
  <input type="password" name="repassword" required><br>

  <label>邮箱:</label>
  <input type="email" name="email" required><br>

  <label>真实姓名:</label>
  <input type="text" name="realname" ><br>

  <label>性别:</label>
  <input type="radio" name="gender" value="男">男
  <input type="radio" name="gender" value="女">女<br>

  <label>生日:</label>
  <input type="date" name="birthday" ><br>

  <label>地址:</label>
  <input type="text" name="address" ><br>

  <input type="submit" value="注册">
</form>

<!--login.jsp-->
<form method="post" action="${pageContext.request.contextPath}/login.do">
  <label>用户名:</label>
  <input type="text" name="username" required><br>

  <label>密码:</label>
  <input type="password" name="password" required><br>

  <input type="submit" value="登录">
</form>

以上是JSP+DAO+Bean+Servlet(MVC模式)实现简单用户登录和注册页面的完整攻略。下面是两条示例说明:

  • 示例1:将用户对象传递给UserController的两个方法,获取用户列表和根据ID获取用户:
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public String list(Model model){
        List<User> userList = userService.getAllUsers();
        model.addAttribute("userList",userList);
        return "user/list";
    }

    @RequestMapping("/get")
    public String get(@RequestParam("id")int id,Model model){
        User user = userService.getUserById(id);
        model.addAttribute("user",user);
        return "user/view";
    }
}
  • 示例2:通过注册http servlet将UserService依赖注入到注册servlet:
    <bean id="userService" class="com.example.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
        <property name="userInfoDao" ref="userInfoDao"/>
    </bean>

    <bean id="registerServlet" class="com.example.servlet.RegisterServlet">
        <property name="userService" ref="userService"/>
    </bean>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp+dao+bean+servlet(MVC模式)实现简单用户登录和注册页面 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 使用spring data的page和pageable如何实现分页查询

    使用Spring Data的Page和Pageable可以很方便地实现分页查询。下面是实现分页查询的完整攻略: 1. 添加依赖 首先需要在pom.xml中添加Spring Data JPA和对应的数据库驱动依赖: <dependency> <groupId>org.springframework.data</groupId&gt…

    Java 2023年5月20日
    00
  • GC日志有哪些级别?

    GC日志在Java应用程序中是非常重要的一部分,它可以帮助开发人员了解垃圾回收的运行情况,优化垃圾回收的效率和内存使用。GC日志一般分为以下几个级别: Verbose GC :默认情况下,JVM不会记录垃圾回收的日志。我们需要通过设置“-verbose:gc”参数来启用Verbose GC日志。Verbose GC日志主要记录了垃圾回收的时间、空间以及回收后…

    Java 2023年5月11日
    00
  • Java C++ leetcode执行一次字符串交换能否使两个字符串相等

    题目描述: 给定字符串t和字符串s,你需要执行一次字符串交换,将t中的某个位置上的字符替换为另外一个字符。 请你判断在执行若干次字符串交换操作后,两个字符串是否可以变成相同的字符串。 示例1: 输入: s = “bank”, t = “kanb”输出: true解释: 交换 s[1] 和 t[1],然后两个字符串就相等了。 示例2:输入: s = “atta…

    Java 2023年5月27日
    00
  • Java中枚举的实现原理介绍

    Java中枚举的实现原理介绍 什么是枚举 枚举(enum)是Java中的一种数据类型,它允许将一组相关的常量组织在一起,并且可以用枚举类型的名称来引用这些常量,以提高代码的可读性和稳定性。 在使用枚举类型时,我们可以通过枚举类型的名称来访问某个枚举常量,也可以通过枚举常量的名称来获得该常量的值,枚举类型可以与switch语句一起使用,提高代码的可读性。 Ja…

    Java 2023年5月26日
    00
  • 宝塔面板配置及部署javaweb教程(全网最全)

    宝塔面板配置及部署javaweb教程(全网最全) 本教程介绍如何使用宝塔面板快速配置及部署javaweb应用。 步骤一:安装宝塔面板 访问宝塔官网[https://www.bt.cn/],下载适用于您服务器系统的安装包。 将下载好的安装包上传到服务器,执行安装命令。 按照提示进行安装即可。 步骤二:添加网站 登录到宝塔面板后台。 点击左侧导航栏中的“网站”,…

    Java 2023年5月19日
    00
  • 使用 Java 类 实现Http协议

    使用Java类实现Http协议的步骤如下: 1. 了解HTTP协议 HTTP协议是一种应用层协议,用于在Web浏览器和Web服务器之间传输数据。其规范有多个版本,包括HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0等。在使用Java类实现HTTP协议之前,需要了解HTTP协议的基本原理和规范。 2. 使用Java类发送HTTP请求 Ja…

    Java 2023年5月18日
    00
  • SpringBoot路径映射实现过程图解

    下面是关于“SpringBoot路径映射实现过程图解”的完整攻略,包含两个示例说明。 SpringBoot路径映射实现过程图解 在SpringBoot中,我们可以使用注解来实现路径映射。路径映射是指将HTTP请求映射到相应的处理方法上。本文将介绍SpringBoot中路径映射的实现过程,并提供两个示例说明。 实现过程 在SpringBoot中,我们可以使用@…

    Java 2023年5月17日
    00
  • 如何自己动手写SQL执行引擎

    如何自己动手写SQL执行引擎 要自己动手写一个SQL执行引擎,需要掌握以下几个步骤: 设计关系型数据库 构建SQL解析器 构建执行计划 执行查询语句 下面逐个步骤进行详细讲解: 设计关系型数据库 在设计关系型数据库时,需要考虑以下几个方面: 数据表设计:每个表需要设计对应的字段、数据类型、主键等信息。 索引设计:需要根据查询需求设计合适的索引,提高查询效率。…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部