【面试】JavaEE基础
参考:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/J2EE基础知识.md
1、Servlet
参考:https://www.cnblogs.com/Rain1203/p/10919557.html
2、get和post请求的区别?
1)get请求用来从服务器上获取资源,post是用来向服务器提交数据的;
2)get将表单中数据按照name=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向的URL;
3)get传输的数据要受到URL长度的限制(最大2048个字符),而post可以传输大量的数据,上传文件通常使用post方式;
4)使用get请求参数会显示在地址栏上,非敏感数据可以使用get方式,敏感数据应该使用post;
5)get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是“%20”。
补充:get方式表单的典型应用是搜索引擎,get方式就是被设计为查询用的。
3、转发(Forward)和重定向(Redirect)的区别?
转发是服务器的行为,重定向是客户端的行为。
转发(Forward)通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。
RequestDispatcher可以通过HttpServletRequest的getRequestDispatcher()方法获得。
request.getRequestDispatcher("login_success.jsp").forward(request,response);
重定向(Redirect)是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletResponse 的 setStatus(int status)方法设置状态码,如果服务器返回301或者302,则浏览器会跳转到新的网址重新获取资源。
1)从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标URL把资源读取过来,返回给浏览器,浏览器并不知道服务器发送的资源从何而来,所以地址栏是不变的;
redirect是服务器根据逻辑,发送一个状态码,告诉浏览器去请求那个地址,所以地址栏显示的是新的URL;
2)从数据共享来说
forward转发页面和转发到的页面可以共享request里面的数据;
redirect不能共享数据;
3)从运用地方来说
forward一般用于用户登录的时候,根据角色转发到相应模块;
redirect一般用于用户注销登录时返回主页或跳转到其他网站等;
4)从效率来说
forward高;redirect低。
4、Servlet与线程安全?
Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。解决的办法是尽量不要定义name属性,而是要把name变量分别定义在doGet()和doPost()方法内。虽然是以synchronized(name){} 语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。注意,多线程的并发读写Servlet类属性会导致数据不同步。但是如果只是并发的读取属性而不写入,则不存在数据不同步的问题。因此,Servlet里的只读属性最好定义为final。
5、JSP中的四种作用域?
1)page代表与一个页面相关的对象和属性;
2)request代表与web客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件;需要在页面显示的临时数据可以置于此作用域;
3)session代表某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中;
4)application代表与整个web应用程序相关的对象和属性,它实质上是跨越整个web应用程序,包括多个页面,请求和会话的一个全局作用域。
6、如何实现JSP或Servlet的单线程模式?
对于JSP页面,可以通过page指令进行设置。<%@page isThreadSafe="false'%>;
对于Servlet,可以让自定义的Servlet实现SingleThreadModel 标识接口;
说明:如果将JSP或Servlet设置成单线程工作模式,会导致每个请求创建一个Servlet实例,这种将导致严重的性能问题(服务器的内存压力很大,还会导致频繁的垃圾回收),所以通常情况下我们不会这么做。
7、实时会话跟踪的技术有哪些?
1)使用Cookie
向客户端发送Cookie
Cookie c =new Cookie("name","value"); //创建Cookie
c.setMaxAge(60*60*24); //设置最大时效,此处设置的最大时效为一天
response.addCookie(c); //把Cookie放入到HTTP响应中
从客户端读取Cookie
String name ="name";
Cookie[]cookies =request.getCookies();
if(cookies !=null){ for(int i= 0;i<cookies.length;i++){ Cookie cookie =cookies[i]; if(name.equals(cookis.getName())) //something is here. //you can get the value cookie.getValue(); }}
优点:数据可以持久保存,不需要服务器资源,简单,基于文本的key-Value;
缺点:大小受到限制,用户可以禁用Cookie功能,有一定的安全风险。
2)URL重写
在URL中添加用户会话的信息作为请求参数,或者将唯一的会话ID添加到URL结尾以标识成一个会话;
优点:在Cookie被禁用时仍然可以使用;
缺点:必须对网站的URL进行编码,所有页面必须动态生成,不能用预先记录下来的URL进行访问;
3)隐藏的表单域
<input type="hidden" name ="session" value="..."/>
优点:Cookie被禁用时可以使用;
缺点:所有页面必须是表单提交之后的结果。
4)HttpSession
在所有会话跟踪技术中,HttpSession对象是最强大也是功能最多的。当一个用户第一次访问某个网站时会自动创建HttpSession,每个用户可以访问它自己的HttpSession。可以通过HttpServletRequest对象的getSession()方法获取HttpSession,通过HttpSession的setAttribute方法可以将一个值放到HttpSession中,通过调用HttpSession对象的getAttribute方法,同时传入属性名就可以获取保存在HttpSession中的对象。
与上面三种方式不同的是,HttpSession放在服务器的内存中,因此不要将过大的对象放在里面,即使目前的Servlet容器可以在内存将满时将HttpSession中的对象移到其他存储设备中,但这势必影响性能。添加到HttpSession中的值可以是任意Java对象,这个对象最好实现了Serializable接口,这样Servlet容器在必要的时候可以将其序列化到文件中,否则在序列化时容易出现异常。
8、Cookie和Session的区别?
Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
Cookie一般用来保护用户信息,比如(1)我们在Cookie保存已经登录过的用户信息,下次访问网站的时候可以帮你把登录的信息给填了;
(2)一般的网站都会有保持登录,也就是说你下次再访问网站就不需要重新登录了,这是因为用户登录的时候我们存放了一个Token在Cookie中,下次登录的时候只需要根据Token值来查找用户即可(为了安全考虑,重新登录一般要将Token重写);
(3)登录一次网站后访问网站其他页面不需要重新登录。
Session的主要作用就是通过服务端记录用户状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为HTTP协议是无状态的。服务端给特定的用户创建特定的Session之后,就可以标识这个用户并且跟踪这个用户了。
Cookie数据保存在客户端(浏览器),Session保存在服务器端;
Session安全性更高,如果使用Cookie的一些敏感信息不要直接写入到Cookie中,最好能将Cookie信息加密,然后使用到的时候再去服务器端解密。
转载于:https://www.cnblogs.com/Rain1203/p/11240000.html
【面试】JavaEE基础相关推荐
- element ui 图片控件 排序_JAVA全栈面试前端基础之四 Vue+Element框架快速开发
本文主要包括以下4个内容 什么是ElementUI Vue 中引入ElementUI Vue+elementUI构建后台管理系统 开源项目推荐 1.什么是ElementUI 官网:https://el ...
- 百一测评java基础答案_百一测评——《Web应用开发》选择题(含参考答案)—JavaEE基础...
<百一测评--<Web应用开发>选择题(含参考答案)-JavaEE基础>由会员分享,可在线阅读,更多相关<百一测评--<Web应用开发>选择题(含参考答案)- ...
- java 基础面试 英文_[Java面试] 面试java基础总结大全
原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...
- 07夯实基础之JavaEE基础
文章目录 JavaEE基础 一.Tomcat 1.1 Tomcat简介 1.2 Tomcat下载 1.3 Tomcat安装及环境变量配置 1.4 Tomcat 的⽬录说明 1.4.1 bin 1.4. ...
- 3. 什么是JSR参考实现? - JavaEE基础系列
本文是JavaEE基础系列的第三节. Java EE简介 - JavaEE基础系列 JSR简介 - JavaEE基础系列 上一节中, 我们介绍了什么是JSR.JSR就是一个提交到JCP的抽象请求,包含 ...
- 学完javaee基础,编的一个小游戏—太阳系的八大行星
项目完整代码已放到码云上 自行下载: https://gitee.com/tutu_57893_7590/planets 学完javaee基础,编的一个小游戏-太阳系的八大行星 要使太阳系的八大行星, ...
- 银行前端面试高频基础问题——var、let和const到底有哪些区别?讲不清楚当场发感谢信!?
银行前端面试高频基础问题--var.let和const到底有哪些区别?讲不清楚当场发感谢信!? 面试官:知道const.let和var吧,说说他们的区别吧 我:- - 前言 可以说这是银行我们面试遇到 ...
- 北京黑马面授java基础_北京顺义黑马JavaEE基础100期(20190324面授)——开班贴
追梦赤子心 北京顺义黑马JavaEE基础100期(20190324面授) 梦想,是对未来的一种期望:梦想,是助人成功的基石:梦想是催人奋进的动力:梦想是勇往直前的源泉. 而我有幸,在黑马碰到一批又一批 ...
- 2.JSR简介 - JavaEE基础系列
JSR, Java Specification Request, Java规范请求; 也有的地方翻译为Java规范提案. 在前面的文章 1. Java EE简介 - JavaEE基础系列中, 简要介绍 ...
- java/javaee基础面试问题
1.面向对象和面向过程的区别对比: 面向对象易维护.易扩展.易复用,由于面向对象继承.封装.多态的特性,可以设计低耦合的系统易于维护,但因为类的实例化开销较大,所以面向过程性能更高,一般性能是最主要的 ...
最新文章
- 混合和可扩展的纠错算法,用于长读的插入缺失和替换错误
- 工业4.0的十大关键词
- 地图上制作线路的动画_魔兽争霸重制版不只是表面上这么简单,新版编辑器制作地图更容易...
- javascript --- DOM0级、DOM2级、跨浏览器 的事件处理程序
- javascript --- js中prototype、__proto__、[[Propto]]、constructor的关系
- 《Oracle高性能自动化运维》一一3.3 Redo产生场景
- c语言中listnode是什么意思,怎么理解typedef Node * List
- docker-3-常用命令(下)
- 安装logstash7.3.2遇到的坑及解决方案
- angularjs 实例_AngularJS过滤器示例教程
- php MySQL使用rand函数随机取记录(转)
- MongoDB 备份与恢复
- python 编码例子汇总
- 第十一届“认证杯”数学中国数学建模国际赛(小美赛) (2022 CERTIFICATE AUTHORITY CUP INTERNATIONAL MATHEMATICAL CONTEST IN MOD
- 微信公众号查询粉丝列表
- 技术人生:恶补基础知识
- html如何做幻灯片效果,超酷的CSS3幻灯片效果
- linux 机房安全管理,提示尊敬的用户您好:您访问的网站被机房安全管理系统拦截怎么办?...
- excel提取文字、字母、符号
- 段码式显示屏和背光电路怎么设计?
热门文章
- 再也不用担心动态规划,BAT大佬精讲42道题目,相见恨晚
- 如何在 Mac 上使用“隔空投送”?
- 如何帮卡住的 iPhone 强制还原? Tenorshare ReiBoot 只需四步实现 iPhone 重装
- 如何在 Mac 上安装新字体?
- ScreenFlow for mac 录制视频的工具
- SVN客户端smartsvn详细功能
- 如何使用Xilisoft Video Editor将多个视频文件合并到一个文件中?
- mysql 查询优化 ~ 分区表查询的探索
- 针对云原生转型的6个关键数据策略
- ASP.NET:返回按钮的解决方案摸索