session

java空指针异常:java.lang.NullPointException

大憨熊 提交于 2020-04-02 11:06:47
一.什么是java空指针异常 我们都知道java是没有指针的,这里说的"java指针"指的就是java的引用,我们不在这里讨论叫指针究竟合不合适,而只是针对这个异常本身进行分析。空指针就是空引用,java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,当然会出现空指针异常。 public class Test { private int a=1; private int b=2; public static void main(String[] args) { // TODO Auto-generated method stub Test t1 = new Test(); Test t2 = null; System.out.println(t1.a); System.out.println(t2.a); System.out.println(t2.c()); } public String c(){ return "123"; } } 我们分析上面这段示例代码,在Test类中,有两个成员变量a和b,和一个方法c()。然后在main(

MyBatis基本应用

微笑、不失礼 提交于 2020-04-02 09:25:40
Mybatis(iBatis)简介 : (前身为iBatis)MyBatis是一个可以自定义SQL,存储过程和高级映射的持久层框架。MyBatis消除了几乎所以是JDBC代码和参数的手工设置以及结果集的检索。MyBatis可以使用简单的XML或注解用于配制和原始映射,将接口和JavaPOJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 作用:封装了JDBC操作,简化了数据库的访问 功能如下:——封装了获取连接,执行SQL,释放连接 ——封装了SQL参数设置 ——封装了记录映射成实体对象的过程,实体类的属性名与结果查询结果集ResultSet中列名保持一致 开发者:写SQL和实体类,然后使用SqlSession对象执行sql操作 MyBatis体系结构主要由以下几个关键部分 (1)加载配置 配置有两种形式,一种是XML配置文件,另一种是Java代码的注解。MyBatis将SQL的配置信息加载成为一个个MappdStatement对象( 包括了传入参数映射配置,执行的SQL语句,结果映射配置),并将其存储在内存中。 (2)SQL解析 当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map,JavaBean或者基本数据类型)MyBatis会根据SQL的ID找到对应的MappedStatement

会话跟踪

六眼飞鱼酱① 提交于 2020-04-02 07:47:40
9.1 会话跟踪的需求 HTTP是无状态协议: 协议的状态是指下一次传输可以“记住”这次传输信息的能力,无状态是指 同一个会话( 注意什么叫同一个会话 )的连续两个请求互相不了解 ,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再发送请求给服务器的时候,他会响应,但是他不知道你就是刚才那个浏览器, 每一次请求和响应都是相对独立的。 在客户端与服务器进行动态交互的Web应用程序出现之后, HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品 。 于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session Cookie是通过客户端保持状态的解决方案。 从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息,有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。 与Cookie相对的一个解决方案是Session,它是通过服务器来保持状态的。 需要在这里明确一下Session的含义。首先,我们通常都会把Session翻译成会话

JavaWeb数据库应用开发基础

扶醉桌前 提交于 2020-04-02 06:13:50
JavaWeb数据库应用 JavaWeb数据库应用开发的几种方式 一、JSP+JDBC 二、JSP+Servlet(+JDBC) 三、JSP+Servlet+DAO(+JDBC) 四、JSP+Servlet+DAO(+JDBC)+JavaBean JavaWeb数据库应用开发的几种方式 以下总结了课程中学习的四种JavaWeb数据库应用开发方式,其中第前两种适合业务逻辑和功能简单的系统;后两种则是经典的MVC开发模式,推荐大家主要采用这种方式。此外,在有一定基础后可以学习使用主流开发框架,如Spring等,开发企业级应用。 一、JSP+JDBC 1.新建前端JSP页面,通过表单或超链接方式提交请求及参数到后端JSP页面。 2.新建后端JSP页面,导入JDBC相关包和类,连接数据库并接收前端请求参数,执行sql语句,最后输出结果并进行响应。 实验:参见实验db_ex1.jsp至db_ex5.jsp 二、JSP+Servlet(+JDBC) 1.新建前端JSP页面,通过表单或超链接方式提交请求及参数到servlet的URL(注意,servlet的URL地址可以进行配置)。 2.新建Servlet类,并配置URL映射。导入JDBC相关包和类,连接数据库并接收前端请求参数,执行sql语句,最后输出结果并进行响应。(注意

Memcached内存缓存技术

北战南征 提交于 2020-04-01 15:17:06
Memcached是什么,有什么作用? Memcached是一个开源的、高性能的内存缓存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思。 Memcached通过在事先规划好的内存空间中临时缓存数据库中的各类数据,以减少业务直接对数据库的访问,从而减轻数据库的访问压力和网站集群的响应速度。 Memcached服务在企业集群架构中应用场景 1.作为数据库的前端缓存应用 完整缓存(易):例如商品分类,以及商品信息,可实现放到内存里,然后再对外提供数据访问。这个被称之为预热。用户访问时可以只读取memcached缓存,不读取数据库了。 热点缓存(难):需要前端程序配合。只缓存热点的数据,即缓存经常被访问的数据。先预热基础数据,然后再动态更新。程序先读取缓存,如果缓存里没有对应的数据,程序再去读取数据库,然后程序把读到的数据放入缓存。 特殊说明: 如果碰到电商秒杀等高并发的业务,一定要事先预热,或者其他思想实现,例如:秒杀只是获取资格,而不是瞬间秒杀到手商品。如果数据更新,要同时触发缓存更新,防止给用户过过期数据。 2.作为集群的session会话共享存储 优点:速度比files块,可以解决共用session问题 缺点:不能持久化,只能单点部署,多点数据无法同步,即使用hash分配节点,也会有session丢失 Memcached服务在不同企业业务应用场景中的工作流程 1

浏览器相关的前端知识

我的梦境 提交于 2020-04-01 13:11:14
一、输入url到展示页面过程发生了什么? URL(Uniform Resource Locator)统一资源定位符,用于定位互联网上资源 scheme: // host.domain:port/path/filename scheme:定义因特网服务的类型,常见的类型有:HTTP HTTPS和GTP。 host:定义域主机(http默认是www) domain:定义因特网域名,比如xxx.com.cn port:定义主机上的端口号(http:默认是80) path:定义服务器上的路径 filename:定义文档/资源的名称 1. DNS解析:将域名解析成IP地址 在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名找到对应的服务器,而是要通过IP地址,之所以我们用的是域名而不是IP,是因为IP是一段数字,特别不容易记住,而域名其实就是IP的伪装者。 什么是域名解析:DNS协议提供通过域名查找IP地址,或者是反向通过IP查找域名的服务。DNS是一个网络服务器,我们的域名解析简单来说就是DNS上记录一条信息记录。 1.1 递归查询 主机向本地域名服务器的查询一般都是采用递归查询。 所谓递归查询就是:如果主机所查询的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询的请求报文(即替该主机继续查询)

Flask(flask_sqlalchemy)使用原生sql

早过忘川 提交于 2020-04-01 13:08:49
app.py from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy() Session = db.sessionmaker(bind=db.engine) session = Session() db_session.py from init import db def fetch_to_dict(sql, params={}, fecth='all', bind=None): ''' dict的方式返回数据 :param sql: select * from xxx where name=:name :param params:{'name':'zhangsan'} :param fecth:默认返回全部数据,返回格式为[{},{}],如果fecth='one',返回单条数据,格式为dict :param bind:连接的数据,默认取配置的SQLALCHEMY_DATABASE_URL, :return: ''' resultProxy = db.session.execute(sql, params, bind=db.get_engine(bind=bind)) if fecth == 'one': result_tuple = resultProxy.fetchone()

session和cookie的区别

元气小坏坏 提交于 2020-04-01 02:22:33
cookie与session的区别有:cookie以文本格式存储在浏览器上,存储量有限;而会话存储在服务端,可以无限量存储多个变量并且比cookie更安全 在php中可以指定站点的访问者信息存储在session或者cookie中,它们都可以完成同样的事,那么他们的区别是什么呢,接下来将在文章中为大家详细介绍 位于用户的计算机上,用来维护用户计算机中的信息,直到用户删除。比如我们在网页上登录某个软件时输入用户名及密码时如果保存为cookie,则每次我们访问的时候就不需要登录网站了。我们可以在浏览器上保存任何文本,而且我们还可以随时随地的去阻止它或者删除。我们同样也可以禁用或者编辑cookie,但是有一点需要注意不要使用cookie来存储一些隐私数据,以防隐私泄露 session session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站 session与cookie的区别 (1)Cookie以文本文件格式存储在浏览器中,而session存储在服务端它存储了限制数据量。它只允许4kb它没有在cookie中保存多个变量。 (2)cookie的存储限制了数据量,只允许4KB

spring mvc下shiro的session,request等问题

做~自己de王妃 提交于 2020-03-31 08:03:04
最近的一个项目使用的是spring mvc,权限框架使用的是shiro. 不过有一个问题一直困扰着我,现在的session到底是谁的session,是servlet的还是shiro的. 于是我把spring controller参数里面的HttpServletRequest对象和HttpSession对象打印了出来 这两个对象打印的结果是org.apache.shiro.web.servlet.ShiroHttpServletRequest和org.apache.shiro.web.servlet.ShiroHttpSession 在不使用shiro时这些对象应该均为tomcat所实现的类,这说明在shiro执行filter时将request对象包装成了shiro实现的类. 那么shiro是在什么时候将request对象包装了的呢? 先看一下shiro的拦截器类图: ShiroFilter 是整个 Shiro 的入口点,用于拦截需要安全控制的请求进行处理。ShiroFilter 继承自AbstractShiroFilter,而AbstractShiroFilter继承自OncePerRequestFilter 先看一下OncePerRequestFilter的源码 : public abstract class OncePerRequestFilter extends

nginx集群tomcat,session共享问题

浪尽此生 提交于 2020-03-31 05:21:50
简介 上一篇中,nginx实现了tomcat集群,但是其实集群还有很多问题,比如session共享问题。简单来说就是通过负载均衡之后,用户第一次请求的tomcat和第二次请求的tomcat基本不是同一个,但是你在第一次请求放在session中的值只有一个tomcat才,第二个请求的那个tomcat里面是没有的。这样就出现了用户不停登入的情况。。。 方法一:复制session信息 原理:讲道理,这个方法比较蠢,就是有几个tomcat,就复制几个session,只要有一个tomcat中的session发生变化,其他tomcat中的session跟着复制变化,保证所有用户的session在所有的tomcat中都存在而且相同。这样一来无论用户的请求被分配到哪个tomcat都是无所谓的,因为所有的tomcat中都有他们存放的session。 打个比方:如果tomcat相当于饭店,会话相当于筷子的话,如果每次吃饭都要用自己的筷子,那是不是要把每个饭店都放一双自己的筷子。这就是这个方法的原理。 实现: 1、修改sever.xml文件:将Cluster的注释去掉 这里写图片描述 2、打开自己项目的web.xml(不是tomcat/conf/web.xml),增加distributable。 优点:实现简单,没有什么花里胡哨的操作。如果集群的tomcat不多,而且用户没有那么多的时候可以选择这种方式