5.31数码视讯1面:
1.如何创建一个可以动态添加任意个属性的表。
利用两张表:第一张表只需要添加一个字段:比如id。第二张表可以拿第一张表中的id作为外键,新增两个字段key和value,这样就可以添加任意多个属性了。
2.SSH框架和SSM框架的区别
主要区别在Hibernate和Mybatis上,Hibernate是一个更加重量级一点,封装更充分的框架。且Hibernate框架是一个完全的orm框架,建立了完整的对象与表的关系映射。操作对象就是操作表结构,数据库无关性更好。而Mybatis框架是一个不完全的orm框架,没有建立完整的对象与表的关系映射,是一个更轻量级的框架,可以使用原生的sql语句进行数据库的增删改查操作。
3.javaweb中乱码问题如何解决
第一类:前台参数传输至服务端后乱码
- get请求参数中文发送到服务器端乱码
- post请求参数中文发送到服务器乱码
第二类:服务端响应到达浏览器后乱码
3.在jsp页面中,中文显示乱码
解决方式,不管哪一端出现问题,统一编码格式即可,一般统一采用UTF-8。
4.java的垃圾回收机制
答得不好。垃圾回收(Garbage Collection GC)的主要作用是回收程序中不再使用的内存。在c/c++中,完全由开发人员来管理内存的分配与释放,如果忘记或错误的释放内存,往往会导致程序不正常甚至崩溃。java中提供垃圾收集器可以自动的检测对象的作用域,可以自动地把不再被使用的存储空间释放掉。具体来说,垃圾收集器主要完成3个任务:分配内存、确保被引用对象的内存不被错误的回收以及回收不再被引用的对象的内存空间。
5.有没有用过过滤器,讲一下过滤器
过滤器,主要用来过滤请求,可以实现某些应用场景,比如自动登录,解决网站乱码等功能。
5.1过滤器介绍
编写filter步骤:
1.编写一个类
a.实现filter接口
b.重写方法
2.编写配置文件
a.注册filter
b.绑定路径
3.测试
★Filter接口的方法:
init(FilterConfig config):初始化操作
doFilter(ServletRequest request, ServletResponse response, FilterChain chain):处理业务逻辑
destroy() :销毁操作
★filter的生命周期(了解)
filter单实例多线程
filter在服务器启动的时候 服务器创建filter 调用init方法 实现初始化操作
请求来的时候,创建一个线程 根据路径调用dofilter 执行业务逻辑
当filter被移除的时候或者服务器正常关闭的时候 调用destory方法 执行销毁操作.
★FilterChain:过滤链
通过chain的dofilter方法,可以将请求放行到下一个过滤器,直到最后一个过滤器放行才可以访问到servlet|jsp
doFilter()放行方法
★url-pattern配置
3种
完全匹配 必须以”/“ 开始 例如: /a/b
目录匹配 必须以”/“ 开始 以”“结束 例如:/a/b/
后缀名匹配 以”.”开始 以字符结束 例如 : .jsp .do .action
例如:
afilter 路径 /*
bFilter 路径 /demo4
★一个资源有可能被多个过滤器匹配成功,多个过滤器的执行顺序是按照web.xml中filter-mapping的顺序执行的
5.2自动登录解决办法
- 登录的功能的基础上实现的自动登录.
- 在登录的页面中勾选自动登录的复选框.点击提交.
- 在提交的Servlet中,在登录成功的地方记住用户名和密码.
- 在下次访问首页的时候带着Cookie过来.
- 编写一个过滤器:
- 获得Cookie的信息.
- 查找指定的名称的Cookie.
- 拿到Cookie以后获得用户名和密码
- 在去数据库进行查询.
- 能查询到,将用户的信息存入到session.放行.
- 不能查询到,跳转其他的页面.
5.3解决字符乱码的问题
需求:
以前我们开发的时候若有参数,第一步都是设置编码,才不会出现乱码,通过过滤器设置,到servlet或者jsp上的时候已经没有乱码问题
技术分析:
filter 配置路径/* 过滤器的第一个位置
在filter中重写getParameter(加强)
步骤分析:
我们只需要在filter中 对request进行加强(例如:只对request.getParameter()进行加强)
方法加强:
1.继承(获取构造器)
2.装饰者模式(静态代理)
3.动态代理
装饰者书写步骤:
1.要求装饰者和被装饰者实现同一个接口或者继承同一个类
2.装饰者中要有被装饰者的引用
3.对需要加强方法进行加强
4.对不需要加强的方法调用原来的方法即可
加强request.getParameter(String key)
首先请求的方式不同,处理的方式也不同
获取请求的方法
若是get请求
new String(value.getBytes(“iso8859-1”),”utf-8”);
若是post请求
只需要设置一句话
request.setCharacterEncoding(“utf-8”);
最后将包装过的request对象(MyRequest)传递给servlet即可