Servlet实现简单的用户登录功能实例代码

网友投稿 668 2023-03-03

Servlet实现简单的用户登录功能实例代码

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 DQL(String sql, Class c, Object... o) {

ArrayList list = new 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(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 {

//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小时内删除侵权内容。

上一篇:微信小程序插件(微信小程序链接)
下一篇:影视小程序添加插件(小程序视频插件)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~