精华内容
下载资源
问答
  • 关于数据库和web服务器负载均衡

    千次阅读 2010-08-12 16:16:00
    第一,很快你会遇到图片带宽的压力图片服务器并发的压力。第二,IIS并发连接的压力。第三,数据库CPU使用率出现尖峰波动。峰值达到100%。(平均峰值大于45%就要准备负载方案了)本着向高层次技术群发展的目标,...
    我先简要说说,基与dotNET的系统随着用户规模的增长,一般情况下有3个方面的瓶颈。
    第一,很快你会遇到图片带宽的压力和图片服务器并发的压力。
    第二,IIS并发连接的压力。
    第三,数据库CPU使用率出现尖峰波动。峰值达到100%。(平均峰值大于45%就要准备负载方案了)

    本着向高层次技术群发展的目标,针对以上情况大家可以各抒己见,共同探讨。

    我先说说我的,大家可以参考:
    针对第一点,图片方面的压力,这个解决最简单,因为图片是静态的,所以可以采用高性能服务器,当遇到棘手的时候,瞬间可以使用linux服务器顶替,配置上nginx,因为IIS的每秒并发极限大概是2000-4000(随服务器性能而定),而基于linux架构的nginx可以轻松达到60000左右(windows上的nginx目前不推荐使用,并发在4500左右,略微高于IIS,而且目前的版本0.8也还没有使用windows下5大SOCKET架构模型之首的IOCP,尚开发中,所以目前不推荐windows的nginx),且在高速负载的情况下,每个进程内存占用经过实测大概在40MB左右,这个也得力于高效的Ext系统和epoll监听方式。命令行linux安装不熟悉可以使用图形化安装,没什么影响,nginx可以在这里下载 http://www.nginx.org/ 为前苏联哈萨克斯坦igor编写的高性能反向代理服务器,支持http,smtp等协议的负载。好,将来如果单台都不够用了,就在nginx后端启用多台服务器,每个服务器放分散开的不同的图片。然后nginx上配置下conf文件,把不同的地址前缀(比如1.xxx.com和2.xxx.com 也可以是 xxx.com/img1/ 和 xxx.com/img2/ 等,配置是基于正则表达式的,所以很灵活)导向到不同的后端服务器去,实现分流。还有一种方式就是使用squid或者varnish这类缓存服务器来做图片服务器前面的那台缓存服务器,使得负载还可以更上一层楼。另外我插一句,nginx支持"免维护"升级,也就是说,当满负荷的时候,可以不关闭程序实现升级(思路是升级的时候启动备用进程,然后实现连接互换,然后终止老进程,实现平滑升级),这对于超大型网站来说是很重要的技术指标,原理可以看源代码.前端如果一台不够,就做LVS群集,linux群集就比windows群集维护成本低多了...几台就可以支撑相当大的用户群.还有cache+webServer整合性功能产品Cherokee,也不错...也是高负载产品.可以试试.

    碰到第二点,遇到IIS并发连接压力,也就是说实打实的GET、POST太多,这个时候前端就挂接一台nginx,然后原来的IIS服务器放到nginx的下面,这里可以放多台IIS服务器,通过FTP实现镜像,然后前端通过nginx导向后端的镜像windows服务,实现IIS负载均衡。另外的方案就是使用windows的方案,最简单办法是通过windows自带的防火墙ICS编程来做端口映射,可以设置一个阀值,采用平均分配或者溢出分配来导向到不同的后端,专业点的就是通过windows自带的负载工具 “TCPIP负载均衡组件” 和 “路由和远程管理”也可以实现把请求分配到后端去的需求,还有种方式就是用ISA Server,恩,也可以直接群集服务了,这后一种在MSDN上推荐,但是成本太高,实践中我发现,他们成本差不多的,还是linux便宜,简单高效。这个时候可能我们的业务还是一台强悍的数据库服务器,CPU波动厉害,峰值超过80%这个时候就要看第三点了。

    针对第三点,我们这样来做,根据现有的大型负载方案(新浪,163等),数据库必须实现读写分离,毕竟写入要影响读取的速度,因为有个并发的问题。所以读写要分开,“读”的数据库可以是一台,也可以是多台;同样,“写”操作的数据库也可以是一台,也可以是多台。然后这些服务器之间通过发布订阅实现联机同步。当然这个是mysql的方案,但是sql2000也是类似的方式。这里手法就有点多了。大概思路之一,也是我们程序员比较能接受的,就是通过sqlConnectionString里面的server属*,指向不同的读、写服务器,实现负载,当然负载算法最简单的就是做个监控封装到组件里。操作数据库的时候通过扫描下当前哪个服务器的使用率最低,就用那台服务器的IP作为SQL连接字串的server选项的属性。这里可以参考(DiscuzNT读写分离负载方案 http://blog.csdn.net/daizhj/archive/2010/06/21/5683813.aspx)当然,那个人写的比较抽象,我在上面的文字给他总结了一下,呵呵。另外,如果程序很难适应改动,那么还是可以做负载,方法就是用"路由和远程管理"指定NAT策略,对数据库访问端口实现负载映射,根据压力情况合理的将请求分发到后端"并联"的多台服务器上.


    总结下,以上文字大家肯定可以看出,我是什么技术都在用的,可能有些人觉得太杂了,但是我是本着技术无关,适当的环节用适当的技术来实施的,这是我的原则。这样可以结合linux的简单高效低成本的后期运维和windows强大的开发资源。而且可能对于一个高速发展的企业,所用的技术并不是那么单一,可能后期会出现aspx服务,基于apache的php,等等杂七杂八的语言所构建的服务,没关系,只要统统放到反向代理服务器的后端去,就可以整合这些不同开发语言开发的服务,很方便。打个比方,您现在开发的asp.net页面很酷,作为门户了,但是以后的新员工来了,他们在另一个部门,由于竞争关系,他们的头头坚持使用php开发高速高压的统一认证服务,并封装为了webservice,那么就可以通过这种方式,合理整合这些资源。题外话,因此,新浪网站这些,都是各种开发语言鱼龙混杂的,只是通过反向代理整合了这些资源,前端统一体现为比如 index.shtml 这类后缀的网页,隐藏的后端实现而已。 
    以上是windows解决方案,部分节点强烈建议换成linux,负载更高,并且iptables的强大可不是盖的.
    展开全文
  • 一、docker zabbix相关镜像下载 ...分别docker pull (mysql:5.7 、zabbix/zabbix-agent 、zabbix/zabbix-server-mysql 、zabbix/zabbix-web-nginx-mysql) [root@ald8 ~]# docker images REPOSITORY TAG ...

    一、docker  zabbix相关镜像下载

    分别docker pull (mysql:5.7 、zabbix/zabbix-agent 、zabbix/zabbix-server-mysql 、zabbix/zabbix-web-nginx-mysql) 

    [root@ald8 ~]# docker images
    REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
    mysql                           5.7                 98455b9624a9        12 days ago         372MB
    zabbix/zabbix-agent             latest              d74b33fe19dc        5 weeks ago         17.5MB
    zabbix/zabbix-web-nginx-mysql   latest              e3fed311c1b2        5 weeks ago         163MB
    zabbix/zabbix-server-mysql      latest              8e5f74f0d320        5 weeks ago         62.7MB
    

    二、启动一个空的Mysql服务器实例

    (根据自己情况设定相关映射目录和端口)

    docker run --name mysql-server -t   -v /data/mysql5.7/data:/var/lib/mysql -v /data/mysql/etc:/etc/mysql/conf.d   -e MYSQL_DATABASE="zabbix"       -e MYSQL_USER="zabbix"       -e MYSQL_PASSWORD="zabbix"       -e MYSQL_ROOT_PASSWORD="zabbix"       -d mysql:5.7  --character-set-server=utf8 --collation-server=utf8_bin

    三、启动Zabbix server实例,并关联这个实例到已创建的MySQL服务器实例

    (我这里将zabbix访问端口设置成默认的10051,如果是线上服务器记得开通对应访问端口)

    docker run --name zabbix-server-mysql -t       -e DB_SERVER_HOST="mysql-server"       -e MYSQL_DATABASE="zabbix"       -e MYSQL_USER="zabbix"       -e MYSQL_PASSWORD="zabbix"       -e MYSQL_ROOT_PASSWORD="zabbix"       --link mysql-server:mysql       -p 10051:10051       -d zabbix/zabbix-server-mysql:latest
    

    四、 启动Zabbix web 接口,并将它与MySQL服务器实例和Zabbix server实例关联

    (我这里将web访问端口设置成了8668,如果是线上服务器记得开通对应访问端口)

    docker run --name zabbix-web-nginx-mysql -t       -e DB_SERVER_HOST="mysql-server"       -e MYSQL_DATABASE="zabbix"       -e MYSQL_USER="zabbix"       -e MYSQL_PASSWORD="zabbix"       -e MYSQL_ROOT_PASSWORD="zabbix"       --link mysql-server:mysql       --link zabbix-server-mysql:zabbix-server       -p 8668:80       -d zabbix/zabbix-web-nginx-mysql:latest
    

    五、 启动Zabbix-agent 和服务器关联起来

    (客户端如果不是用docker部署服务,建议用zabbix_agent非docker部署更节省占用资源)

    docker run --name zabbix-agent --link zabbix-server-mysql:zabbix-server -e ZBX_SERVER_HOST="zabbix-server-mysql" -e ZBX_SERVER_PORT=10051 -e ZBX_HOSTNAME="zabbix_agent" -v /dev/sdc:/dev/sdc -p 10050:10050 -d zabbix/zabbix-agent

    六、查看测试

    [root@ald8 ~]# docker ps 
    CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                           NAMES
    b890efbe552c        zabbix/zabbix-web-nginx-mysql:latest   "docker-entrypoint.sh"   21 minutes ago      Up 21 minutes       443/tcp, 0.0.0.0:8668->80/tcp   zabbix-web-nginx-mysql
    c4abbae035a9        zabbix/zabbix-server-mysql:latest      "docker-entrypoint.sh"   24 minutes ago      Up 24 minutes       0.0.0.0:10051->10051/tcp        zabbix-server-mysql
    d48665a75d44        mysql:5.7                              "docker-entrypoint.s…"   29 minutes ago      Up 29 minutes       3306/tcp, 33060/tcp             mysql-server
    

     

    访问web界面

    (我的是线上的做了域名指向,个人测试可以直接用ip+端口访问就行、自行修改语言和背景,支持中文)

    http://ald8.cn:8668

    默认帐号密码:
    Admin
    zabbix

    展开全文
  • HTML5本地数据库WebSQLIndexDB)

    千次阅读 2020-12-31 21:25:56
    并且,当前只有谷歌支持,ie火狐均不支持。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g6CM9dFv-1609421143537)(en-resource://database/4497:1)] 我们对数据库的一般概念是后端才...

    一、WebSQL

    WebSQL是前端的一个独立模块,是web存储方式的一种,我们调试的时候会经常看到,只是一般很少使用。并且,当前只有谷歌支持,ie和火狐均不支持。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g6CM9dFv-1609421143537)(en-resource://database/4497:1)]

    我们对数据库的一般概念是后端才会跟数据库打交道,进行一些业务性的增删改查。而这里的数据库也不同于真正意义上的数据库。

    Websql的关键技术点分为:

    • 测试浏览器支持
    • 创建数据库
    • 创建表格插入数据等

    主要方法:
    1、openDatabase:这个方法使用现有的数据库或者新建的数据库创建一个数据库对象。
    2、transaction:这个方法让我们能够控制一个事务,以及基于这种情况执行提交或者回滚。
    3、executeSql:这个方法用于执行实际的 SQL 查询。

    openDatabase() 方法对应的五个参数说明:

    • 数据库名称
    • 版本号
    • 描述文本
    • 数据库大小
    • 创建回调

    测试浏览器支持

    if(window.openDatabase){
        console.log(“浏览器支持DataBase”);
    }
    

    transaction执行数据库操作,操作内容就是正常的数据库的增删改查。executeSql是执行具体的sql,参数是
    1.sql语句(大写)
    2.语句中的变量,
    3.执行后的回调

    var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
    db.transaction(function (tx) {
      tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
      tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "菜鸟教程")');
      tx.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?)', [e_id, e_log]); //使用外部变量,执行时会将变量数组中的值依次替换前边的问号位置
        tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
            var len = results.rows.length, i; msg = "<p>查询记录条数: " + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; document.querySelector('#status').innerHTML += msg; }
        }, null); //查询和回调
      tx.executeSql('DELETE FROM LOGS  WHERE id=1'); //删除
      tx.executeSql('DELETE FROM LOGS WHERE id=?', [id]);
      tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=2'); //更新
      tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=?', [id]);
    });
    

    openDatabase(param1,param2,param3,param4,param5)参数说明:当指定的数据库名(param1)存在时,只有版本号(param2)与客户端一致或版本号指定为空的字符串(’’)时,可正常打开数据库,返回database对象,否则都将抛出异常;
    当指定的数据库名(param1)不存在时,将新创建一个符合参数的数据库,并返回database对象。
    第一个参数:数据库名
    第二个参数:当前数据库版本,若指定版本号与浏览器客户端不一致将报错,无法打开数据库,并抛出版本不匹配错误。可以指定为空(’’);建议指定为空字符串(’’),其他若不匹配都将报错。仅当指定的版本与客户端一致或指定为’'时,可以正常打开数据库;
    第三个参数:数据库描述。但实际感觉没啥用处。像是被丢弃了。
    第四个参数:数据库大小
    第五个参数:一个回调函数,当要打开的数据库不存在时,会将db作为参数调用,同时openDatabase也会返回db; 特别注意:回调函数执行为异步操作,需当心;比如在回调函数F中初始化创建了一张表A,但由于是异步的,在拿着openDatabase返回的db做操作时,就可能查询不到表A,因为之前的回调函数F可能还没完成。个人感觉不好使,建议弃用。

    基本操作与实际数据库操作基本一致。

    二、IndexedDB

    诞生背景:

    随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过4KB,且每次请求都会发送回服务器;LocalStorage 在 2.5MB 到 10MB 之间(各家浏览器不同),而且不提供搜索功能,不能建立自定义的索引。所以,需要一种新的解决方案,这就是 IndexedDB 诞生的背景。

    IndexedDB是浏览器提供的本地数据库, 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备的。就数据库类型而言,IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库。

    IndexedDB 具有以下特点:

    (1)键值对储存。 IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括 JavaScript 对象。对象仓库中,数据以"键值对"的形式保存,每一个数据记录都有对应的主键,主键是独一无二的,不能有重复,否则会抛出一个错误。

    (2)异步。 IndexedDB 操作时不会锁死浏览器,用户依然可以进行其他操作,这与 LocalStorage 形成对比,后者的操作是同步的。异步设计是为了防止大量数据的读写,拖慢网页的表现。

    (3)支持事务。 IndexedDB 支持事务(transaction),这意味着一系列操作步骤之中,只要有一步失败,整个事务就都取消,数据库回滚到事务发生之前的状态,不存在只改写一部分数据的情况。

    (4)同源限制 IndexedDB 受到同源限制,每一个数据库对应创建它的域名。网页只能访问自身域名下的数据库,而不能访问跨域的数据库。

    (5)储存空间大 IndexedDB 的储存空间比 LocalStorage 大得多,一般来说不少于 250MB,甚至没有上限。

    (6)支持二进制储存。 IndexedDB 不仅可以储存字符串,还可以储存二进制数据(ArrayBuffer 对象和 Blob 对象)。

    IndexedDB的一些基本概念:

    • 数据库:IDBDatabase
    • 对象对象仓库:IDBObjectStore 对象
    • 索引: IDBIndex 对象
    • 事务:IDBTransaction 对象
    • 操作请求:IDBRequest 对象
    • 指针: IDBCursor 对象
    • 主键集合:IDBKeyRange 对象

    (1)数据库
    数据库是一系列相关数据的容器。每个域名(严格的说,是协议 + 域名 + 端口)都可以新建任意多个数据库。IndexedDB 数据库有版本的概念。同一个时刻,只能有一个版本的数据库存在。如果要修改数据库结构(新增或删除表、索引或者主键),只能通过升级数据库版本完成。

    (2)对象仓库
    每个数据库包含若干个对象仓库(object store)。它类似于关系型数据库的表格。

    (3)数据记录
    对象仓库保存的是数据记录。每条记录类似于关系型数据库的行,但是只有主键和数据体两部分。主键可以是数据记录里面的一个属性,也可以指定为一个递增的整数编号。
    (4)索引
    (5)事务

    数据记录的读写和删改,都要通过事务完成。事务对象提供error、abort和complete三个事件,用来监听操作结果。

    基本操作:

    (1)打开数据库
    使用 IndexedDB 的第一步是打开数据库,使用indexedDB.open()方法。这个方法接受两个参数,第一个参数是字符串,表示数据库的名字。如果指定的数据库不存在,就会新建数据库。第二个参数是整数,表示数据库的版本。如果省略,打开已有数据库时,默认为当前版本;新建数据库时,默认为1。indexedDB.open()方法返回一个 IDBRequest 对象。这个对象通过三种事件errorsuccessupgradeneeded,处理打开数据库的操作结果。
    (2)新建数据库

    var db;
    var objectStore;
    var request = window.indexedDB.open(databaseName, version);
    
    request.onerror = function (event) {}
    request.onsuccess = function (event) {
        db = request.result//可以拿到数据库对象
    }
    //如果指定的版本号,大于数据库的实际版本号,就会发生数据库升级事件upgradeneeded
    request.onupgradeneeded = function (event) {
        db = event.target.result;
        if (!db.objectStoreNames.contains('person')) {//判断是否存在
            objectStore = db.createObjectStore('person', { keyPath: 'id' });
    //自动生成主键db.createObjectStore(
    //  'person',
    //  { autoIncrement: true }
    //);
        }
        //新建索引,参数索引名称、索引所在的属性、配置对象
        objectStore.createIndex('email', 'email', { unique: true });
    }
    

    (3)新增数据
    在以上操作的基础上,需要新建一个事务。新建时必须指定表格名称和操作模式(“只读"或"读写”)。新建事务以后,通过IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 对象,再通过表格对象的add()方法,向表格写入一条记录。

    写入操作是一个异步操作,通过监听连接对象的success事件和error事件,了解是否写入成功。

    function add() {
      var request = db.transaction(['person'], 'readwrite')
        .objectStore('person')
        .add({ id: 1, name: '张三', age: 24, email: 'zhangsan@example.com' });
    
      request.onsuccess = function (event) {
        console.log('数据写入成功');
      };
    
      request.onerror = function (event) {
        console.log('数据写入失败');
      }
    }
    
    add();
    

    (4)读取数据
    objectStore.get()方法用于读取数据,参数是主键的值。

    function read() {
       var transaction = db.transaction(['person']);
       var objectStore = transaction.objectStore('person');
       var request = objectStore.get(1);
    
       request.onerror = function(event) {
         console.log('事务失败');
       };
    
       request.onsuccess = function( event) {
          if (request.result) {
            console.log('Name: ' + request.result.name);
            console.log('Age: ' + request.result.age);
            console.log('Email: ' + request.result.email);
          } else {
            console.log('未获得数据记录');
          }
       };
    }
    
    read();
    

    (5)遍历数据
    遍历数据表格的所有记录,要使用指针对象 IDBCursor。openCursor()方法是一个异步操作,所以要监听success事件。

    function readAll() {
      var objectStore = db.transaction('person').objectStore('person');
    
       objectStore.openCursor().onsuccess = function (event) {
         var cursor = event.target.result;
    
         if (cursor) {
           console.log('Id: ' + cursor.key);
           console.log('Name: ' + cursor.value.name);
           console.log('Age: ' + cursor.value.age);
           console.log('Email: ' + cursor.value.email);
           cursor.continue();
        } else {
          console.log('没有更多数据了!');
        }
      };
    }
    
    readAll();
    

    (6)数据更新
    IDBObject.put()方法。

    function update() {
      var request = db.transaction(['person'], 'readwrite')
        .objectStore('person')
        .put({ id: 1, name: '李四', age: 35, email: 'lisi@example.com' });
    
      request.onsuccess = function (event) {
        console.log('数据更新成功');
      };
    
      request.onerror = function (event) {
        console.log('数据更新失败');
      }
    }
    
    update();
    

    (7)数据删除
    IDBObjectStore.delete()方法用于删除记录。

    function remove() {
      var request = db.transaction(['person'], 'readwrite')
        .objectStore('person')
        .delete(1);
    
      request.onsuccess = function (event) {
        console.log('数据删除成功');
      };
    }
    
    remove();
    

    (8)索引的使用
    添加索引后可以使用索引查询数据

    var transaction = db.transaction(['person'], 'readonly');
    var store = transaction.objectStore('person');
    var index = store.index('name');
    var request = index.get('李四');
    
    request.onsuccess = function (e) {
      var result = e.target.result;
      if (result) {
        // ...
      } else {
        // ...
      }
    }
    
    展开全文
  • 简单的连接数据库Web登录界面

    万次阅读 多人点赞 2018-03-30 11:44:03
    简单的连接数据库Web登录界面 一、需求分析 实现在登录界面输入用户名密码,连接数据库,与数据库信息进行比对,若用户名密码相互匹配,则显示登陆成功,若不正确,选择重新输入。 二、工具 1.MySql 2...

    简单的连接数据库的Web登录界面

    一、需求分析

    实现在登录界面输入用户名和密码,连接数据库,与数据库信息进行比对,若用户名和密码相互匹配,则显示登陆成功,若不正确,选择重新输入。

    二、工具

    1.MySql 2.Tomcat 3.Java EE 4.SQLyog或Navicat等,并配置好环境变量。

    三、实现步骤

    1.数据库建表

    首先,创建数据库,并在数据库中创建数据表,表格如图所示:
    这里写图片描述

    2.新建项目

    打开Eclipse Jee,File–new–Dynamic Web Project.

    3.创建JSP、Class文件

    1、新建login.jsp文件:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
        <center>
            <h1 style="color:blue">登录</h1>
                <form id="indexform" name="indexForm" action="check.jsp" method="post">
                    <table border="0">
                        <tr>
                            <td>账号:</td>
                            <td><input type="text" name="username"></td>
                        </tr>
                        <tr>
                            <td>密码:</td>
                            <td><input type="password" name="password"></td>
                        </tr>
                    </table>
                <br>
                    <input type="submit" value="登录">
                </form>
        </center>
    </body>
    </html>

    2、新建check.jsp

    <%@ page import="java.sql.*" language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    <jsp:useBean id="db" class="Bean.DBBean" scope="page"/>
    <%
        request.setCharacterEncoding("UTF-8");
        String username=(String)request.getParameter("username");//获取login页面输入的用户名和密码
        String password=(String)request.getParameter("password");
    
    
        String sql="select * from users where username="+"'"+username+"'";//定义一个查询语句
        ResultSet rs=db.executeQuery(sql);//执行查询语句
        if(rs.next())
        {
            //将输入的密码与数据库密码相比对,执行相应操作
            if(password.equals(rs.getObject("password"))){
                response.sendRedirect("success.jsp");
            }
            else{
                out.print("<script language='javaScript'> alert('密码错误');</script>");
                response.setHeader("refresh", "0;url=login.jsp");
            }
        }
        else 
        {
            out.print("<script language='javaScript'> alert('用户名错误,请重新输入');</script>");
            response.setHeader("refresh", "0;url=login.jsp");
        }
    
    %>
    </body>
    </html>

    3、新建success.jsp
    若用户名密码相比配,则显示此页面。

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body style="text-align:center">
    <h1>登录成功</h1>
    </body>
    </html>

    4、创建DBBean.java文件
    在该项目下,先创建名为Bean的package文件,然后创建DBBean.java文件:

    package Bean;
    import java.sql.*;
    public class DBBean {
        private String driverStr = "com.mysql.jdbc.Driver";
        private String connStr = "jdbc:mysql://localhost:3306/test";
        private String dbusername = "root";
        private String dbpassword = "root";
        private Connection conn = null;
        private Statement stmt = null;
    
        public DBBean()
        {
            try
            {
                Class.forName(driverStr);
                conn = DriverManager.getConnection(connStr, dbusername, dbpassword);
                stmt = conn.createStatement();
            } 
            catch (Exception ex) {
                System.out.println(ex.getMessage());
                System.out.println("数据连接失败!");
            } 
    
        }
    
        public int executeUpdate(String s) {
            int result = 0;
            System.out.println("--更新语句:"+s+"\n");
            try {
                result = stmt.executeUpdate(s);
            } catch (Exception ex) {
                System.out.println("执行更新错误!");
            }
            return result;
        }
    
        public ResultSet executeQuery(String s) {
            ResultSet rs = null;
            System.out.print("--查询语句:"+s+"\n");
            try {
                rs = stmt.executeQuery(s);
            } catch (Exception ex) {
                System.out.println("执行查询错误!");
            }
            return rs;
        }
        public void execQuery(String s){
            try {
                stmt.executeUpdate(s);
            } catch (SQLException e) {
    
                System.out.println("执行插入错误!");
            }
        }
    
        public void close() {
            try {
                stmt.close();
                conn.close();
            } catch (Exception e) {
            }
        }
    }

    5、导入Mysql包
    将mysql-connector-java-5.1.7-bin.jar拷贝到tomcat下lib目录即可。
    这里写图片描述

    四、运行结果

    这里写图片描述

    展开全文
  • 我使用SpringBoot复原了一下源码,需要的可以去我的GitHub上下载 ... 从前台页面获取图片,后台接收图片文件转化成数据,然后存储到数据库,然后反向输出到jsp页面 二、分析一下数据转换数据流通...
  • 大话JAVA:从零基础到数据库WEB开发.pdf

    千次下载 热门讨论 2013-01-07 10:04:26
    《大话JAVA:从零基础到数据库WEB开发》以漫画的形式,由浅入深、循序渐进地介绍Java编程的常用技术方法,内容涵盖了Java基本语法结构、面向对象特征、集合框架体系、异常处理、GUI编程、MySQL数据库、JDBC...
  • 1.Mysql是一种关系型数据库管理系统,下属甲骨文。关联数据库将数据保存在不同的表中...Linux作为操作系统,Apache Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个
  • 基于Jax-WSMysql数据库WEB服务开发

    千次阅读 2016-06-13 11:06:03
    基于Jax-WSMysql数据库WEB服务开发 1 简介 近几年来,SOA,EAI等架构体系的日渐成熟,Webservice越来越炽手可热,尤其是在企业做异质平台整合时成为了首选的技术。Java的Webservice技术更是层出不穷,...
  • 远程MS SQL数据库和本地MS SQL数据库 WEB管理(1)-- 表结构和数据类型对比 远程MS SQL数据库和本地MS SQL数据库 WEB管理(2)-- 数据手动同步 远程MS SQL数据库和本地MS SQL数据库 WEB管理(3)-- 数据自动同步 ...
  • 创建Web数据库

    2019-11-07 15:26:18
    创建Web数据库MySQL 监视程序登录到MySQL创建数据库和用户设置用户与权限MySQL权限系统的介绍最少权限原则创建用户:GRANT命令四个级别的权限权限的类型和级别REVOKE 命令例子创建一个Web用户正确使用数据库创建...
  • 1.Chrome MySQL Admin 2.OmniDB 3.phpMyAdmin 在“客户端-服务器”的“cs模式”里浏览器应该算是最流行的...下文安利几个实际工作中用到的MySQL数据库Web客户端访问程序。 1.Chrome MySQL Admin https://www.e.
  • JMeter 最早是为了测试 Tomcat 的前身 JServ 的执行...今天就来说说Jmeter如何来完成WEB 和数据库的测试: Web 服务器 对于大多数的项目来说,并不会自行开发一个Web服务器,因此Web服务器压力测试的对象...
  • 本文教你创建多个内容数据库到一个Web应用程序,并应用合适的网站集到对应内容数据库
  • 创建数据库Web Services

    千次阅读 2009-07-08 14:10:00
    XML Web Services一个最显然的用处就是通用数据存取。通过它,你可以把公司的...下面就解释一下如何创建一个简单的Web Services,把你的数据库内容显示到Internet Explorer、第三方的Web Services自定义的C#
  • 移动端H5的数据库,IndexDB和WebSql

    千次阅读 2018-08-16 10:38:57
    本篇封装了移动端H5的数据库,兼容了IndexDB和WebSql,只需使用key-vale的方式进行存取; 为什么要封装WebSql呢?ios9还不支持IndexDB;闲话少说,直接上代码 var isIOS = !!navigator.userAgent.match(/\(i[^;]+;...
  • HTML5本地数据库(WebSQL)

    千次阅读 2015-06-19 16:25:10
    在上一篇《HTML5的sessionStorage...实际上,除了sessionStoragelocalStorage外,HTML5还支持通过本地数据库进行本地数据存储,HTML5采用的是"SQLite"这种文件型数据库,该数据库多集中在嵌入式设备上,熟悉IO
  • 分别从前端、后端、数据库阐述web项目的性能优化 参考答案: 该题目网上有很多方法,我不想截图网上的长串文字,看的头疼,按我自己的理解说几点 前端优化: (1)减少http请求、例如制作精灵图 (2)htmlCSS放在页面...
  • Android版源码和Web版源码+mysql数据库完整项目 一个项目有移动Android版本 和Web版本源码。带数据库。可直接部署运行。学习参考必备。 希望大家原谅10分下载。
  • 配置Tomcat数据源 context.xml文件的配置 Tomcat中web.xml配置数据库和servlet的配置
  • 物流管理平台 java web 完整项目 包含源码和数据库 物流管理平台 java web 完整项目 包含源码和数据库
  • web项目怎么和数据库连接?

    千次阅读 2020-03-28 10:19:54
    说下情况,现成的web项目,直接导到myeclipse,然后有个sql文件,我用Navicatformysql运行了,在myeclipse 的DBbrowser也导入了,然后我在打开的后台里输入登录信息,一直都提示lrc下载错误。但肯定是对的。我的...
  • 人力资源管理系统 java web 完整项目 包含源码和数据库 人力资源管理系统 java web 完整项目 包含源码和数据库
  • Oracle数据库10g Java、JDBC和web服务 从 Oracle8i 起,Oracle 数据库就内嵌了 Java VM,其与 SQL 相结合,打开了通向传统 RDBMS 难以涉足的高级应用的大门。本文档重点介绍在关系数据库中集成 Java 所带来的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,656
精华内容 27,062
关键字:

数据库和web