npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gxdao

v1.1.4

Published

use j2ee and DAO to CRUD from mysql,introduce session

Downloads

41

Readme

主要结构: gxdao/JavaEE gxdao/JavaEE/JDBC/j2ee/web gxdao/javaEE/session 说明

一、主要示例:借助 DAO 的思想,利用 Tomcat 和 Servlet 实现 Mysql 的 CRUD 操作+前端 Html 利用 JSP 演示 Session、Cookie 的机制。 1.1.2 版本新增了,hero 表界面的 用户登录+注册功能,采用 MVC 思想构建的新版本的 JDBC 源码,位于 JDBC 1.0.1-登录功能-独立Tomcat80端口 文件夹中,详细配准内容见该文件夹内的README说明文件。 1.1.3 版本在1.1.2版本的基础上,基于 filter 的思想 增加了 验证码功能,错误次数过多将需要输入验证码,登录错误次数过多将被限制访问。 1.1.4 版本在1.1.3版本的基础上,使用 基于 Listener 的监听方法,用于统计在线人数,并实现重复登录拦截的功能。 主要说明: 前端:addHero.html、editHero.html

后端:HeroSevlet(查询主表)、AddHeroServlet、DeleteHeroServlet、EditHeroServlet、UpdateServlet、HeroDAO

简化代码,避免频繁请求连接 connection,避免冗长的 声明 PreparedStatement 以及冗长的设置参数的代码。 使用一个 query 方法 封装所有的 CRUD 操作,以提高代码复用率。 由于 反射机制 学的不是很深入,就采用了较为简单的判断方法来设置参数。

具体如下: 使用懒汉单例模式构建 HeroDAO 类,因为我觉得不应该提供多个 Connection , 毕竟暂时还未考虑多线程和并发,既避免 多个 Connection 容易形成的错误, 又减轻了访问数据库的压力和资源占用,还可以复用同一个 Connection。

query 方法 用于访问数据库,需要提供字符串参数 sql 语句,可选择的 Object 参数。 采用 PreparedStatement ,并结合 try-with-resource 的方法,调用完就关闭资源。 但是,Connection 不能使用 try-with-catch ,因为后续 DAO 都复用这个唯一连接。

所有的 PreparedStatement 的参数设置都封装在一个方法内, 通过 query ( String sql,Object...params ) 来通用所有的参数类型, 根据 sql语句与指定的参数,访问数据库并执行增删改查操作。 * @param sql 为数据操作所执行的 sql 语句 * @param objs 参数,如果为 Hero 对象,则默认设置 Hero 除 id 以外的所有属性, * 可以另外提供 hero.id 参数作为输入, * 如果为基本数据则设置相应的参数,类型:Integer、Float,其他皆按照 Double设置 * 如果为String对象,则设置字符串参数。 * 不提供参数,则不进行设置,直接执行 sql 语句。 * @return 如果为查询操作,则以 LinkList 形式返回查询结果,否则返回 null


二、使用步骤:

0.安装 mysql 客户端 和 服务端,并设置 用户名为 root,密码为 admin, 数据库名为 how2java ,表名 :hero ,端口为:3306。可向其中添加一些信息。 0.1 mysql 数据库 配置教程:https://how2j.cn/k/mysql/mysql-install/377.html 0.2 mysql 创建表教程与代码:https://how2j.cn/k/servlet/servlet-query/563.html CREATE TABLE hero ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(30) DEFAULT NULL, hp float DEFAULT NULL, damage int(11) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

1.需要使用 Eclipse 导入 dynamic 动态 web 项目, 导入教程:https://how2j.cn/k/servlet/servlet-import/1371.html

2.通过Eclipse启动Tomcat-服务器选择Tomcat v7.0 Server,然后指定Tomcat目录所在位置, 选择 Tomcat7-8080-eclipse 文件夹所在位置。 配置 Tomcat 见教程:https://how2j.cn/k/servlet/servlet-dynamic-web-project/1306.html

3.在浏览器 输入 http://127.0.0.1:8080/j2ee/hero 即可浏览项目示例。

4.如果启动失败,请检查80端口是否被占用,关闭即可。 见教程:https://how2j.cn/k/tomcat/tomcat-portfix/545.html

详见:https://how2j.cn/k/jsp/jsp-session/583.html,@虚心求学 的回答 我认为 session 存的东西重要性和安全性 > Cookie,因为两者存放的位置不一样。

            Cookie 字如其名:曲奇饼干,你吃掉一口,但是自己还留了一大块,可以理解为 用户本地存东西的方式,
            而服务器可以理解为 零食店, Sesssion 则可以理解为 零食店(服务器) 的货架, 是服务器存储用户信息的容器。

Cookie 和 Session 的关系,以及 用户获取 session 的过程可以这么理解:

你吃了一口 cookie ,发现蛮不错的,吃完了想去超市买(从服务器拿东西), 商店的货架上,有各式各样的牌子,你吃的是哪个牌子的?找不到, 是不是得问超市店员,拿着你的 Cookie 给他看,他一个一个地比对,后来店员发现 咦!这个曲奇商品和你的曲奇饼干长得一模一样(id匹配),于是就拿出来给了你(当然要付钱)。。。

这个过程,就是服务器根据 Cookie 中留存的 id 信息, 找到对应的 session,返回给用户。

当你第一次访问服务器,并没有 session_id 信息,服务器会自动给你分配一个,并保存到用户本地。 相当于:你第一次去零食店,你手上没有饼干,店员拿了新品给你免费品尝(分配session id), 于是你开开心的拿了一个饼干回家,相当于 将 session_id 存到了本地的 Cookie 中,这个session_id, 就是 饼干的牌子,也就是 服务器 session 的唯一标识符,根据这个id可以找到用户的session。

当你第二次访问服务器,手上已经有了一个 session_id(本地Cookie中存在),服务器就不会再给你 分配 session key 了,而是根据你的 session Id 找到对应的 session 返回给你。 相当于,你下次、下下次去零食店,你手上已经有了饼干,店员想了想 你这小子又想白嫖!不会再给你 发免费饼干了。你赶紧解释说:误会了,我是来买东西的,于是你给店员看了你手上饼干的牌子(session_id), 让他根据这个牌子,找到货架拿出你要买的东西卖给你。

自然,饼干有保质期,商店货架上的东西也有保质期。也就是,Cookie 、 session 都有期限, 过期了自然就失效了。

会话是指客户端和服务器之间的一系列交互过程,从用户访问网站开始直到关闭浏览器。而 Cookie 是存储在用户计算机上的小型文本文件,用于跟踪和标识用户。

在服务器第一次分配 sessionid 时,服务器会生成一个唯一的 session 标识符,并将其发送给客户端。客户端接收到 sessionid 后,将其存储在本地的 Cookie 中。从本地获取 sessionid 到服务器后,服务器会尝试使用该 sessionid 找到对应的会话信息,并恢复用户之前保存的状态。随后,在用户第二次访问时,浏览器将包含该 sessionid 的 Cookie 发送给服务器以表明自己身份,并且服务端找到相应的 session 信息为用户提供持续性服务。

截图是整个过程,模拟 session id 的分配、session id 到 Cookie d的存储,session 的 获取,session 的加解密。 session_id 始终是对用户隐藏的,存放在session中,而 session_id 加密后的 session_key 是可以短暂的存留在 Cookie 中。 为了直观地模拟 session 创建、获取过程,选择自定义一个新的 session id,命名为 session_id,出于安全考虑, 一般会对这个 id 进行加密,而不是直接把 id 传输给用户。为了模拟加密的过程,我选择 进制转换 的方式以及伪码的方式加解密, 当然实际的加密方式更复杂,我只是简单地模拟。每一个过程,session_id 都是对用户隐藏的,仅 通过session_key 通讯。

模拟过程主要包括:

  1. setSession:用户第一次访问服务器,没有存储 id ,系统自动分配一个session Id, 并通过加密的方式,返回给 用户 session_key(对 id 的加密)。

  2. setCookie:将上一个过程分配的 session_key 保存在用户本地的 Cookie 中。

  3. getCookie:尝试拿出 Cookie 中的 session_key,目的是为了下一步去服务器比较 session 的id。

4.getSession:由于步骤3 已经拿到了 session_key,因此可以尝试从服务器拿出 session, 服务器 接收到用户端传来的 session_key,对其解密为 session_id ,尝试比较 各个session属性的 id,如果匹配,则返回对应的sesstion 值,获取成功。反之,返回错误信息,获取失败。

5.当用户第二次访问服务器,此时已经存在 session_key (位于 Cookie中) ,因此不再继续分配 id, 而是直接 到 获取 Cookie 步骤,也就是到步骤3,无需setCookie。

6.当 session_key 过期,或者 session 会话过期,或者尝试通过错误的key来访问session, 服务器对其拦截,并返回 获取失败信息。

以上的过程,都对应者jsp文件,分别为:setSession -> setCookie -> getCookie -> getSession 详见代码,每个部分编辑为独立的jsp文件,然后放在 web 目录下,启动自己的 Tomcat,或者在 Eclipse 启动8080Tomcat, 如果是我文件夹中的Tomcat, 浏览器 首先访问 http://127.0.0.1:8080/j2ee/setSession.jsp 即可

以上是我的拙见,恳请各位批评指正。