Servlet实现用户登录功能
1、创建html界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
2 、创建数据库
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(32) UNIQUE NOT NULL,
PASSWORD VARCHAR(32) NOT NULL
);
3、创建用户实体类
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
4、创建jdbc工具类
这里使用的是c3p0 / druid 两种数据库连接池技术 分别需要在项目导入相应的jar包
public class JDBCUtils {
private static DataSource ds ;
static {
try {
Properties pro = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static DataSource getDataSource(){
return ds;
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
system.out.println("=============================================================")
public class JDBCButil {
final static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
public static Connection getCon() {
Connection connection = null;
try {
connection = comboPooledDataSource.getConnection();
} catch (SQLException e) {
System.err.println("获取连接失败");
return null;
}
return connection;
}
public static boolean DML(String sql, Object... o) {
Connection con = getCon();
try {
PreparedStatement ps = con.prepareStatement(sql);
for (int i = 0; i < o.length; i++) {
ps.setObject((i + 1), o[i]);
}
ps.executeUpdate();
} catch (SQLException e) {
System.out.println("查询执行失败:" + sql);
return false;
}
return true;
}
public static boolean DML(Connection con, String sql, Object... o) {
try {
PreparedStatement ps = con.prepareStatement(sql);
for (int i = 0; i < o.length; i++) {
ps.setObject((i + 1), o[i]);
}
ps.executeUpdate();
} catch (SQLException e) {
System.out.println("查询执行失败:" + sql);
return false;
}
return true;
}
public static <E> ArrayList<E> DQL(String sql, Class<E> c, Object... o) {
ArrayList<E> list = new ArrayList<>();
try {
Connection con = getCon();
PreparedStatement ps = con.prepareStatement(sql);
ResultSetMetaData metaData = ps.getMetaData();
String[] names = new String[metaData.getColumnCount()];
for (int i = 0; i < names.length; i++) {
names[i] = metaData.getColumnLabel(i + 1);
}
for (int i = 0; i < o.length; i++) {
ps.setObject(i+1, o[i]);
}
ResultSet rs = ps.executeQuery();
while (rs.next()) {
E obj = c.newInstance();
for (String colname : names) {
Object value = rs.getObject(colname);
Field field = c.getDeclaredField(colname);
field.setAccessible(true);
field.set(obj, value);
}
list.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return list;
}
}ublic class JDBCUtils {
private static DataSource ds ;
static {
try {
Properties pro = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static DataSource getDataSource(){
return ds;
}
5、创建提供登录方法的userdao
public class UserDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
public User login(User loginUser){
try {
String sql = "select * from user where username = ? and password = ?";
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(), loginUser.getPassword());
return user;
} catch (DataAccessException e) {
e.printStackTrace();
return null;
}
}
}
6、编写登录的servlet
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);
UserDao dao = new UserDao();
User user = dao.login(loginUser);
if(user == null){
req.getRequestDispatcher("/failServlet").forward(req,resp);
}else{
req.setAttribute("user",user);
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
7、 编写FailServlet和SuccessServlet类
public class SuccessServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = (User) request.getAttribute("user");
if(user != null){
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("登录成功!"+user.getUsername()+",欢迎您");
}
}
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("登录失败,用户名或密码错误");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
本文地址:https://blog.csdn.net/weixin_45289374/article/details/110498412