java web简单的注册登录界面实现(servlet+mysql+jsp+idea)

这篇博客通过Servlet+MySQL+JSP在IntelliJ IDEA中实现了Java Web的注册登录功能。首先创建实体类封装数据,接着编写数据库连接类进行查询和更新操作。然后实现UserDao类,包含用户操作方法。接着展示了注册和登录的简单JSP页面设计及效果图,最后编写了注册和登录的Servlet处理逻辑。

首先写一个实体类

package pojo;

public class U {
    private String username;
    private String password;

    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 "U{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

这段代码是用来对实体类进行数据的封装

下面在写一个数据库的连接类,包括了查询和更新的封装代码

package utils;



import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;


public class connectionUtils {
    private static String username ="admin";
    private static String password ="DEFdef123!";
    private static String url="jdbc:mysql://localhost:3306/db1";
    private static String driver="com.mysql.jdbc.Driver";
    private static Connection conn  ;
    private static Statement ts ;
    private static ResultSet  rs;
   static{
       try {
           Class.forName(driver);
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
   }


    //封装连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,username,password);
    }
    //封装流的关闭
    public static void jdbcClose(ResultSet rs,Statement ts,Connection conn) throws SQLException {
        try{
            rs.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            if(rs!=null){
                rs=null;
            }
        }
        ts.close();
        if(ts!=null){
            ts=null;
        }
        conn.close();
        if(conn!=null){
            conn=null;
        }
    }
    //更新封装
    public static int update(String sql,Object...argv) throws SQLException {
        //定义一个变量PreparedStatement
        PreparedStatement ps =null;
        //定义一个Connection类型的变量
        Connection conn;
        conn=getConnection();
        ps=conn.prepareStatement(sql);//预编译完成
        //设置值
        for(int i=0;i<argv.length;i++){
            //索引是从1开始,所以是i+1
            ps.setObject(i+1,argv[i]);
        }
        int bset=ps.executeUpdate();
        System.out.println(bset);
        //关闭资源
        jdbcClose(ps,conn);
        return bset;
    }
    //查询封装
    public static   <T> T query(Class<T> clazz,String sql,Object...argv) throws SQLException, NoSuchFieldException, IllegalAccessException, InstantiationException {
        T entity=null;
        PreparedStatement ps;
        Connection conn;
        conn=getConnection();
        ps=conn.prepareStatement(sql);
        for(int i=0;i<argv.length;i++){
            ps.setObject(i+1,argv[i]);
        }
        ResultSet rs =ps.executeQuery();
        //创建一个集合,用于存储属性和对应的属相值
        //创建实例
        entity=clazz.newInstance();
        Map<String,Object> map =new HashMap<String,Object>();
        //得到ResultSetMetaData对象,获取此 ResultSet 对象的列的编号、类型和属性。
        ResultSetMetaData rsmd =rs.getMetaData();
        if(rs.next()){
            //获取总列数并且进行遍历
            for(int i=0;i<rsmd.getColumnCount();i++){
                //列的名称
                //getColumnLabel获取用于打印输出和显示的指定列的建议标题,索引从1开始
                String filename=rsmd.getColumnName(i+1);
                //列值
                Object obj=rs.getObject(filename);
                map.put(filename,obj);
            }

        }
        //遍历map
        for(Map.Entry<String,Object> entry:map.entrySet()){
            String filename2=entry.getKey();
            Object obj2=entry.getValue();
            Field f =entity.getClass().getDeclaredField(filename2);
            f.setAccessible(true);
            f.set(entity,obj2);
        }
        return entity;
    }

    private static void jdbcClose(PreparedStatement ps, Connection conn) throws SQLException {
        ps.close();
        if(ps!=null){
            ps=null;
        }
        conn.close();
        if(conn!=null){
            conn=null;
        }
    }
}

数据库类写完之后,继续写一个UseDao类,里面主要包括了一些对用户操作的方法,代码如下

package dao;

import pojo.U;
import utils.connectionUtils;

import java.sql.SQLException;

public class UserDao  {

    //添加用户
    public static boolean addUser(U u) throws SQLException {
        boolean r =false;
        String sql ="insert into u(username,password) values(?,?)";
       int num= connectionUtils.update(sql,u.getUsername(),u.getPassword());
         if(num>0){
             r=true;
         }
         return r;
    }
    //查询用户
    public U queryByName(String username) throws SQLException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        String sql ="select * from u where username=?";
        U user=connectionUtils.query(U.class,sql,username);
       return  user;
    }
}

下面来写一个简单的注册的jsp

<%--
  Created by IntelliJ IDEA.
  pojo.User: Administrator
  Date: 2020/8/4 0004
  Time: 22:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<html>
  <head>
    <title>注册</title>
  </head>
  <body>
  <form action="AddServlet" method="post">
    <label for="username">用户名</label>
    <input type="text" name="username" id="username">
    <label for="password">密码</label>
    <input type="text" name="password" id="password">


    <input type="submit" value="提交">
  </form>
  </body>
</html>

效果图展示,有点丑

 下来就是添加用户的servlet界面了

package Servlet;

import dao.UserDao;
import pojo.U;

import java.io.IOException;


import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("GBK");
        response.setContentType("text/html;charset = GBK");
        PrintWriter out =response.getWriter();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        U user = new U();
        user.setUsername(username);
        user.setPassword(password);
        System.out.println("23232323");
        UserDao u =new UserDao();
       HttpSession session =request.getSession();
       //获取时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
       String regeTime = sdf.format(new Date());
       session.setAttribute("user",user);
       session.setAttribute("regeTime",regeTime);
        session.setAttribute("message","你注册成功了");

        try {
            if(u.addUser(user)){
                System.out.println("注册成功");
                request.getRequestDispatcher("info.jsp").forward(request,response);
            }
            else{
                System.out.println("注册失败");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        //从定向

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

接下来我们写登录的jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/8/5 0005
  Time: 14:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<html>
<head>
    <title>登录界面</title>
</head>
<body style="background-color:#FAEAEA">
<form action="LogoServlet" method="post">
    <label for="username">用户名</label>
    <input type="text" name="username" id="username">
    <label for="password">密码</label>
    <input type="text" name="password" id="password">


    <input type="submit" value="提交">
</form>
</body>
</html>

登录界面如下:

 对应的LogoSevlet代码如下:

package Servlet;

import   dao.UserDao;
import pojo.U;

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 java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

@WebServlet("/LogoServlet")
public class LogoServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("GBK");
        response.setContentType("text/html;charset = GBK");
        PrintWriter out =response.getWriter();
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        UserDao userDao =new UserDao();

        try {
            U u1= userDao.queryByName(username);
            System.out.println(u1);
            if(u1.getPassword().equals(password)&&username.equals(u1.getUsername())){
                System.out.println("登录成功了");
                request.getRequestDispatcher("LogoSucess.jsp").forward(request,response);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

登录成功的界面

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值