知识点题纲
Filter(过滤器)与servlet的区别:
1、 Filter实现Filter接口,Servlet实现Servlet接口;
2、 Filter是当Servlet容器启动后就会初始化,Servlet是当Servlet类被调用之后才初始化;
3、 Filter层次调用doFilter()方法中FilterChain.doFilter()(过滤链)之前的内容,然后调用servlet中的service方法,再调用doFilter()方法中FilterChain.doFilter()(过滤链)之后的内容;按配置顺序和条件调用满足条件的Servlet,调用之前事先调用满足条件的Filter;
4、 Filter服务器停止后销毁,晚于Servlet销毁之后,Servlet在服务器停止之后销毁;
5、 Filter在请求到达Servlet之前拦截请求,根据条件对请求进行处理,Servlet主要是处理客户端请求并将结果返回给客户端。
二、jsp的九大内置对象:
1、request
HttpServletRequest类的实例,request对象具有请求域,完成客户端请求之前该对象一直有效。
2、response
HttpServletResponse类的实例,response对象具有页面作用域,在页面内该对象只能对这次访问有效。
3、session
HttpSession类的实例,Session对象具有一次会话的作用域,一次会话就是客户端连接到服务器直到客户端与服务器断开连接
4、out
JSPWriter类的实例,out是向客户端输出内容时常用到的对象。
5、page
Java.lang.Object类的实例,page对象就是指当前jsp页面本身。
6、application
ServletContext类的实例,application对象实现了用户间数据的共享,可以存放全局变量。它开始于服务器的启动一直到服务器关闭,在此期间该对象一直存在。
7、exception
Java.lang.Throwable类的实例,exception对象是一个例外对象,当一个页面在运行的过程中发生了例外,就会产生这个对象。如果一个页面要用这个对象,就必须把isErrorPage设为true,负责无法编译。
8、pageContext
PegeContext类的实例,pageContext对象提供了对jsp页面内所有对象以及名字空间的访问。
9、config
config对象是在一个Servlet初始化时,jsp引擎向它传递信息用的,此信息包括Servlet初始化时需要用到的参数以及服务器的有关信息。
三、jQuery选择器:
详见下面链接:
http://www.cnblogs.com/kissdodog/archive/2012/11/05/2755103.html
1、 基本选择器:
1、#id 根据id匹配一个元素;
2、.class 根据给定的class匹配元素;
3、element 根据元素名匹配元素;
4、* 匹配所有元素。
2、层次选择器:
1、 ancestor descendant 根据祖先匹配所有的后代元素;
2、 parent>child 根据父元素匹配所有的子元素,直接后代;
3、 prev+next 匹配下一个兄弟元素;
4、 prev~siblings 匹配后面的兄弟元素。
3、简单过滤选择器:
4、内容过滤选择器:
5、可见性过滤选择器:
6、属性过滤选择器:
7、子元素过滤选择器:
8、表单对象属性过滤选择器:
9、表单选择器:
四、Mysql常用函数:
详见下面链接:
http://www.jb51.net/article/40179.htm
1、 数学函数:
1、 abs(x) 返回x的绝对值;
2、 ceiling(x) 返回大于x的最小整数;
3、 floor(x) 返回小于x的最大整数;
4、 mod(x,y) 返回x%y的模数;
5、 pi() 返回π(圆周率);
6、 round(x,y) 返回参数x四舍五入有y位小数的值;
7、 truncate(x,y) 返回参数x截短为有y位小数的值;
8、 ……等等。
2、聚合函数:
1、 avg(column) 返回指定列的平均值;
2、 count(column) 返回指定列中非null值的个数;
3、 min(column) 返回指定列的最小值;
4、 max(column) 返回指定列的最大值;
5、 sum(column) 返回指定列的所有值的和;
6、 group_concat(column) 返回由属于一组的列值连接组合而成的结果。
3、字符串函数:
1、 concat(s1,s2,……)将s1,s2,……连接成字符串;
2、 Concat_ws(sep,s1,s2,……)将s1,s2,……连接成字符串,并用sep字符间隔;
3、 insert(str,x,y,instr)将字符串str从x位置开始,y个字符长的子串替换为字符串instr,返回结果;
4、 trim(str)去除字符串首尾所有的空格;
5、 ……等等。
4、日期和时间函数:
1、 curdate() 返回当前的日期;
2、 curtime() 返回当前的时间;
3、 hour(time) 返回time的小时值(0~23);
4、 now() 返回当前的日期和时间;
5、 year(date) 返回日期date的年份(1000~9999);
6、 ……等等。
5、加密函数:
6、控制流函数:
7、格式化函数:
8、类型转化函数:
9、系统信息函数:
五、Hibernate与Mybatis的区别:
1、 Hibernate是一个完全的ORM框架,维护的是对象与表之间的映射,Mybatis不是一个完全的ORM框架,维护的是sql结果集合;
2、 Mybatis没有提供事务,其事务管理用的是JDBC的,Hibernate3和Hibernate4提供了事务管理;
3、 Hibernate的ORM映射能力强,数据库无关性强,数据库可移植性自然就强;
4、 Hibernate自动生成sql语句,sql不可控,Mybatis需要程序员编写sql,sql可控性强。
六、Struts2与SpringMVC的区别:
1、 Struts2的核心控制器是一个过滤器:DispatchFilter在StrutsPrepareAndExcuteFilter的init()方法中加载struts.xml文件,SpringMVC的核心控制器是一个Servlet:DispatchServlet,application.xml文件在该servlet的init()方法中加载;
2、 Struts2基于类,接受前台传递参数是通过属性驱动和模型驱动给全局变量赋值,多个方法可以共享,SpringMVC是基于方法,接受前台传值是通过方法传参得到的,多个方法之间不可以共享。
七、Spring和SpringMVC的常用注解:
1、 Spring的常用注解:
使用注解之前需要开启注解,和加上包扫描。
1、@Configuration:把一个类作为IOC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean;
2、@Scope:用于指定scope的作用域(用在类上);
3、@Lazy(true):表示延迟初始化;
4、@Service:用于标注业务层组件;
5、@Controller:用于标注控制层组件;
6、@Repository:用于标注数据访问组件,即DAO层;
7、@Component:泛指组件,当组件不好归类时,使用此注解;
8、@PostConstruct:用于指定初始化方法(用在方法上);
9、@PreDestory:用于指定销毁方法(用在方法上);
10、@AutoWired:默认按类型自动装配;
11、@Resource:默认按名称装配,如果找不到与名称匹配的Bean才会按照类型装配。
2、SpringMVC的常用注解:
1、@Controller:负责注册一个Bean到Spring上下文中,Bean的ID默认为类名首字母小写,也可以由程序员自定义;
2、@RequestMapping:用来定义访问的URL(用在类上和每个方法上);
3、@PathVariable:用于方法中的参数,表示方法参数绑定到URL上;
4、@RequestParam:从Request域当中读取参数,类似于request.getParameter(“name”)。
八、final和static总结:
final表示最终的,无法改变的;static表示全局的,静态的。
1、修饰变量:
1、 final修饰的变量只能赋值一次,赋值后值不再改变。
2、 static修饰的变量称为类变量,在内存中只分配一次空间,在加载类的时候就会分配,可以用类名直接访问。
2、修饰方法:
1、 final修饰的方法不能被子类的方法覆盖,但可以被继承。
2、 static修饰的方法叫静态方法:
①、可以用类名直接调用;
②、静态方法中不能有this和supper关键字;
③、不能在静态方法中直接访问该类非静态的变量和方法;
④、静态方法独立于任何实例,因此静态方法必须被实现,不能是抽象的abstract。
3、修饰类:
1、 final修饰的类不能被继承,不能被扩展,没有子类,该类中的方法默认是final的。
2、 static不能修饰普通类,但可以修饰内部类,被static修饰的内部类可以作为一个普通类来使用,不需要实例一个外部类。
4、静态块:
static{静态代码体}:称为静态块,不再任何方法体中,是独立的语句块。
①、JVM加载类时会执行静态块,每个静态块只被执行一次;
②、一个类中可以有多个静态块,顺序可以任意放;
③、执行时按照静态块在类中出现的先后顺序依次执行。
九、Set、List、Map:
1、区别以及使用场景:
①、List和Set都是继承自Collection接口,而Map不是;
②、List的特点:元素有放入顺序,元素可以重复,可以用下标来取元素;
Set的特点:元素无放入顺序,元素不可重复,重复元素会被覆盖。
③、Set和List对比:
Set:检索元素效率低,删除和插入效率高,删除和插入不会影响元素位置;
List:和数组类似,List可以动态增长,查找元素效率高,删除和插入元素效率低,因为会引起其它元素位置变化。
④、Map适合存储键值对数据。
⑤、多线程同步问题:
HashSet、TreeSet线程不同步;
ArrayList、LinkedList线程不同步;
Vector线程同步;
HashMap线程不同步;
Hashtable线程同步。
2、ArrayList与LinkedList:
①、优点:
ArrayList:基于动态数组的数据结构,地址连续,一旦存储好,查询效率高;
LinkedList:基于链表的数据结构,地址任意,增删操作效率高。
②、缺点:
ArrayList:地址连续,增删需要移动数据效率低;
LinkedList:地址任意,要移动指针,查询效率低。
③、适用场景:
ArrayList:适用于对数据多次查询和访问时;
LinkedList:适用于对数据需要多次增删操作时。
3、ArrayList与Vector:
①、底层都是数组,多线程安全问题不同:
ArrayList:线程不同步,效率高;
Vector:线程同步,多线程访问不会产生不确定结果,执行效率低。
②、使用场景:
需要线程安全时使用Vector;
如果不考虑线程安全因素时使用ArrayList。
4、HashSet与TreeSet:
①、底层实现:
HashSet:哈希表实现,数据无序,可以放null但只能存放一个,值不重复;
TreeSet:二叉树实现,数据自动排序,不允许有null值。
②、使用场景:
HashSet基于哈希算法实现,其性能优于TreeSet;
一般不需要排序时都用HashSet;
如果需要排序就要选择TreeSet。
5、HashMap、TreeMap与Hashtable:
①、线程安全问题:
HashMap、TreeMap线程不安全;
Hashtable线程安全。
②、使用场景:
HashMap适用于增删元素和定位元素;
TreeMap适用于按自然顺序遍历键(key)。
十、Struts2
1、struts2的工作流程:
①、客户端初始化一个指向servlet容器的请求;
②、这个请求经过一系列过滤(Filter);
③、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
④、如果ActionMapper决定需要调用某个Action,FilterDispatcher就把请求的处理交给ActionProxy;
⑤、ActionProxy通过Configuration Manager(配置管理器)询问框架的配置文件,找到需要调用的Action类;
⑥、ActionProxy创建一个ActionInvocation(Action的调用者,在Action的执行过程中,负责Interceptor、Action、Result等一系列元素的调用)的实例;
⑦、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(intercepter)的调用;
⑧、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(也不完全是,也可能是一个Action链)一个需要被展示的jsp页面。
2、struts2的优点:
①、struts2的应用可以不依赖与Servlet API和Struts API,struts2属于无侵入式设计,而struts1属于侵入式设计;
②、struts2提供了拦截器,利用拦截器可以进行AOP(面向切面编程)编程,实现如权限拦截等功能;
③、struts2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型;
④、struts2提供多种表现层技术;
⑤、struts2的输入校验可以对指定方法进行校验。
⑥、struts2框架更加简单的将jsp页面与Action进行融合;
⑦、struts2框架集成了很多MVC的常用功能,如:校验、国际化、拦截器等;
⑧、Action的代码充分与底层的Servlet解耦,不需要引入Servlet的相关对象。
十一、Hibernate
1、Hibernate简介:
Hibernate是一个完全基于Java面向对象的ORM持久层框架,Hibernate完全对Java对象进行操作,使用Hibernate框架提供的API来进行数据库的操作,完全的ORM映射,能够把数据库中的表和java类中的所有信息进行映射。
2、Hibernate的优点:
①、完全面向对象,对数据库的操作大部分都是通过对Java类对象的操作来实现的,看不到SQL,看不到底层的JDBC;
②、ORM(对象关系映射)映射,实现了数据库与Java类之间的映射,更大的支持面向对象,让程序对对象的操作映射到了数据库的层面;
③、支持跨数据库平台,方便数据库的迁移;
④、关系映射能够满足很多业务场景(一对一、一对多、多对多等);
⑤、支持一些高级功能,包括一级缓存、二级缓存、延迟加载等。
3、Hibernate的缺点:
①、数据量大时会影响Hibernate的性能,做数据量大的项目比较吃力;
②、SQL相关的程序不可控,无法直接的对SQL进行优化,都需要通过Hibernate来生成SQL。
4、Hibernate的主键生成策略:
①、Increment(Hibernate生成):
说明由Hibernate来生成主键,Hibernate会在插入数据之前下一条SQL语句(select max(主键列名) from 表名)来查询表中的最大主键,将其加1作为要插入数据的主键,并且set给对象。
②、Identity(数据库生成):
主键由数据库生成,如果数据库没有生成就会报错,一般情况会将主键设为自增。
③、UUID(Hibernate生成):
由Hibernate生成一个128-bit的字符串作为标识,保证每次生成都是唯一的。
④、Assigned(程序员编写):
程序员在save之前对对象的id进行赋值。
5、Hibernate的工作流程:
①、读取并解析配置文件;
②、读取并解析映射文件,创建SessionFactory;
③、打开Session;
④、创建事务Transation;
⑤、持久化操作;
⑥、提交事务;
⑦、关闭Session;
⑧、关闭SessionFactory。
6、Hibernate中Bean的三种状态:
①、瞬时态:new出来或者被实例化时,在Java的内存中,但还没有与Hibernate进行对象的关联,没有进入Session缓存,此时的对象必须经过Session的方法才能进入缓存变成持久状态;
②、持久态:通过Hibernate从数据库里取出来的数据都是持久态,对象发生变化之后,直接提交事务就能同步到数据库,进而变成游离态;
③、游离态:Hibernate将事务提交,对象通过持久态变成游离态,完成与数据库的同步。
十二、Spring
1、Spring简介:
Spring是轻量级的JavaEE框架,集成了Java企业级开发当中大部分的功能与组件,同时可以集成很多第三方框架。
2、Spring概要:
①、控制反转(IOC):
传统方式对象的实例化由程序来控制,IOC指的就是将控制权反转,不由程序来控制实例化对象,而由IOC容器来做,就是由IOC容器来统一管理对象的实例化。
②、依赖注入(DI):
DI是将依赖关系放入IOC容器中,由容器来管理依赖,我们通过容器只需要拿到实例即可。
③、解耦:
在代码中可以充分的降低类与类之间的耦合度,这种耦合的关系交给容器来处理。
④、面向切面编程(AOP):
把相同的功能抽取出来共同处理。