考古Servlet+JDBC实现简约的登录注册界面

简介: 考古Servlet+JDBC实现简约的登录注册界面

效果展示

登录

注册

登陆成功

查询登陆成功

注册成功

Servlet接口

接口包括五个方法

  • void init(ServletConfig config)
  • ServletConfig getServletConfig()
  • void service(ServletRequest request, ServletResponse response)
  • String getServletInfo()
  • void destroy()
GenericServlet抽象类

实现Servlet、ServletConfig、Serializable接口,需重写service方法。

HttpServlet类

继承GenericServlet基础上的扩展,子类必须重写一个方法。

一般只需重写doGet和doPost方法。

  • doGet
  • doPost
  • doPut
  • doDelete

Servlet创建方式

实现Servlet接口

直接继承原生的Servlet,较为麻烦

package com.yma16;
import javax.servlet.*;
import java.io.IOException;
public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("测试1");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
    }
}
继承HttpServlet

大部分开发人员推荐的创建方式,重写doGet和doPost方法

@WebServlet("/hello")//value urlpattern
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        response.getWriter().print("测试!");
    }
    protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
    {
        doGet( request,response);
    }
}

实现登录注册

功能逻辑

传统的分为三层

  • Entity(写数据库实体类)
  • Dao(数据库表的增删改查)
  • Service(调用Dao实现登陆注册)

细化的话还可以多一层requestmaping

cookie传递参数给前端界面

QreryRunner类的方法实现增删改查

query(connection conn,String sql,Object[] params,ResultSetHandler rsh)

执行查询




update(connection conn,String sql,Object[] params,ResultSetHandler rsh)

执行插入、更新、删除



BeanHandler

将结果的第一行数据封装到对应的JavaBean实例中

配置mysql连接
package com.yma16.batabase;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.DbUtils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class Dbutils {
    private static DruidDataSource ds;
    private static final ThreadLocal<Connection> THREAD_LOCAL=new ThreadLocal<>();
    static{
        Properties properties=new Properties();
        InputStream inputStream= DbUtils.class.getResourceAsStream("/mysqldatabase.properties");//mysql连接
        try{
            properties.load(inputStream);
            ds=(DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        }catch (IOException e)
        {
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static Connection getConnection(){
        Connection connection=THREAD_LOCAL.get();
        try{
            if(connection==null)
            {
                connection=ds.getConnection();
                THREAD_LOCAL.set(connection);
            }
        }catch (SQLException e)
        {
            e.printStackTrace();
        }
        return connection;
    }
    public static void begin(){
        Connection connection=null;
        try{
            connection=getConnection();
            connection.setAutoCommit(true);
        }catch (SQLException e){
            e.printStackTrace();
        }
    }
    public static void commit(){
        Connection connection=null;
        try{
            connection=getConnection();
            connection.commit();
        }catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally {
            closeAll(connection,null,null);
        }
    }
    public static void rollback()
    {
        Connection connection=null;
        try
        {
            connection=getConnection();
            connection.rollback();//回滚
        }catch (SQLException e)
        {
            e.printStackTrace();
        }finally {
            closeAll(connection,null,null);
        }
    }
    public static void closeAll(Connection connection, Statement statement, ResultSet resultset)
    {
        try{
            if(resultset!=null){
                resultset.close();
            }
            if(statement!=null)
            {
                statement.close();
            }
            if(connection!=null)
            {
                connection.close();
                THREAD_LOCAL.remove();
            }
        }catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
}
Entity

实体对应数据库表user

package com.yma16.entity;
public class User {
    private String username,password;//对应数据库user
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                "password='" + password + '\'' +
                '}';
    }
}
Dao

数据增删改查接口

package com.yma16.dao;
import com.yma16.entity.User;
import java.util.List;
public interface UserDao {//功能接口
    public User insert(String username,String password);//添加数据
    public User select(String username);//查询
    public int delete(String username);//删除数据
    public int update(User user);//
    public List<User> selectAll();//查找
}

接口实现类

package com.yma16.dao;
import com.yma16.batabase.Dbutils;
import com.yma16.entity.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class UserDaoImpl implements UserDao{//接口实现类
    private QueryRunner queryRunner=new QueryRunner();
    @Override
    public User insert(String username,String password) {
        System.out.println("sql插入数据");
        try{
//            String sql="select username,password from user where username=? and password=?;";
            String insertsql="insert into user values(?,?)";
            String selectsql="select username,password from user where username=? and password=?";
            queryRunner.update(Dbutils.getConnection(),insertsql,username,password);//插入语句实现
            System.out.println("loading 插入数据");
            User user=queryRunner.query(Dbutils.getConnection(),selectsql,new BeanHandler<User>(User.class),username,password);//查询是否存在
            return user;//user
        }catch (SQLException e)
        {
            System.out.println("error");
            e.printStackTrace();
        }
        return null;
    }
    @Override
    public User select(String username) {
        System.out.println("sql根据username查询");
        try{
            String sql="select username,password from user where username=?";
            User user=queryRunner.query(Dbutils.getConnection(),sql,new BeanHandler<User>(User.class),username);
            return user;//user
        }catch (SQLException e)
        {
            System.out.println("error");
            e.printStackTrace();
        }
        return null;
    }
    @Override
    public int delete(String username) {
        System.out.println("sql根据username删除");
        try{
            User user=queryRunner.query(Dbutils.getConnection(),"delete from user where username=?;",new BeanHandler<User>(User.class),username);
            return 1;//删除成功
        }catch (SQLException e)
        {
            e.printStackTrace();
        }
        return 0;
    }
    @Override
    public int update(User user) {
//      更新数据
        return 0;
    }
    @Override
    public List<User> selectAll() {
        try{
            List<User> users=queryRunner.query(Dbutils.getConnection(),"select * from user",new BeanListHandler<User>(User.class));
            return users;
        }catch (SQLException e)
        {
            e.printStackTrace();
        }
        return null;
    }
}
Service

登陆注册接口

package com.yma16.service;
import com.yma16.entity.User;
import java.util.List;
public interface UserService {
    public User register(String name,String password);//注册
    public User login(String name, String password);//登陆
    public List<User> showAllAdmin();//查询
}

接口实现

package com.yma16.service;
import com.yma16.batabase.Dbutils;
import com.yma16.dao.UserDao;
import com.yma16.dao.UserDaoImpl;
import com.yma16.entity.User;
import java.util.List;
public class UserServiceImpl implements UserService{//实现service接口
    private UserDao userdao=new UserDaoImpl();//user接口功能
    @Override
    public User register(String username, String password) {
        User result=null;
        try{
            Dbutils.begin();
            User user=userdao.insert(username,password);//插入用户名和密码
            if(user!=null){
                if(user.getPassword().equals(password))
                {
                    result=user;//查询存在则给result
                }
            }
            Dbutils.commit();
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        return result;
    }
    @Override
    public User login(String username, String password) {
        User result=null;
        System.out.println("loading login");
        try{
            Dbutils.begin();
            User user=userdao.select(username);//名字查询
            System.out.println(user);//查询的结果
            if(user!=null){
                if(user.getPassword().equals(password))
                {
                    result=user;//查询存在则给result(对比)
                }
            }
            Dbutils.commit();
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        return result;
    }
    @Override
    public List<User> showAllAdmin() {
        List<User> users=null;
        try{
            Dbutils.begin();
            users=userdao.selectAll();//查询所用user
            Dbutils.commit();
        }catch (Exception e)
        {
            Dbutils.rollback();
            e.printStackTrace();
        }
        return users;
    }
}
servlet调用service

登陆调用service的login

User user=userService.login(username,password);//调用sql查询

注册调用service的register

User user=userService.register(username,password);//注册

github仓库

代码:我的仓库


目录
相关文章
|
1月前
|
Java 应用服务中间件 数据库
Servlet实现注册登录列表页面及其相互跳转功能
Servlet实现注册登录列表页面及其相互跳转功能
49 1
|
6天前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
10 0
|
6天前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
7 0
|
12天前
|
Java 关系型数据库 MySQL
servlet+jsp+jdbc 实现增删改查 的同学录
servlet+jsp+jdbc 实现增删改查 的同学录
|
1月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
57 0
|
1月前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
40 5
|
1月前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
36 1
|
3天前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
|
3天前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
|
3天前
|
缓存 小程序 前端开发
Java服务器端技术探秘:Servlet与JSP的核心原理
【6月更文挑战第23天】Java Web开发中的Servlet和JSP详解:Servlet是服务器端的Java小程序,处理HTTP请求并响应。生命周期含初始化、服务和销毁。创建Servlet示例代码展示了`doGet()`方法的覆盖。JSP则侧重视图,动态HTML生成,通过JSP脚本元素、声明和表达式嵌入Java代码。Servlet常作为控制器,JSP处理视图,遵循MVC模式。优化策略涉及缓存、分页和安全措施。这些技术是Java服务器端开发的基础。