经典servlet+jsp+javabean登录模式举例

总体的结构如下图。
在这里插入图片描述

1 首先建立jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
this is  login

<form action="login" method="post" >
	用户名:<input type="text" name="username"><br/>
	密码: <input type="password" name="password"/><br/>
	<input type="submit" value="提交" />
</form>
</body>
</html>

2 在lib中添加驱动,在entity中创建User实体

package entity;

public class User {

	private Integer uid;
	private String username;
	private String password;
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	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 [uid=" + uid + ", username=" + username + ", password=" + password + "]";
	}
	
}

3 创建数据库连接类,方便调用连接

package utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbConnect {

	//连接数据库
    public static Connection getConn() {
        Connection conn = null;
        try {
            //加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
        try {
            conn = DriverManager.getConnection(url, "root", "123456");
            if (conn != null) {
                System.out.println("ok");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    //关闭数据库
    public static void closeConn(Connection conn){
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    ///test
/*    public static void main(String[] args) {
    	DbConnect.getConn();
	}*/
}

4 建立UserDao,实现用户和数据库之间的操作(crud)。

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import entity.User;
import utils.DbConnect;

public class UserDao {
//判断是否存在
	 public boolean userExist(String username) {
	        Connection conn = DbConnect.getConn();
	        //根据指定的用户名查询信息
	        String sql = "select * from users where username = ?";

	        try {
	            //获取PreparedStatement对象,用于执行数据库查询
	            PreparedStatement preparedStatement = conn.prepareStatement(sql);
	            preparedStatement.setString(1, username);
	            //执行查询获取结果集
	            ResultSet resultSet = preparedStatement.executeQuery();
	            while (!resultSet.next()) {
	                //如果没有此数据,证明该用户名可用
	                return true;
	            }
	            //释放资源,后创建的先销毁
	            resultSet.close();
	            preparedStatement.close();
	        } catch (SQLException e) {
	            e.printStackTrace();
	        } finally {
	        	DbConnect.closeConn(conn);
	        }

	        return true;
	    }
	 
	 
	 public User login(String username, String password) {
	        //实例化一个用户对象
	        User user =null;
	        Connection conn = DbConnect.getConn();
	        String sql = "select * from users where username = ? and password = ?";
	        try {
	            PreparedStatement ps = conn.prepareStatement(sql);
	            ps.setString(1, username);
	            ps.setString(2, password);
	            //执行查询获取结果集
	            ResultSet rs = ps.executeQuery();

	            //判断结果集是否有效,如过有效,则对用户进行赋值
	            while (rs.next()) {
	            	System.out.println("user: ");
	                user = new User();
	                //对用户对象进行复制
	                user.setUid(rs.getInt("uid"));
	                user.setUsername(rs.getString("username"));
	                user.setPassword(rs.getString("password"));
	                System.out.println(user);
	            }
	            //释放资源
	            rs.close();
	            ps.close();
	        } catch (SQLException e) {
	            e.printStackTrace();
	        } finally {
	        	DbConnect.closeConn(conn);
	        }

	        return user;
	}
}

5 创建login servlet,响应用户请求的接口

package servlet;

import java.io.IOException;
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 dao.UserDao;
import entity.User;

/**
 * Servlet implementation class login
 */
@WebServlet("/login")
public class login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	  @Override
	    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	      System.out.println("post");  
		  resp.setContentType("text/html;charset=utf-8");
	        req.setCharacterEncoding("utf-8");

	        String username = req.getParameter("username");
	        String password = req.getParameter("password");
	        UserDao userDao = new UserDao();
	        //根据密码查询用户
	        User user  = userDao.login(username, password);
	        //判断user是否为空
	        if (user != null) {
	            //将用户的对象放到session中
	            req.getSession().setAttribute("user", user);
	            //转发到result.jsp页面
	            req.getRequestDispatcher("message.jsp").forward(req, resp);
	            /**
	             response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参
	             数,如:
	             url?id=1.
	             request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求
	             能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而
	             sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
	             */
	        }else {
	            //登录失败
	            req.setAttribute("info","用户名或密码错误!");
	            req.getRequestDispatcher("message.jsp").forward(req, resp);
	        }
	    }

	    @Override
	    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	    	System.out.println("post");
	    	doPost(req, resp);
	    }

}

6 在web.xml中不用配置。。因为在这里插入图片描述

如果再配置,tomcat启动就会报错。

7 数据库数据建表(我用的是test数据库)

users | CREATE TABLE `users` (
  `uid` int(50) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

8 将项目添加到本地服务器,启动后访问如下地址。

http://localhost:8080/oldJavaWebTemplate/login.jsp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值