jsp+servlet+mysql简单实现用户登陆注册

原码,项目中遇到的错误,解决方法,文章最后有链接可以获取

项目简介

功能描述

登陆,注册,用户一览表,修改,删除,添加,模糊查询和精确查询

采用的技术及环境

JSP:前端的信息展示
Servlet:业务逻辑功能实现,及调用数据库的实现数据处理和传输
MySQL:用来实现数据存储
利用Eclipse来实现,MySQL数据库版本:5.x

运行效果展示

数据库数据


项目结构图



*因屏幕小,截图用了两张图片

登陆页面

登陆成功用户一览表页面

注册页面


*因我在数据设计表时,性别(sex)设置的大小为2长度,所以我这里输入一个字符,为了避免数据超出范围

查询可选项


模糊查询班级中有“1”的用户实现

修改用户界面

删除没有界面提示,直接删除

项目创建逻辑理解

整体理解

以jsp-业务逻辑代码-数据库为一条中心线
jsp:负责数据的展示和数据的收集
web.xml:负责当前页面信息提交给谁,哪个servlet来处理当前页面提交的数据
servlet:用来进行数据的处理和数据的传输(jsp<==>数据库)

jsp

前端的页面编写

只要有一些html基础,会编写几个常见的标签就可以。
要会用js获取它们的值,这样就可以了

 文本框:<input type="text" id="username" />
 密码框:<input type="password" id='"password">
单选按钮:<input type="radio" name="sex" value="0" />男<input type="radio" name="sex" value="1">
……

form表单:

<form method="post"  action="loginServlet" >
这中间用来编写用户要提交的数据(要用input,button)
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>

EL表达式:

用来获取servlet传递到页面的数据
首先要在jsp页面声明文件头,用来告诉jsp页面,可以使用EL表达式
假如说你从servlet向jsp传递了一个User对象,你要在jsp页面中输出User对象的属性,你要把这个User类在文件头中声明:

 <%@page import="cn.anxcyun.www.po.User" %>

import="包名.类名"
常见:
获取值${name} name:你在servlet中定义的值(小写字母,如果大写的话,容易出错)
我在这里使用到了JSTL,JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。(文章最后有链接,一看就懂)

web.xml相关配置编写

文件位置:项目/WebContent/WEB-INF/web.xml
文件在创建时可以自动生成(须打对勾),如果没有按如下图示:

文件截图:


文件:

<? xml>
<web-app   加上文件的规范(自动生成)>
    <display-name>项目名</display-name>
<welcome-file-list>
   <welcome-file>index.jsp</welcome-file>项目运行时的第一个页面(可自己更改)
</welcome-file-list>
<!-- 注册 -->这是注释不用管    ,一个servlet要如下两个标签(servlet和servlet-mappping)
  <servlet>
    <servlet-name>register</servlet-name>       定义一个servlet,jsp的form表单中的action
    <servlet-class>cn.anxcyun.www.servlet.RegisterServlet</servlet-class>     你jsp提交数据后要执行的servlet类
  </servlet>
  <servlet-mapping>
    <servlet-name>register</servlet-name>       两个servlet的name必须相同
    <url-pattern>/register</url-pattern>      当你运行成功以后,下一个页面的url栏显示的内容:localhost:8080/项目名/你定义的url-pattern
  </servlet-mapping>
</web-app>

servlet的逻辑层编写

思想

分模块化思想:因为这一层涉及到了对数据的处理和页面跳转到哪个页面,所以说,我利用了几个包来实现它:

servlet: 获取页面提交的数据,交给下一层处理,根据处理的结果,指定要跳转的页面
control: 目前没有实际的用途,就是servlet和dao层的接口传递
dao: 用来实现与数据库的业务逻辑,包括表的增删改查,(查询:登陆查询,一览表查询)
po: 基类(bean)主要是用来映射数据库中的表,一个类对应一个表(表的列值对应类的变量属性),这样在查询时数据传递时,可以用对象传递

细化:

servlet:

public class myServlet extends HttpServlet{

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.service(req, resp);
    }
}

首先要继承于 HttpServlet类

(导入包:import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;)
Eclipse的快捷键:
    导入包:ctrl + shift + O
    快速生成方法:alt + /

然后重写默认方法:service + (alt + /)

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub        可以删除
        super.service(req, resp);                            可以删除
    }

获取值:

        String number = new String(req.getParameter("number").getBytes("iso-8859-1"), "utf-8");
其实 直接:String number = req.getParameter("number");就可以,但是我的值在传递时中文时乱码,所以加上了

要跳转的页面:

            req.setAttribute("list", list); 

把一个数据保存到页面(第一个是你在页面要用的list ,第二个是你在servlet中的数据,可以是集合,对象和基本数据)

        req.getRequestDispatcher("hello.jsp").forward(req, resp);      跳转页面

数据库:

JDBC连接数据库

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

/**
 *
    * @ClassName: JDBC
    * @Description: 测试与数据库的连接
    * @author Anxc
    * @date 2019年8月7日
    *
 */
public class JDBC {

//  定义一些基础变量
    String url = "jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8";
    String username="root";
    String password="password";
    private static int id=0;

//  定义私有变量
    private PreparedStatement prepareStatement;
    private Connection conn;

    /**
     *
        * @Title: getConnection
        * @Description: 数据库连接
        * @param @return    参数
        * @return Connection    返回类型
        * @throws
     */
    public Connection getConnection() {

        try {

//          加载JDBC驱动
            Class.forName("com.mysql.jdbc.Driver");

//          获取连接
            conn=DriverManager.getConnection(url, username, password);

            return conn;

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    /**
     *
        * @Title: addUser
        * @Description: 增加用户到数据库
        * @param     参数
        * @return void    返回类型
        * @throws
     */
    public void addUser() {

        String sql="insert into UserInfo values(?,?,?)";

//      定义添加的用户信息
        id++;
        String name = "张三";
        String pwd = "12";

        Connection conn = getConnection();

        try {
            prepareStatement = conn.prepareStatement(sql);
            prepareStatement.setInt(1, id);
            prepareStatement.setString(2, name);
            prepareStatement.setString(3, pwd);

            prepareStatement.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                prepareStatement.close();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     *
        * @Title: deleteUser
        * @Description: 删除一个用户信息
        * @param     参数
        * @return void    返回类型
        * @throws
     */
    public void deleteUser() {

//      定义SQL语句
        String sql="delete from UserInfo where id =?";

        Connection conn = getConnection();

        try {
//          执行SQL语句
            prepareStatement = conn.prepareStatement(sql);

//          替换占位符?
            prepareStatement.setInt(1, 1);

//          获取返回结果集
            prepareStatement.executeUpdate();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
//              关闭数据库连接
                prepareStatement.close();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    /**
     *
        * @Title: insertUser
        * @Description: 修改User
        * @param     参数
        * @return void    返回类型
        * @throws
     */
    public void updateUser() {
        String sql="update UserInfo set username=? where id=?";

        Connection conn = getConnection();
        try {

            prepareStatement = conn.prepareStatement(sql);

            prepareStatement.setString(1, "lll");
            prepareStatement.setInt(2, 1);

            prepareStatement.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                prepareStatement.close();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     *
        * @Title: selectUser
        * @Description: 查询数据
        * @param     参数
        * @return void    返回类型
        * @throws
     */
    public void selectUser() {
        String sql = "select * from UserInfo";

        Connection conn = getConnection();
        try {
            prepareStatement = conn.prepareStatement(sql);

            ResultSet res = prepareStatement.executeQuery();

//          遍历输出
            while(res.next()) {
//              int id = res.getInt(1);
                System.out.println("id:"+res.getInt(1)+"|name:"+res.getString(2)+"|pwd:"+res.getString(3));

            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                prepareStatement.close();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     *
        * @Title: initTable
        * @Description: 删除表的所有数据,使系统运行时id从0开始
        * @param     参数
        * @return void    返回类型
        * @throws
     */
    public void initTable() {
        String sql = "truncate userInfo";
        System.out.println("-----------init-----------");
        Connection conn = getConnection();
        try {
            prepareStatement = conn.prepareStatement(sql);

            prepareStatement.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                prepareStatement.close();
                conn.close();
                System.out.println("-----------ok------------");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

这是我以前写的一个,可以自己理解一下

附录

导入jar包:

jsp文件头报错:

是因为没有配置tomcat:




要导入的jar包:

第一个和第三个是JSTL的包(https://www.runoob.com/jsp/jsp-jstl.html 这教程,里面有安装信息)
第二个是JDBC需要的包(访问数据库) (https://www.runoob.com/java/java-mysql-connect.html 在这里下载jar)
这几个jar包复制到lib文件夹下,然后:

URL传参中需要处理的特殊字符及方法:
https://blog.csdn.net/loongshawn/article/details/54613310 (还是没解决实际问题)
url特殊字符转义及解决方法(附有例子)
https://blog.csdn.net/u013412790/article/details/51441972 (完美解决关于“%”的问题)
executeQuery返回值如何判断是否有内容:
https://blog.csdn.net/yw_1207/article/details/80832698
JSP传递参数给servlet的三种方法
https://blog.csdn.net/zeephom/article/details/79607173
EL表达式用法
https://www.cnblogs.com/xdp-gacl/p/3938361.html

数据库代码:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `u_username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `u_class` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `u_number` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `u_sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `u_tel` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`u_username`) USING BTREE
) ;

原码

Github 原码项目:https://github.com/Anxc520/servletProject.git

原文地址:https://www.cnblogs.com/Anxc/p/11404403.html

时间: 2024-08-26 20:25:44

jsp+servlet+mysql简单实现用户登陆注册的相关文章

对基于Servlet+JSP+JavaBean开发模式的用户登录注册的升级

还记得我前面所写的博文基于Servlet+JSP+JavaBean开发模式的用户登录注册吗?我们以前是创建代表数据库的xml文件来保存用户信息的,现在我们已经学习了数据库相关的知识,所以应把xml换成数据库,升级成数据库应用. 我们在把以前的工程复制并拷贝时,假设以前的工程名是day09_user,现复制一份并拷贝,重新修改工程名为day14_user,此刻将其直接部署在tomcat服务器上,那么day14_user这个JavaWeb应用映射的虚拟目录仍然是"/day09_user",

基于Servlet+JSP+JavaBean开发模式的用户登录注册

基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模

深入分析JavaWeb Item19 -- 基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

jsp+servlet+mysql 实现简单的银行登录转账功能

jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从一个登录页面开始(利用表单提交,action="jsp实现页面")第一步:在(mysql)数据库中建表:建立一个用户的基本信息表(用户姓名,密码,账户余额),用户转账(用户名,转账金额)的操作表第二步:登录页面:输入用户名和密码对数据库中的用户信息(login.jsp)进行验证(qq浏览器

抄袭的用Jsp+JavaBean+Mysql实现的登录和注册

用Jsp+JavaBean+Mysql实现的登录和注册 (2010-11-18 20:54:43) 转载▼ 标签: 软件   共同学习和进步:一个简单的用户登录和注册系统. 代码比较简单,希望对刚开始学习的同学有所帮助. 具体代码如下: *******用户注册页面 <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><html>  <he

用户登陆注册【JDBC版】

前言 在讲解Web开发模式的时候,曾经写过XML版的用户登陆注册案例!现在在原有的项目上,使用数据库版来完成用户的登陆注册!如果不了解的朋友,可以看看我Web开发模式的博文! 本来使用的是XML文件作为小型数据库,现在使用Mysql数据库,代码究竟要改多少呢?我们拭目以待! 使用C3P0数据库连接池 导入C3P0的开发包和导入配置文件 开发包导入的是这个:c3p0-0.9.2-pre1和mchange-commons-0.2.jar. C3P0不仅性能好,而且配置文件可以使用XML文档来配置!

jsp+servlet+mysql员工管理系统源代码下载

原文:jsp+servlet+mysql员工管理系统源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463498996736.htm jsp+servlet+mysql员工管理系统

javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

javaweb学习总结——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat