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

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

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

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

                

具体代码: 

<body>
<div class="main">
	<div class="header">
		<form action="<%= request.getContextPath() %>/RegistServlet" method = "post" id="input1"> 
                //action里面是跳转路径,这里就是跳转到了RegistServlet.java 
			<p style="font-size:20px;">用户名:</p>  
			<input type = "text" name = "username" id = "input2" />   //这里的name会在Sevlet中调用
			<p style="font-size:20px;">密码:</p>
			<input type = "password" name = "password" id = "input3" />
			<p style="font-size:20px;">确认密码:</p>
			<input type = "password" name = "rpsw" id = "input5" />
			<input type = "submit" value = "立即注册" id = "input4" style="color:black"/>
		</form>
	</div>
</div>
</body>

//图片插入格式
<img src="13/2.png" style="width: 220px;height: 200px;">

 

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

                    

详细代码:

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文件,

            

xml中的配置文件中,一个servlet文件需要设置一个<severlet> </servlet>和一个<servlet-mapping></servlet-mapping>

<servlet>
    <servlet-name>LoginServlet1</servlet-name>
    <servlet-class>com.helloworld.servlat.LoginServlet1</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>LoginServlet1</servlet-name>
    <url-pattern>/loginServlet1</url-pattern>
 </servlet-mapping>

<servlet>
    <servlet-name>RegistServlet</servlet-name>
    <servlet-class>com.helloworld.servlat.RegistServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>RegistServlet</servlet-name>
    <url-pattern>/registServlet</url-pattern>
</servlet-mapping>

关于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 中的数据内容。

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


注意点:

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

xml样式引用:<?xml-stylesheet type="text/css" href="css路径"?>,设置样式只能对英文标签起作用,

<?xml version="1.0" encoding="gbk"?> 
<?xml-stylesheet type="text/css" href="css路径"?>
<person>
    <name>张三</name>
    <age>18</age>
</person>


 

  •  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;”(注意不要掉分号),显示数据库名称;

 

 

 

 

  • 24
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
好的,这是一个常见的Web开发问题,下面是一个简单实现方式: 1. 创建数据库表 首先,需要在MySQL数据库中创建一个用户表,例如: ```sql CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 2. 编写登录页面 在JSP中编写一个登录页面,包括用户名和密码的输入框以及登录按钮,例如: ```html <form action="login" method="post"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <input type="submit" value="登录"> </form> ``` 3. 编写ServletServlet中处理登录请求,首先获取用户输入的用户名和密码,然后查询数据库中是否存在对应的用户记录,如果存在则认为登录成功,否则登录失败。例如: ```java public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户输入的用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 查询数据库中是否存在对应的用户记录 String sql = "SELECT * FROM user WHERE username = ? AND password = ?"; try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC", "root", "password"); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, username); stmt.setString(2, password); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { // 登录成功,将用户信息存入Session中 HttpSession session = request.getSession(); session.setAttribute("username", username); // 跳转到欢迎页面 response.sendRedirect("welcome.jsp"); } else { // 登录失败,返回错误信息 request.setAttribute("error", "用户名或密码错误"); request.getRequestDispatcher("login.jsp").forward(request, response); } } } catch (SQLException e) { throw new ServletException(e); } } } ``` 4. 编写欢迎页面 在JSP中编写一个欢迎页面,显示用户登录成功的信息,例如: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>欢迎</title> </head> <body> <h1>欢迎,<%= session.getAttribute("username") %>!</h1> <a href="logout">退出</a> </body> </html> ``` 5. 编写退出功能 在Servlet中编写一个退出功能,清除Session中的用户信息,例如: ```java public class LogoutServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 清除Session中的用户信息 HttpSession session = request.getSession(); session.removeAttribute("username"); // 跳转到登录页面 response.sendRedirect("login.jsp"); } } ``` 6. 配置Web.xml 最后,在Web.xml中配置ServletJSP的映射关系,例如: ```xml <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.example.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>LogoutServlet</servlet-name> <servlet-class>com.example.LogoutServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/logout</url-pattern> </servlet-mapping> ``` 这样就完成了一个简单Jdbc+Servlet+Jsp+MySQL实现登录功能的Web应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小半、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值