首先写一个实体类
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 {
}
}
登录成功的界面

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

被折叠的 条评论
为什么被折叠?



