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日

相关文章

  • 深入讲解Java的对象头与对象组成

    深入讲解Java的对象头与对象组成 在Java中,每个对象都有一个对象头,用来存储对象的元数据信息,同时Java对象也由对象头和实例数据两个部分组成。了解Java对象的组成可以帮助我们更好地理解Java的内存模型。 Java对象的组成 Java对象是由对象头和实例数据两个部分组成的。在64位JVM中,对象头占用16Byte,实例数据大小不定,但至少为8Byt…

    Java 2023年5月26日
    00
  • springboot打包不同环境配置以及shell脚本部署的方法

    SpringBoot打包不同环境配置以及Shell脚本部署的方法 在实际的应用中,我们需要针对不同的环境(如开发、测试、生产)进行配置,同时我们也需要使用Shell脚本一键部署以简化部署操作。 下面就以一个基础的Spring Boot应用为例,介绍一下如何实现不同环境配置以及Shell脚本部署。 1.不同环境配置 1.1 环境配置文件 首先,在resourc…

    Java 2023年5月20日
    00
  • Java基础:流Stream详解

    Java基础:流Stream详解 什么是流Stream? Java中的流(Stream)是指代表数据流通的对象。Stream与java.io包中的流不同,Stream没有io操作,是一种抽象的数据结构,是一种更高级、更便捷、更优雅的处理数据的方式。Stream的目的是通过类似于流水线的方式来处理集合中的元素,通过流的操作,可以将对集合的处理变得更加简单、减少…

    Java 2023年5月26日
    00
  • java中常见的死锁以及解决方法代码

    下面是Java中常见的死锁以及解决方法的完整攻略。 什么是死锁? 死锁是指在并发编程中,两个或多个线程互相持有对方需要的资源,从而造成它们都无法继续执行的情况。此时,程序会进入一个死循环状态,无法正常运行,也无法进行下一步操作。 常见的死锁场景 以下是一些常见的导致死锁的场景: 1. 多个线程竞争同一资源 多个线程同时竞争同一个资源,如果每个线程都持有该资源…

    Java 2023年5月23日
    00
  • Java分支结构程序设计实例详解

    Java分支结构程序设计实例详解 本文将介绍Java分支结构程序设计的实例与应用。主要包括if语句、switch语句和三元运算符的使用方法、注意事项、实例分析等。 if语句 if语句是最常用的分支结构,用于根据不同情况执行不同的代码块。它的语法结构如下: if (布尔表达式) { // 如果布尔表达式为true,则执行该代码块 } 其中布尔表达式可以是任何返…

    Java 2023年5月23日
    00
  • 浅谈springboot自动装配原理

    浅谈Spring Boot自动装配原理 Spring Boot是一个基于Spring框架的快速开发框架,它可以帮助我们快速构建Web应用程序。Spring Boot提供了许多自动配置类,可以帮助我们自动配置应用程序。本文将深入探讨Spring Boot自动装配的原理。 自动装配原理 Spring Boot的自动装配原理是基于Spring框架的自动装配原理。S…

    Java 2023年5月14日
    00
  • 通过Kettle自定义jar包供javascript使用

    下面就通过以下几个步骤来详细讲解如何通过Kettle自定义jar包供javascript使用: 编写自定义jar包 首先,我们需要编写一个自定义jar包,来供Kettle中的javascript脚本使用。在编写自定义jar包之前,我们需要先了解一些必要的知识: 自定义jar包需要包含一个类或多个类,这些类需要实现Kettle中定义的某个Java接口,目的是为…

    Java 2023年5月26日
    00
  • 使用java模拟简单的tomcat的方法详解

    使用Java模拟简单的Tomcat的方法详解 目的 本文的目的是讲解如何使用Java编写一个简单的Tomcat,以及这个Tomcat的基本原理和用法。 前置知识 在阅读本文之前,你需要掌握一些Java编程基础,如基本语法、OOP思想、多线程等知识。同时,你需要对Tomcat有一定的了解,如Tomcat的工作原理、Servlet容器等。 步骤 步骤一:创建Ht…

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