Java实现登录与注册页面

网友投稿 241 2022-10-10

Java实现登录与注册页面

用java实现的登录与注册页面,实现了客户端(浏览器)到服务器(Tomcat)再到后端(servlet程序)数据的交互。这里在注册页面加入了验证码验证。

注册的html代码,页面非常丑!!请见谅。。

注册页面

密码:

确认密码:

性别:

rap

篮球

验证码:

注册页面截图

这里需要注意的是我用的是Tomcat服务器,因为它其中没有mysql驱动,所以需要手动添加到Tomcat的lib目录下。

还有在web.xml中添加了全局配置主要是为了项目中需要改编码的方便

encode

UTF-8

这里是生成验证码的程序,在我的上篇文章有详细讲解

@WebServlet(urlPatterns = "/demo")

public class CheckImg extends HttpServlet {

//复写HttpServlet中的doGet方法

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

IOException{

//准备一张画纸,将验证码中的数字字母写到这张画纸中

int width = 120;

int height = 30;

BufferedImage bufi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//这里面的width、height、就是这张画纸的长宽。BufferedImage.TYPE_INT_RGB就是这张画纸基于

//RGB三原色来进行画

//获取一个画笔对象,给图片上画画

Graphics2D g = (Graphics2D) bufi.getGraphics();

//设置画笔颜色

g.setColor(Color.WHITE);

//将这个颜色填充到整个画纸

g.fillRect(0,0,width,height);

//定义图片上可以写什么数据

String data = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";

//定义书写在画纸上的起始位置

int x =15;

int y =25;

//定义一个随机数

Random r = new Random();

//创建一个字符串缓冲区

StringBuilder sb = new StringBuilder();

//定义一个循环给画纸上写四个数

for(int i = 0; i < 4; i++){

//从data中随机获取一个下标的数据

char c = data.charAt(r.nextInt(data.length()));

sb.append(c+"");

//随机生成画笔的颜色,RGB三原色随机在0-256中随机生成

g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));

//设置字体

g.setFont(new Font("黑体",Font.BOLD,26));

double theta =(30 - (r.nextInt(60)))*Math.PI/180;

g.rotate(theta,x,24);

//设置数据旋转

//g.rotate((20)*Math.PI/180,x,y);

//将数据写到画纸上

g.drawString(c+"",x,y);

g.rotate(-theta,x,24);

//设置完旋转要调回,防止数据旋转的看不到

//g.rotate(-((20)*Math.PI/180),x,y);

//每写完一个调整下一个数据写的位置

x += 25;

}

HttpSession session = req.getSession();

session.setAttribute("checkNum",sb.toString());

//添加线类型的干扰信息

for(int i = 0; i < 15 ; i++){

//同样设置线的颜色

g.setColor(new ColYuLwGFfor(r.nextInt(256),r.nextInt(256),r.nextInt(256)));

//开始划线,这里需要的四个参数中前两个是线开头的左边,后边两个是线结束的坐标

g.drawLine(r.nextInt(width),r.nextInt(height),r.nextInt(width),r.nextInt(height));

}

//添加点类型干扰信息

for (int i = 0 ; i < 150 ; i++){

//设置点的颜色

g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));

//开始画点,实质上这是画椭圆,将上半轴半径,左半轴半径设置为0就可以看成是一个点

g.drawOval(r.nextInt(width),r.nextInt(height),0,0);

}

//这个时候并没有在这张纸上书写任何内容,但是已经可以像客户端响应请求了

ImageIO.write(bufi, "jpg", resp.getOutputStream());

}

}

这是注册页面的代码。

@WebServlet(urlPatterns = "/register2")

public class Register extends HttpServlet {

//

@Override

protected void doGet(HttpSerhttp://vletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doPost(req,resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//获取在web.xml中的配置的全局属性

String encode = req.getServletContext().getInitParameter("encode");

//为了防止乱码设置编码

req.setCharacterEncoding(encode);

resp.setContentType("text/html;charset="+encode);

//获得请求过来的资源

String userName = req.getParameter("userName");

String password = req.getParameter("password");

String repassword = req.getParameter("repassword");

String sex = req.getParameter("sex");

String[] hobby = req.getParameterValues("hobby");

String country = req.getParameter("country");

String describe = req.getParameter("describe");

//这里将获取到的请求数据都在控制台上打印了一遍

//看是否拿到了这些数据

System.out.println(userName);

System.out.println(password);

System.out.println(repassword);

System.out.println(sex);

System.out.println(hobby[0]);

System.out.println(country);

System.out.println(describe);

//这里只加了简单的判断,判断帐号是否填写,以及两次密码是否一致

//判断信息是否填写

if(userName==null||password==null||repassword==null||sex==null||hobby==null||country==null||describe==null){

resp.getWriter().write("所有的数据都不能为空,请重新填写");

return;

}

//判断两次密码是否一致

if(!password.equals(repassword)){

resp.getWriter().write("两次密码输入不一致,请重新填写");

return;

}

//判断验证码输入是否正确

if(!checkImg.equalsIgnoreCase(check)){

resp.getWriter().write("验证码输入错误");

return;

}

try {

//加载MySQL的数据库驱动

Class.forName("com.mysql.jdbc.Driver");

//这里我在数据库中添加了一个名为day02的数据库

String url = "jdbc:mysql:///day02";

//默认是系统管理员的账户

String user = "root";

//这里你自己设置的数据库密码

String passw = "xxxxxx";

//获取到数据库的连接

Connection connection = DriverManager.getConnection(url, user, passw);

//获取到执行器

Statement stmt = connection.createStatement();

//需要执行的sql语句

String sql = "insert into users values (null,'"+userName+"','"+password+"','"+repassword+"','"+sex+"','"+ Arrays.toString(hobby)+"','"+country+"','"+describe+"')";

//建议打印一下sql语句,放在数据库中看是否能将数据添加到数据库中

System.out.println(sql);

//执行sql语句

int i = stmt.executeUpdate(sql);

//添加成功上边这个执行器就会返回1

if(i==1){

resp.getWriter().write("注册成功,请登录");

}else{

resp.getWriter().write("注册失败,请返回重新");

}

stmt.close();

connection.close();

}catch (Exception e){

e.printStackTrace();

}

}

}

登录页面,同样非常丑。就是简单的三个input标签

登录页面的html代码

用户名:

密码:

注册

登录页面的java代码,因为只有帐号密码,就只和数据库中的帐号密码进行判断

@WebServlet(urlPatterns = "/login")

public class login extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doPost(req,resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//先获取到全局配置中的设置的编码

String encode = req.getServletContext().getInitParameter("encode");

//设置请求和响应的编码

req.setCharacterEncoding(encode);

resp.setContentType("text/html;charset="+encode);

try {

//从登录页面拿到用户输入的用户名

String name = req.getParameter("user");

//从登录页面拿到用户输入的密码

String pwd = req.getParameter("password");

//还是在控制台上输出看是否拿到的帐号密码

System.out.println("用户名:" +name);

System.out.println("密码:"+ pwd);

//下边就是加载数据库的过程

Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql:///day02";

String user = "root";

String password = "xxxxxxx";

String sql = "select * from users where userName = '"+name+"'";

String sql2 = "select * from users where password = '"+pwd+"'";

Connection conn = DriverManager.getConnection(url, user, password);

//这里我选择是创建了两个执行器,如果一个执行器执行两个sql语句。就会出现异常

Statement stmt = conn.createStatement();

Statement stmt2 =conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

ResultSet rs2 = stmt2.executeQuery(sql2);

//判断用户输入的帐号是否在数据库中

if (rs.next()){

System.out.print("用户名:" + rs.getString("userName") + "\t");

}else{

resp.getWriter().write("对不起你帐号名有误,请注册");

}

//通过了帐号的判断,就对密码进行判断,同样是判断密码是否与数据库中的密码匹配

if(rs2.next()){

resp.getWriter().write("登录成功,点击跳转首页");

System.out.print("密码:" + rs.getString("password") + "\t");

}else{

resp.getWriter().write("对不起你密码有误,请注册");

}

}catch (Exception e){

e.printStackTrace();

}

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:什么是一个更好的数字化框架“顶层设计”?兼论数字化经济中的核心竞争力
下一篇:6月2日,线上投票排名情况
相关文章

 发表评论

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