servlet + MySQL + jdbc + jsp 实现简单登录注册

先讲逻辑,我理了两个星期才搞清楚。。。一把心酸一把泪,希望我理解的是对的并且明确清晰的,,,,

前提配置文件,eclipse,mysql下载,jar包导入,数据库连接,

  • 1.将前端代码导入jsp文件;首先在WebContent文件夹下新建文件夹写两个前端的注册登录两个页面regist.jsp和login.jsp,和登录注册成功以后要显示的页面,success.jsp 和 error.jsp;关于图片插入,可直接放在一个文件夹下,也可以构建一个存所有图片的文件夹,引用的时候一定要加上文件夹名称 

                servlet + MySQL + jdbc + jsp 实现简单登录注册_第1张图片

具体代码: 


//action里面是跳转路径,这里就是跳转到了RegistServlet.java

用户名:

//这里的name会在Sevlet中调用

密码:

确认密码:

//图片插入格式

 

  • 2.建立servlet文件;在JAVA Resources文件夹下的src下建立一个类 在该类下写入两个登陆注册的servlet文件 LoginServlet.java和RegistServlet.java  用java代码来判断是否输入为空,连接了数据库可以用java判断输入数据是否为数据库中存在的正确数据,是否能成功登录注册,从而跳转至对应的jsp页面,

                    servlet + MySQL + jdbc + jsp 实现简单登录注册_第2张图片

详细代码:

jsp文件中反映到前端页面的表单提交按钮,点击以后会跳转到指定的的servlet文件,以登录的servlet.java为例

package com.helloworld.servlat;

import java.io.IOException;
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 com.helloworld.dao.UserDao; //引入连接数据库的java文件包

//只调用dopost方法即可
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String psw =new UserDao().findUsername(username);
		
		if(psw ==null){
			request.setAttribute("msg", "没有这个用户!");
			request.getRequestDispatcher("14/error.jsp").forward(request, response);
			return;

		}
		if(psw!=null&&!psw.equals(password)){
			request.setAttribute("msg", "密码错误请重新输入!");
			request.getRequestDispatcher("14/error.jsp").forward(request, response);
			return;	
		}
		if(psw.equals(password)){
			request.setAttribute("msg", "用户:"+username+",欢迎访问");
			request.getRequestDispatcher("14/success.jsp").forward(request, response);
		}
	}
}

注册servlet代码部分:

package com.helloworld.servlat;

import java.io.IOException;
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 com.helloworld.dao.UserDao;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String rpsw = request.getParameter("rpsw");//得到表单输入的内容
		if(username==null||username.trim().isEmpty()){
			request.setAttribute("msg", "帐号不能为空");
			request.getRequestDispatcher("13/regist.jsp").forward(request, response);
			return;
		}
		if(password==null||password.trim().isEmpty()){
			request.setAttribute("msg", "密码不能为空");
			request.getRequestDispatcher("13/regist.jsp").forward(request, response);
			return;
		}
		if(!password.equals(rpsw)){
			request.setAttribute("msg", "两次输入的密码不同");
			request.getRequestDispatcher("13/regist.jsp").forward(request, response);
			return;
		}
		UserDao u = new UserDao();
		int num = 6;
		u.addUser(num,username,password);//调用addUser()方法
		request.setAttribute("msg", "恭喜:"+username+",注册成功");
		request.getRequestDispatcher("13/success.jsp").forward(request, response);
	}
}
  • 3.配置的xml文件,首先在新建项目时,注意勾选才能自动导入web.xml文件,

            servlet + MySQL + jdbc + jsp 实现简单登录注册_第3张图片

xml中的配置文件中,一个servlet文件需要设置一个 和一个


    LoginServlet1
    com.helloworld.servlat.LoginServlet1
 
 
    LoginServlet1
    /loginServlet1
 


    RegistServlet
    com.helloworld.servlat.RegistServlet
  

    RegistServlet
    /registServlet

关于xml(可扩展标记型语言):https://blog.csdn.net/zndxlxm/article/details/7802466

Xml用来设计传输和存储数据,html用来是设计显示数据。

Xml没有预定义标签,需要进行自定义。

平时在进行开发的时候,例如进行hibernate开发的时候,我们可以导入自己预先定地的dtd文件(标记符的语法规则)进行规范化。

xml和html一样都是标记语言,但是xml是可扩展的标签语言,可自定义标签如:<你好><\你好>,html主要用于显示数据,xml主要用于存储数据

如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。

通过 XML,数据能够存储在独立的 XML文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML进行任何的改变。

通过使用几行 JavaScript,你就可以读取一个外部 XML文件,然后更新 HTML 中的数据内容。

 
//文档声明 必须写到第一行第一列,
//version属性表示版本,一般采用1.0版本,因为1.1版本不适用于1.0格式; 
//encoding属性:编码 gbk utf-8 iso8859-1(不包含中文)

    张三
    18


注意点:

xml 只能有一个根标签,
xm 将空格和换行都当作内容来解析
xml 标签名称可以为中文,区分大小写,不能以数字和下划线开头,不能以xml Xml开头,不能包含空格和冒号,
xml一个标签上可以有多个属性,属性名称不可想同,可用单引号也可以用双引号   
PI指令:

xml样式引用:,设置样式只能对英文标签起作用,

 


    张三
    18


 

  •  4.数据库连接eclipse接口部分(建在src下);

主要用于查找数据库中信息检验登陆信息的是否正确从而跳转到相应的页面和添加新信息到数据库中

package com.helloworld.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDao {

		public String findUsername(String username){
			String psw = null;
			Connection con =null;
			PreparedStatement pstmt =null;
			ResultSet rs = null;
			try {
				String driver ="com.mysql.cj.jdbc.Driver";
				String url ="jdbc:mysql://localhost:3306/my?useSSL=false&serverTimezone=GMT%2B8";
				String user ="root";
				String password ="123456";//改为自己的用户名密码和数据库名
				Class.forName(driver);
				con = DriverManager.getConnection(url, user, password);
				String sql = "select * from setting where name=?";
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, username);
				rs = pstmt.executeQuery();
				if(rs==null){
					return null;
				}
				if(rs.next()){
					psw=rs.getString("password");
				}else{
					psw=null;
				}
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if(pstmt!=null)pstmt.close();
					if(con!=null)con.close();
					} 
				catch (SQLException e) {		
										}
			}
			return psw;
		}

		public void addUser(int id,String username,String psw){
			Connection con =null;
			PreparedStatement pstmt =null;
			try {
				String driver ="com.mysql.cj.jdbc.Driver";
				String url ="jdbc:mysql://localhost:3306/my?useSSL=false&serverTimezone=GMT%2B8";
				String user ="root";
				String password ="123456";//改为自己的用户名密码和数据库名
				Class.forName(driver);		
				con = DriverManager.getConnection(url, user, password);
				String sql = "INSERT INTO SETTING VALUES(?,?,?)";
				pstmt = con.prepareStatement(sql);
				pstmt.setInt(1, id);
				pstmt.setString(2, username);
				pstmt.setString(3, psw);
				pstmt.executeUpdate();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if(pstmt!=null)pstmt.close();
					if(con!=null)con.close();
					} 
				catch (SQLException e) {		
										}
			}
		}
		
}

 

数据库和eclipse的连接

我本来是打算安装sql server来连接eclipse的,但是实在是遇到太多问题了,如果有耐心的话可以借鉴一下下面的博客,都讲的比较详细,还有一些问题的解决方法也在里面了

Win10开启telnet功能:https://blog.csdn.net/michaelehome/article/details/79559596

设置SQL Server2012的身份验证方式为混合模式:http://blog.sina.com.cn/s/blog_6ca0f5eb0102v09z.html

Eclipse连接MySQL数据库:https://www.cnblogs.com/caiwenjing/p/8079227.html

 

鉴于mysql数据库和eclipse的连接:

连接首先安装mysql数据库,详细安装步骤即地址:http://www.runoob.com/mysql/mysql-install.html,安装以后要在安装数据库的文件夹下新建一个my.ini格式的文档,这里或许需要设置一下显示文件后缀名,点击 我的电脑 查看 > > 显示(进入文件夹选项中)> > 查看 > > 将隐藏已知文件类型的扩展名的选项取消勾选,新建my.ini文件夹的内容为:

[mysqld]
basedir=D:\mysql-8.0.11-winx64 //你的数据库安装路径

port=3306
character-set-server=utf8
init_connect='SET collation_connection = utf8_unicode_ci'  
init_connect='SET NAMES utf8'  
collation-server=utf8_unicode_ci  
[mysql]
no-auto-rehash
default-character-set=utf8
[client]
default-character-set=utf8

然后配环境变量,新建路径,在检验时,注意用管理员方式(右键设置进入Windows PowerShell )特别的在管理员打开的命令行中 输入进入mysql命令时需要在前面加.\mysql ,当然也可以用命令行直接检验啦,下面是我归纳总结的命令行操作数据库的常用语句:

mysql建表语句使用:详解参考:http://www.cnblogs.com/jiangxiaobo/p/7089345.html

打开命令行,输入mysql -u root -p ,显示password:输入密码,进入数据库

显示存在的数据库名称:show databases;

一般会显示几个mysql自带的数据库:

  • information_schema
  • mysql
  • performance_schema
  • sys

mysql自带的数据库的详细解释:https://blog.csdn.net/f2006116/article/details/81095985

进入想要使用的数据库:use 数据库名称;

选择所要使用的表:select *from 表的名称;

建表:create table 表名(id  int(5),

                                      - >name varchar(10),

                                      - >password varchar(10));

在表中添加信息:insert into 表名 values (1,'1001','123456') //只要是字符串都需要上下引号

 

导jar包,jdbc驱动在jar包里面:https://blog.csdn.net/liurongsheng123/article/details/79659807;注意导入的jar包要放在lib文件夹下,

导入驱动以后,在eclipse中输入连接数据库的端口代码,我用的mysql是8.0版本以上的,所有就需要添加cj也就是驱动的地址改为:com.mysql.cj.jdbc.Driver

try {
      Class.forName("com.mysql.jdbc.Driver");     //加载MYSQL JDBC驱动程序   
      //Class.forName("org.gjt.mm.mysql.Driver");
     System.out.println("Success loading Mysql Driver!");
    }
    catch (Exception e) {
      System.out.print("Error loading Mysql Driver!");
      e.printStackTrace();
    }
    try {
      Connection connect = DriverManager.getConnection(
          "jdbc:mysql://localhost:3306/test","root","198876");
           //连接URL为   jdbc:mysql//服务器地址/数据库名  ,后面的2个参数分别是登陆用户名和密码

      System.out.println("Success connect Mysql server!");
      Statement stmt = connect.createStatement();
      ResultSet rs = stmt.executeQuery("select * from user");
                                                              //user 为你表的名称
while (rs.next()) {
        System.out.println(rs.getString("name"));
      }
    }
    catch (Exception e) {
      System.out.print("get data error!");
      e.printStackTrace();
    }
  }

关于查找数据库名称:注意要修改原密码以后才能查看名称,mysql 8.0修改密码的方法:https://blog.csdn.net/lxlong89940101/article/details/80246675?tdsourcetag=s_pctim_aiomsg,这里修改完以后再用命令行进入mysql需要关闭然后重启服务器,命令分别为:nex stop mysql;nex start mysql ;修改完成以后在命令行输入mysql -u root -p 然后回车输入新密码,进入数据库,然后输入命令”show databases;”(注意不要掉分号),显示数据库名称;

 

 

 

 

你可能感兴趣的:(后台)