轻量级前端框架助力开发者提升项目效率与性能
668
2023-03-03
Servlet实现简单的用户登录功能实例代码
1、创建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 {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.初始化连接池对象
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource(){
return ds;
}
/**
* 获取连接Connection对象
*/
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() {
// 连接使用c3p0进行获取
// 使用c3p0数据库连接池获取连接
Connection connection = null;
try {
connection = comboPooledDataSource.getConnection();
} catch (SQLException e) {
System.err.println("获取连接失败");
return null;
}
return connection;
}
// DML方法
// 不支持事务 单条sql语句执行
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;
}
// DML方法
// 支持事务 多条sql语句执行
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;
}
// 查询dql语句方法
public static
ArrayList
try {
// 获取连接
Connection con = getCon();
// 准备预编译对象
PreparedStatement ps = con.prepareStatement(sql);
// 获取元数据 准备存储所有列名的数组
ResultSetMetaData metaData = ps.getMetaData();
// 创建指定长度用于存储列名的数组
String[] names = new String[metaData.getColumnCount()];
// 循环为names数组进行赋值
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]);
}
// 执行sql返回结果集
ResultSet rs = ps.executeQuery();
while (rs.next()) {
// 每一行数据就是一个对象
// 使用反射创建对象
E obj = c.newInstance();
// 当前行所有列名 在names数组中存储
// 循环names数组取出当前行对应数据
for (String colname : names) {
Object value = rs.getObject(colname);// 获取列名对应值
// 将值存入相应对象
// 使用反射获取类中同名的属性对象
Field field = c.getDeclaredField(colname);http://
// 私有属性使用前必须赋权
field.setAccessible(true);
// 调用属性对象的set方法为指定对象进行赋值
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 {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.初始化连接池对象
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 {
//声明JDBCTemplate对象共用
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* @param loginUser 只有用户名和密码
* @return user包含用户全部数据,没有查询到,返回null
*/
public User login(User loginUser){
try tklHr{
//1.编写sql
String sql = "select * from user where username = ? and password = ?";
//2.调用query方法
User user = template.queryForObject(sql,
new BeanPropertyRowMapper
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 {
//1.设置编码
req.setCharacterEncoding("utf-8");
//2.获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//3.封装user对象
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);
//4.调用UserDao的login方法
UserDao dao = new UserDao();
User user = dao.login(loginUser);
//5.判断user
if(user == null){
//登录失败
req.getRequestklHrtDispatcher("/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 {
//获取request域中共享的user对象
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);
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~