JavaWeb Servlet实现网页登录功能
程序员文章站
2022-03-23 14:33:17
上次写了一篇jdbc工具类实现登录功能,但是只能在控制台实现输入用户名密码。这次使用了servlet来实现登录功能,可以通过在页面上输入账号密码,然后提交表单,查询数据库,从而实现登录功能。1、配置文...
上次写了一篇jdbc工具类实现登录功能,但是只能在控制台实现输入用户名密码。这次使用了servlet来实现登录功能,可以通过在页面上输入账号密码,然后提交表单,查询数据库,从而实现登录功能。
1、配置文件,导入jar包
2、创建数据库环境
use student; create table user( id int primary key auto_increment, username varchar(32), password varchar(32) ); insert into user values(null,'zhangsan','123'); insert into user values(null,'lisi','234');
3、在web目录下创建html页面
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>登录页面</title> </head> <body> <form action="/day14_request/loginservlet" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html>
4、在src下编写druid.properties文件
driverclassname=com.mysql.jdbc.driver url=jdbc:mysql://localhost:3306/student username=root password=root maxactive=10 maxwait=1000
5、创建包cn.itcast.domain,创建类user
package cn.itcast.domain; /* 用户的实体类 */ 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 + '\'' + '}'; } }
6、创建包cn.itcast.util,编写工具类jdbcutils
package cn.itcast.util; import com.alibaba.druid.pool.druiddatasourcefactory; import javax.sql.datasource; import java.io.ioexception; import java.io.inputstream; import java.sql.connection; import java.sql.sqlexception; import java.util.properties; /* jdbc工具类,使用durid连接池 */ public class jdbcutils { private static datasource datasource; static { try { //1、加载配置文件 properties properties = new properties(); inputstream resourceasstream = jdbcutils.class.getclassloader().getresourceasstream("druid.properties"); properties.load(resourceasstream); //2、初始化连接池对象 datasource = druiddatasourcefactory.createdatasource(properties); } catch (ioexception e) { e.printstacktrace(); } catch (exception e) { e.printstacktrace(); } } /** * 获取连接池对象 */ public static datasource getdatasource() { return datasource; } /** * 获取连接connection对象 */ public static connection getconnection() throws sqlexception { return datasource.getconnection(); } }
7、创建包cn.itcast.dao,创建类userdao,提供login方法
package cn.itcast.dao; import cn.itcast.domain.user; import cn.itcast.util.jdbcutils; import org.springframework.dao.dataaccessexception; import org.springframework.jdbc.core.beanpropertyrowmapper; import org.springframework.jdbc.core.jdbctemplate; /** * 操作数据库中user表的类 */ public class userdao { //声明jdbctemplate对象共用 private jdbctemplate jdbctemplate = new jdbctemplate(jdbcutils.getdatasource()); /** * 登录方法 * @param loginuser 只有用户和密码 * @return user 包含用户全部信息,没有查询到,返回null */ public user login(user loginuser) { try { //1、编写sql string sql = "select * from user where username = ? and password = ?"; //2、调用query方法 user user = jdbctemplate.queryforobject(sql, new beanpropertyrowmapper<user>(user.class), loginuser.getusername(),loginuser.getpassword()); return user; } catch (dataaccessexception e) { e.printstacktrace();//记录日志 return null; } } }
8、编写cn.itcast.web.servlet.loginservlet类
package cn.itcast.web.servlet; import cn.itcast.dao.userdao; import cn.itcast.domain.user; import org.apache.commons.beanutils.beanutils; 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.lang.reflect.invocationtargetexception; import java.util.map; @webservlet("/loginservlet") public class loginservlet extends httpservlet { protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { //1、设置编码 request.setcharacterencoding("utf-8"); /*//2、获取请求参数 string username = request.getparameter("username"); string password = request.getparameter("password"); //3、封装对象 user loginuser = new user(); loginuser.setusername(username); loginuser.setpassword(password);*/ //2、获取所有请求参数(这里使用beanutils来简化操作) map<string, string[]> parametermap = request.getparametermap(); //3.1 创建user对象 user loginuser = new user(); //3.2 使用beanutils对象 try { beanutils.populate(loginuser,parametermap); } catch (illegalaccessexception e) { e.printstacktrace(); } catch (invocationtargetexception e) { e.printstacktrace(); } //4、调用userdao的login方法 userdao userdao = new userdao(); user user = userdao.login(loginuser); //5、判断user if (user == null) { //登录失败 request.getrequestdispatcher("/failservlet").forward(request,response); } else { //登录成功 //存储数据 request.setattribute("user",user); //转发 request.getrequestdispatcher("/successservlet").forward(request,response); } } protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { this.dopost(request,response); } }
运行结果:
1、目录结构
2、运行界面
3、输入用户名密码均正确
4、跳转到成功登录界面
5、输入用户名或密码错误时
6、跳转登录失败界面
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Win11如何在Edge中开启IE模式?
下一篇: 古代御医治不好病,皇帝真的会让他们殉葬?