javaEE学习日志(基于mvc模式+mysql实现登录注册退出功能作业【不包括框架】)

引言:这是之前做的作业,也不怎么理解透,现在分层,做的详细一些,加深对mvc模式的理解,就当回顾知识了

目录

一.实验目的

二.实验工具

三.主要文件说明

四.实验主要过程

五.实验报错及解决

六.结语


一.实验目的

使用JSP+Javabean+Servlet实现一个简单的模型

JSP+Javabean+Servlet+mysql数据库

要求:完成注册、登录、退出三个功能

二.实验工具

1.jdk-17.0.2、

2.tomcat-10.0.20、

3.微软浏览器DEV-105.0.1300.0、

4.mysql-8.0.26、

5.Eclipse IDE for Enterprise Java and Web Developers (includes Incubating components)    Version: 2021-12 (4.22.0)

三.主要文件说明

1.eclipse文件部署,如下图

 

2.login.jsp:登录页面,有用户名、密码两个输入框,源码如下图

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>实验五登录界面</title>
 
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
	<script type="text/javascript">
		function confirmReset(){
			   var clickresult = false;
			   clickresult =window.confirm("点击重填后所有信息都将被清空。\n你确认重填吗?");
			   return clickresult;
		}
	</script>
    <style>
 
        body { /*大主背景图*/
            background-image: url("sunOcean.jpg");
            background-size: cover;
            background-position-x: center;
        }
 
        .layout { /*设置登录窗口部分的样式*/
            width: 900px;
            height: 530px;
 
            position: relative;
            box-sizing: border-box;
            margin-left: 300px;
            margin-top: 90px;
            padding: 1px;
 
            border: 8px solid silver;
            border-radius: 2px;
            background-image: url("sunOcean.jpg");
            background-size: 1300px;
            background-position-x: center;
            background-position-y: -125px;
 
            z-index: 1;
        }
 
        .layout::after { /*设置背景虚图层*/
            content: "";
            position: absolute;
            width: 100%;
            height: 100%;
            background: inherit;
            left: 0;
            top: 0;
            filter: blur(5px);
            z-index: 2;
        }
 
        .input { /*登录条框布局*/
            margin-top: 160px;
            margin-left: 250px;
            margin-right: 250px;
        }
 
        .input-group { /*调节账号和密码框图层*/
            position: relative;
            z-index: 3;
        }
 
        .input-group { /*调节两个输入框的之间距离*/
            padding: 15px;
        }
		
		#sub{  /* 设置登录、清空两个按钮的形状、背景颜色、弧度*/
			position: relative;
			z-index: 3;
			margin-top: 15px;
			margin-left: 60px;
			background-color: cornflowerblue;
			color: white;
			font-size: 20px;
			border-radius: 7px;			
			width: 100px;
			height: 40px;
		}
 
 
 
      .submit-default { /*设置登录按钮无边框、按钮文字位置*/
			border-style: none;
			outline: none;
			position: absolute;
			
        }
 
        .bz { /*火焰图标*/
            position: absolute;
            z-index: 3;
            font-size: 80px;
            margin-left: 360px;
            margin-top: 40px;
        }
 
        #注册 { /*注册超链接的设置*/
            position: absolute;
            z-index: 3;
            color:white;
            margin-top: 15px;
            margin-left: 725px;
        }
 
    </style>
 
</head>
 
<body>
 
<div class="layout">
    <div id="注册">
        <span>暂无账号?</span><a href="register.jsp" style="color:palegreen">立即注册</a>
    </div>
 
    <div class="bz"><font color="#22ffb9">&nbsp;</font>
        <span class="glyphicon glyphicon-fire" aria-hidden="true"
              style="color: red;"></span>
	</div>
 
    <div class="input">
        <form action="../Login" method="post">
            <div class="input-group">
                <span class="input-group-addon" id="basic-addon1"><label for="text1"><span
                        class="glyphicon glyphicon-user" aria-hidden="true" style="color:blue"></span>&nbsp;账号</label></span>
                <input type="text" class="form-control" id="text1" placeholder="请输入用户名" name="username"
                       aria-describedby="basic-addon1">
            </div>
			
            <div class="input-group">
                <span class="input-group-addon" id="basic-addon2"> <label for="test2"><span
                        class="glyphicon glyphicon-leaf" aria-hidden="true" style="color:blue"></span>&nbsp;密码</label></span>
                <input type="password"  class="form-control" id="test2" placeholder="请输入密码" name="password"
                       aria-describedby="basic-addon1" required="">
            </div>
			
            <div>
				<input type="submit" id="sub" class="submit-default" value="登录" size="5px" >
				<input type="submit" id="sub" class="submit-default" value="清空" size=5px" onclick="confirmReset()">
            </div>
			
        </form>
    </div>
</div>
</body>
</html>

3.register.jsp:注册页面,源码如下图

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>注册界面</title>
 
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
	<script type="text/javascript">
		function confirmReset(){
			   var clickresult = false;
			   clickresult =window.confirm("点击重填后所有信息都将被清空。\n你确认重填吗?");
			   return clickresult;
		}
	</script>
    <style>
 
        body { /*大主背景图*/
            background-image: url("sky.jpg");
            background-size: cover;
            background-position-x: center;
        }
 
        .layout { /*设置登录窗口部分的样式*/
            width: 900px;
            height: 530px;
 
            position: relative;
            box-sizing: border-box;
            margin-left: 300px;
            margin-top: 90px;
            padding: 1px;
 
            border: 8px solid silver;
            border-radius: 2px;
            background-image: url("sky.jpg");
            background-size: 1300px;
            background-position-x: center;
            background-position-y: -125px;
 
            z-index: 1;
        }
 
        .layout::after { /*设置背景虚图层*/
            content: "";
            position: absolute;
            width: 100%;
            height: 100%;
            background: inherit;
            left: 0;
            top: 0;
            filter: blur(5px);
            z-index: 2;
        }
 
        .input { /*登录条框布局*/
            margin-top: 160px;
            margin-left: 250px;
            margin-right: 250px;
        }
 
        .input-group { /*调节账号和密码框图层*/
            position: relative;
            z-index: 3;
        }
 
        .input-group { /*调节两个输入框的之间距离*/
            padding: 15px;
        }
		
		#sub{  /* 设置登录、清空两个按钮的形状、背景颜色、弧度*/
			position: relative;
			z-index: 3;
			margin-top: 15px;
			margin-left: 60px;
			background-color: cornflowerblue;
			color: white;
			font-size: 20px;
			border-radius: 7px;			
			width: 100px;
			height: 40px;
		}
 
 
 
      .submit-default { /*设置登录按钮无边框、按钮文字位置*/
			border-style: none;
			outline: none;
			position: absolute;
			
        }
 
		.bz{ /*五色花*/
			position: absolute;
			z-index: 3;
			margin-top: 20px;
			margin-left: 405px;
			width: 80px;
			height: 80px;
			
		}
		.bz span{
			display: block;
			width: 40px;
			height: 40px;
			background:#317ef3;
			border-radius: 0 100px;
			transform-origin: 100% 100%;
			position: absolute;
		}
		.bz .petal2{
			transform: rotate(72deg);
		}
		.bz .petal3{
			transform: rotate(144deg);
		}
		.bz .petal4{
			transform: rotate(216deg);
		}
		.bz .petal5{
			transform: rotate(288deg);
		}
 
    </style>
 
</head>
 
<body>
 
<div class="layout">
 
    <div class="bz"><font color="#22ffb9">&nbsp;</font>
			<span class="petal1" style="background-color: pink"></span>
			<span class="petal2" style="background-color: greenyellow"></span>
			<span class="petal3" style="background-color: plum">></span>
			<span class="petal4" style="background-color: cyan">></span>
			<span class="petal5" style="background-color: coral">></span>
	</div>
 
    <div class="input">
        <form action="../Register" method="post">

            <div class="input-group">
                <span class="input-group-addon" id="basic-addon1"><label for="text1"><span
                        class="glyphicon glyphicon-user" aria-hidden="true" style="color:blue"></span>&nbsp;账号</label></span>
                <input type="text" class="form-control" id="text1" placeholder="请输入用户名" name="username"
                       aria-describedby="basic-addon1">
            </div>
 
            <div class="input-group">
                <span class="input-group-addon" id="basic-addon2"> <label for="test2"><span
                        class="glyphicon glyphicon-leaf" aria-hidden="true" style="color:blue"></span>&nbsp;密码</label></span>
                <input type="password"  class="form-control" id="test2" placeholder="输入密码" name="password"
                       aria-describedby="basic-addon1" >
            </div>
			
			<div class="input-group">
			    <span class="input-group-addon" id="basic-addon2"> <label for="test2"><span
			            class="glyphicon glyphicon-leaf" aria-hidden="true" style="color:blue"></span>&nbsp;密码</label></span>
			    <input type="password"  class="form-control" id="test2" placeholder="确认密码" name="password2"
			           aria-describedby="basic-addon1" >
			</div>
 
            <div>
				<input type="submit" id="sub" class="submit-default" value="注册" size="5px" >
				<input type="submit" id="sub" class="submit-default" value="清空" size=5px" onclick="confirmReset()">
            </div>
        </form>
    </div>
</div>
</body>
</html>

4.dss.jsp:登录成功后进入的页面,源码如下图

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% if(session == null || session.getAttribute("username") == null || session.getAttribute("password") == null){
		response.sendRedirect("login.jsp");
	}
%>

<!DOCTYPE html>
<html>
<head>
		<meta charset="utf-8">
		<title>多搜索引擎</title>
		<style type="text/css">
			body{background-image: url(140.jpg);}

			#form1{
				width:200px;
				float: right;
			}
			#form2{
				float: right;
			}

			.to {
				width: 100px;
				height: 100px;
				border-radius: 50%;
				position: absolute;
				top: 50%;
				left: 50%;
				margin-left: -50px;
				margin-top: -50px;
			}			 
			.to1 {
				width: 104px;
				height: 104px;
				border-radius: 50%;
				background-color: white;
				position: relative;
			}
			 
			.to2 {
				width: 104px;
				height: 104px;
				border-radius: 50%;
				position: absolute;
				top: 50%;
				left: 50%;
				margin-left: -52px;
				margin-top: -52px;
			}
			
			.to3 {
				width: 106px;
				height: 106px;
				border-radius: 50%;
				background-color: aqua;
				position: relative;
			}

		</style>
		<script type="text/javascript">
			
		</script>
</head>
<body>
	<div id="form2">
		<select name="select" onchange="window.open(this.options[this.selectedIndex].value,target='_self')">
			<option value ="" selected=""></option>
			<option value ="login.jsp">登录</option>
			<option value ="register.jsp">注册</option>
			<option value ="quit.jsp">退出</option>
		</select>
	</div>
	<div id="form1">
		<div class="to3" align="center">
			<div class="to2" align="center">
				<div class="to1" align="center">
					<img class="to" alt="aaa" src="https://img0.baidu.com/it/u=162763160,1033376039&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500">
				</div>
			</div>
		</div>
	</div>
	<br/>
	<div id="form3">
	<!-- select:标签设置下拉表单 value值存放要跳转的相对链接地址 ,
    表单放置两个超链接的选项(登录和注册)第一个选项设置默认空白是为了好看,
也可以去掉 window.open(this.options[this.selectedIndex].value,target='_self'):这条语句起到连接超链接的作用,具体原理是什么,我也不知道,网上查资料找到 -->
		<center> 
			<select style="width: auto;height: auto;" size="0" name="select2" onchange="window.open(this.options[this.selectedIndex].value,target='_blank')">
				<option value="https://www.baidu.com/">百度</option>
				<option value ="https://www.sogou.com/">搜狗</option>
				<option value ="http://soso.com/">搜搜</option>
				<option value ="https://cn.bing.com/">必应</option>
				<option value ="https://hao.360.com/">360搜索</option>
				<option value ="https://quark.sm.cn/?from=smor&safe=1">神马搜索</option>
			</select>
		</center>
	</div>
</body>
</html>

5.web.xml:配置文件,源码如下图

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="5.0">
  <display-name>webTestLab</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>Login</display-name>
    <servlet-name>Login</servlet-name>
    <servlet-class>com.labFive.servlet.Login</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>Register</display-name>
    <servlet-name>Register</servlet-name>
    <servlet-class>com.labFive.servlet.Register</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Register</servlet-name>
    <url-pattern>/Register</url-pattern>
  </servlet-mapping>
</web-app>

6.user.sql:mysql数据表的创建,如下图

drop database if exists school;
create database school default charset utf8;
use school;
create table tb_user(id int primary key auto_increment,
                userName varchar(20) not null,
                password varchar(20) not null);

7.DbParam.java(bean数据层):连接数据库一些变量及set和get方法,如下图

package com.labFive.bean;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
//bean层:mysql相关参数及set和get方法
public class DbParam {
	private String driver = "com.mysql.cj.jdbc.Driver"; // 驱动
	private String url = "jdbc:MySQL://localhost:3306/school?&useSSL=false&serverTimezone=UTC";  //指向数据库school
	private String dbUser = "";  //数据库用户名
	private String dbPassword = "";  //数据库用户密码
	private Connection conn = null;  //数据库连接对象
	private Statement stm = null;   //数据库声明对象
	private ResultSet rs = null;    //数据库结果集对象
	
	public String getDriver() {
		return driver;
	}
	public void setDriver(String driver) {
		this.driver = driver;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getDbUser() {
		return dbUser;
	}
	public void setDbUser(String dbUser) {
		this.dbUser = dbUser;
	}
	public String getDbPassword() {
		return dbPassword;
	}
	public void setDbPassword(String dbPassword) {
		this.dbPassword = dbPassword;
	}
	public Connection getConn() {
		return conn;
	}
	public void setConn(Connection conn) {
		this.conn = conn;
		System.out.println("conn赋值成功--");
	}
	public Statement getStm() {
		return stm;
	}
	public void setStm(Statement stm) {
		this.stm = stm;
		System.out.println("stm赋值成功");
	}
	public ResultSet getRs() {
		return rs;
	}
	public void setRs(ResultSet rs) {
		this.rs = rs;
		System.out.println("rs赋值成功");
	}

}

8.mysqlConn.java(dao数据控制层):封装数据库的连接、查询、更新、关闭等几个函数,源码如下图

package com.labFive.dao;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.labFive.bean.*;
//dao层:实现数据库的连接,封装连接、更新、查询以及关闭连接几个函数
public class mysqlConn {
	DbParam dbParam;
	Connection conn;
	Statement stm;
	ResultSet rs;
	
	//声明一个连接数据库的方法,返回true表示连接数据库成功
	public boolean createConn(DbParam dbParam) {
		this.dbParam=dbParam;
		boolean result = false;
         
		try {
			Class.forName(dbParam.getDriver()); //加载驱动
			conn = DriverManager.getConnection(dbParam.getUrl(),dbParam.getDbUser(),dbParam.getDbPassword()); //连接数据库
			dbParam.setConn(conn);
			result = true;
			System.out.println("加载驱动成功--");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("mysqlConn.createConn(DbParam dbParam):ClassNotFoundException这里报错");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("mysqlConn.createConn(DbParam dbParam):SQLException这里报错");
			e.printStackTrace();
		}
		return result;
	}
	
	//声明更新数据库的方法,注册用户名、密码,参数:更新的sql语句,返回:true表示更新成功
	public boolean update(String sql) {
		boolean up = false;
		try {
			stm = conn.createStatement();
			stm.executeUpdate(sql);
			dbParam.setStm(stm);
			up = true;
			System.out.println(sql+":更新操作成功--");
		}catch(Exception e) {
			System.out.println(e.toString());
			System.out.println("mysqlConn.update(String sql):Exception这里报错");
		}
		return up;
	}
	
	//声明查询方法,查询输入的用户名与数据库的用户名、密码是否匹配
	public void query(String sql) {
		try {
			stm = conn.createStatement();
			rs = stm.executeQuery(sql);
			dbParam.setRs(rs);
			System.out.println(sql+":查询操作成功--");
		}catch(Exception e) {
			System.out.println("mysqlConn.query(String sql):Exception这里报错");
			System.out.println(e.toString());
		}
	}
	
	//关闭数据库连接 关闭资源,依次关闭 rs、stm、conn
	public void closeRs() {
		try {
			rs.close();
			System.out.println("rs关闭成功--");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void closeStm() {
		try {
			stm.close();
			System.out.println("stm关闭成功");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void closeConn() {
		try {
			conn.close();
			System.out.println("conn关闭成功");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

9.Login.java(service业务层):处理登录请求,并跳转到相关页面,如下图

package com.labFive.servlet;

import jakarta.servlet.*;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.labFive.bean.*;
import com.labFive.dao.*;
/**
 * Servlet implementation class Login
 */

public class Login extends HttpServlet {
	//这个(doPost)函数是处理请求转发的,通过接收登录页面(login.jsp)参数,调用LogincalProcessing.java的login方法将参数
	//传递过去,对函数返回值进行判断并跳转到相关页面
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//从login.jsp获取from表单的参数:username、password
		String username = request.getParameter("username");
		String password = request.getParameter("password");
        //声明请求转发变量 rd
		RequestDispatcher rd;
        //声明out对象,用于输出在浏览器页面	
		PrintWriter out = response.getWriter();					
		if(new LogincalProcessing().login(username,password) == "dss.jsp") {	 
         //login() 方法返回值(String类型)等于dss.jsp,说明登录成功
			HttpSession session = request.getSession();		//声明一个session(对话)
            //传递给session两个参数,用于验证(在dss.jsp验证)并防止未登录就可以直接访问页面			
            session.setAttribute("username", username);		
			session.setAttribute("password", password);
			
			//手动连接跳转到dss.jsp
			out.println("<html>"+
						"<head>"+
						"<meta charset='utf-8'>"+
						"<script type='text/javascript'>alert('用户名密码正确,登录成功!\\n确定后2秒跳转');</script>"+
						"</head>"+
						"<body>"+
						"<h1>"+
						"<center>"+
						"<h2>恭喜你登录成功!</h2>"+
						"<a href='../webTestLab/labFive/dss.jsp'>手动跳转到多搜索页面</a>"+
						"</center>"+
						"</h1>"+
						"</body>"+
						"</html>");
			
			response.setHeader("Refresh", "2;url=../webTestLab/labFive/dss.jsp");
			rd = request.getRequestDispatcher("../webTestLab/labFive/dss.jsp");	//跳转到dss.jsp页面
			rd.forward(request, response);	
		}else {
			
			out.println("<html>"+
						"<head>"+
						"<meta charset='utf-8'>"+
						"<script type='text/javascript'>alert('用户名或密码错误!\\n确定后0.5秒重新登录');</script>"+
						"</head>"+
						"<body>"+
						"<h1>"+
						"<center>"+
						"<h2>用户名或密码错误!</h2>"+
						"<a href='../webTestLab/labFive/login.jsp'>重新登录</a>"+
						"</center>"+
						"</h1>"+
						"</body>"+
						"</html>");
			response.setHeader("Refresh", "0.5;url=../webTestLab/labFive/login.jsp");
			rd = request.getRequestDispatcher("../webTestLab/labFive/login.jsp");
			rd.forward(request, response);
		}
		
	}

}

10.Register.java(service业务层):处理注册请求,并跳转到相关页面,如下图

package com.labFive.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

import com.labFive.dao.*;



/**
 * Servlet implementation class Register
 */
public class Register extends HttpServlet {
	//这个函数是输出提示语句
	public static void outHtml(String url,String str,String str2,HttpServletResponse response) {
		//手动连接跳转到dss.jsp
		PrintWriter out;
		try {
			out = response.getWriter();  //声明out对象,用于输出在浏览器页面
			out.println(
					"<html>"+
					"<head>"+
					"<meta charset='utf-8'>"+
					"<script type='text/javascript'>alert('"+str2+"');</script>"+
					"</head>"+
					"<body>"+
					"<h1>"+
					"<center>"+
					"<a href='"+url+"'>"+str+"</a>"+
					"</center>"+
					"</h1>"+
					"</body>"+
					"</html>");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	//这个方法是处理请求转发的,接收注册页面(register.jsp)传递的三个参数,调用RegisterProcessing.java里面的register
	//方法将三个参数传递过去,函数返回值进行判断并跳转到相应的页面
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//从register.jsp获取from表单的参数:username、password、password2
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String password2 = request.getParameter("password2");
		String url = new RegisterProcessing().register(username, password, password2),str,str2;		//register() 方法返回值(String类型)
		
		
		ScriptEngineManager se=new ScriptEngineManager();
		ScriptEngine engine=se.getEngineByName("js");	//声明什么类型的脚本
		//url可能等于inputNull或者register.jsp或者pwdpwd2或者login.jsp,然后下面是对url的不同情况进行判断,进行不同的操作
	    if(url.equals("inputNull")){

			url="../webTestLab/labFive/register.jsp";
			str="用户名、密码不能为空,也不能包含空格!重新注册";
			str2="用户名、密码不能为空,也不能包含空格!重新注册!\\n确定后0.5秒自动跳转";
			outHtml(url,str,str2,response);	//调用方法输出手动点击链接(防止自动跳转失败)
	    	response.setHeader("Refresh", "0.5;url=../webTestLab/labFive/register.jsp"); 	//直接不用等待就自动刷新到register.jsp页面
	    }else{
	        if(url.equals("register.jsp")){

				url="../webTestLab/labFive/register.jsp";
				str="用户名已经存在!重新注册";
				str2="用户名已经存在!重新注册!\\n确定后0.5秒自动跳转";
	        	outHtml(url, str,str2, response);	//调用方法输出手动点击链接(防止自动跳转失败)
	    		response.setHeader("Refresh", "0.5;url=../webTestLab/labFive/register.jsp");	//0.5秒自动跳转页面

	        }else if(url.equals("pwdpwd2")){
				url="../webTestLab/labFive/register.jsp";
	        	str="两次输入的密码不一致,请检查密码!重新注册";
	        	str2="两次输入的密码不一致,请检查密码!重新注册!\\n确定后0.5秒自动跳转";
	        	outHtml(url, str,str2, response);	//调用方法输出手动点击链接(防止自动跳转失败)
	    		response.setHeader("Refresh", "0.5;url=../webTestLab/labFive/register.jsp");	//2秒自动跳转页面

	        }else{
	    		if(url.equals("login.jsp")){

	    			url="../webTestLab/labFive/login.jsp";
	    			str="恭喜你注册成功!手动跳转登录页面";
	    			str2="恭喜你注册成功!\\n确定后2秒自动跳转";
	    			outHtml(url, str,str2, response);	//调用方法输出手动点击链接(防止自动跳转失败)
	    			response.setHeader("Refresh", "2;url=../webTestLab/labFive/login.jsp");	//2秒自动跳转页面
	    			
	    	 	}else{
	
	    			url="../webTestLab/labFive/register.jsp";
	    			str="用户注册失败!重新注册";
	    			str2="用户注册失败,重新注册!\\n确定后0.5秒自动跳转";
	    			outHtml(url, str,str2, response);	//调用方法输出手动点击链接(防止自动跳转失败)
	    			response.setHeader("Refresh", "0.5;url=../webTestLab/labFive/register.jsp");
	    		}
	    	}
	    }	
	}

}

四.实验主要过程

1.代码运行流程图,如下图

 

2.实际操作流程展示

        ①.启动MySQL,然后在start.html执行代码,右键执行代码,eclipse会自动启动Tomcat服务器,会打开微软浏览器访问到start.html,点击注册,跳转到注册页面,如下图

 

        ②.在注册页面输入用户名密码,点击注册,如果注册成功会自动跳转到登录页面,如果注册失败会提示相应的错误,重新注册,如下图

 

 

        ③.验证注册是否成功,在MySQL查询注册信息,看到刚才注册的信息存到表中说明注册成功,如下图

 

        ④.在登录页面输入用户名和密码,成功会自动跳转到登录成功页面(dss.jsp),页面有多个搜索引擎下拉列表,如下图

  

 

 

         ⑤.退出,点击右上角下拉列表退出,自动返回开始页面(start.html),如下图

  

 

 

 

         ⑥.最后关闭在eclipse停止运行代码(会自动关闭服务器),再关闭MySQL,实验结束。

五.实验报错及解决

1.报错如下  

 

 

报错原因及解决:eclipse创建servlet自动生成的方法是protected,是受保护的,需要改成公共方法才能访问,如下图

 

2.报错如下,servlet中运行js报错

  

  报错原因及解决:原因我安装的jdk17,高版本好像不支持js这种写法(jdk 11可以支持),没办法在servlet里面运行,我只能创建out对象,在输出到浏览器的html中运行js,如下图

  

 

3.报错提示rs(结果集)为null,原因:在两个java文件调用第三个java文件里面的函数时,new两次类,引用名虽然相同,却是不同的对象。解决:new一次类,将引用名作为函数参数传递到另一个java文件 去调用第三个java文件的函数,如下图

 

 

六.结语

看来一些基础没打好,第三个报错找半天才解决,也算是温故而知新了,不足之处可以指出,互相学习学习,需要源码如下链接(eclipse整个项目):mvc模式+mysql实现登录注册退出功能.zip - 蓝奏云

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值