参考: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基础相关推荐

  1. element ui 图片控件 排序_JAVA全栈面试前端基础之四 Vue+Element框架快速开发

    本文主要包括以下4个内容 什么是ElementUI Vue 中引入ElementUI Vue+elementUI构建后台管理系统 开源项目推荐 1.什么是ElementUI 官网:https://el ...

  2. 百一测评java基础答案_百一测评——《Web应用开发》选择题(含参考答案)—JavaEE基础...

    <百一测评--<Web应用开发>选择题(含参考答案)-JavaEE基础>由会员分享,可在线阅读,更多相关<百一测评--<Web应用开发>选择题(含参考答案)- ...

  3. java 基础面试 英文_[Java面试] 面试java基础总结大全

    原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...

  4. 07夯实基础之JavaEE基础

    文章目录 JavaEE基础 一.Tomcat 1.1 Tomcat简介 1.2 Tomcat下载 1.3 Tomcat安装及环境变量配置 1.4 Tomcat 的⽬录说明 1.4.1 bin 1.4. ...

  5. 3. 什么是JSR参考实现? - JavaEE基础系列

    本文是JavaEE基础系列的第三节. Java EE简介 - JavaEE基础系列 JSR简介 - JavaEE基础系列 上一节中, 我们介绍了什么是JSR.JSR就是一个提交到JCP的抽象请求,包含 ...

  6. 学完javaee基础,编的一个小游戏—太阳系的八大行星

    项目完整代码已放到码云上 自行下载: https://gitee.com/tutu_57893_7590/planets 学完javaee基础,编的一个小游戏-太阳系的八大行星 要使太阳系的八大行星, ...

  7. 银行前端面试高频基础问题——var、let和const到底有哪些区别?讲不清楚当场发感谢信!?

    银行前端面试高频基础问题--var.let和const到底有哪些区别?讲不清楚当场发感谢信!? 面试官:知道const.let和var吧,说说他们的区别吧 我:- - 前言 可以说这是银行我们面试遇到 ...

  8. 北京黑马面授java基础_北京顺义黑马JavaEE基础100期(20190324面授)——开班贴

    追梦赤子心 北京顺义黑马JavaEE基础100期(20190324面授) 梦想,是对未来的一种期望:梦想,是助人成功的基石:梦想是催人奋进的动力:梦想是勇往直前的源泉. 而我有幸,在黑马碰到一批又一批 ...

  9. 2.JSR简介 - JavaEE基础系列

    JSR, Java Specification Request, Java规范请求; 也有的地方翻译为Java规范提案. 在前面的文章 1. Java EE简介 - JavaEE基础系列中, 简要介绍 ...

  10. java/javaee基础面试问题

    1.面向对象和面向过程的区别对比: 面向对象易维护.易扩展.易复用,由于面向对象继承.封装.多态的特性,可以设计低耦合的系统易于维护,但因为类的实例化开销较大,所以面向过程性能更高,一般性能是最主要的 ...

最新文章

  1. 混合和可扩展的纠错算法,用于长读的插入缺失和替换错误
  2. 工业4.0的十大关键词
  3. 地图上制作线路的动画_魔兽争霸重制版不只是表面上这么简单,新版编辑器制作地图更容易...
  4. javascript --- DOM0级、DOM2级、跨浏览器 的事件处理程序
  5. javascript --- js中prototype、__proto__、[[Propto]]、constructor的关系
  6. 《Oracle高性能自动化运维》一一3.3 Redo产生场景
  7. c语言中listnode是什么意思,怎么理解typedef Node * List
  8. docker-3-常用命令(下)
  9. 安装logstash7.3.2遇到的坑及解决方案
  10. angularjs 实例_AngularJS过滤器示例教程
  11. php MySQL使用rand函数随机取记录(转)
  12. MongoDB 备份与恢复
  13. python 编码例子汇总
  14. 第十一届“认证杯”数学中国数学建模国际赛(小美赛) (2022 CERTIFICATE AUTHORITY CUP INTERNATIONAL MATHEMATICAL CONTEST IN MOD
  15. 微信公众号查询粉丝列表
  16. 技术人生:恶补基础知识
  17. html如何做幻灯片效果,超酷的CSS3幻灯片效果
  18. linux 机房安全管理,提示尊敬的用户您好:您访问的网站被机房安全管理系统拦截怎么办?...
  19. excel提取文字、字母、符号
  20. 段码式显示屏和背光电路怎么设计?

热门文章

  1. 再也不用担心动态规划,BAT大佬精讲42道题目,相见恨晚
  2. 如何在 Mac 上使用“隔空投送”?
  3. 如何帮卡住的 iPhone 强制还原? Tenorshare ReiBoot 只需四步实现 iPhone 重装
  4. 如何在 Mac 上安装新字体?
  5. ScreenFlow for mac 录制视频的工具
  6. SVN客户端smartsvn详细功能
  7. 如何使用Xilisoft Video Editor将多个视频文件合并到一个文件中?
  8. mysql 查询优化 ~ 分区表查询的探索
  9. 针对云原生转型的6个关键数据策略
  10. ASP.NET:返回按钮的解决方案摸索