51 说一说 Servlet 的生命周期?
Servlet 有良好的生存期的定义, 包括加载和实例化初始化处理请求以及服务结束这个生存期由 javax.servlet.Servlet 接口的 init(),service()和 destroy 方法表达
Servlet 被服务器实例化后, 容器运行其 init 方法, 请求到达时运行其 service 方法, service 方法自动派遣运行与请求对应的 doXXX 方法 (doGet,doPost) 等, 当服务器决定将实例销毁的时候调用其 destroy 方法
web 容器加载 servlet, 生命周期开始通过调用 servlet 的 init()方法进行 servlet 的初始化通过调用 service()方法实现, 根据请求的不同调用不同的 do***()方法结束服务, web 容器调用 servlet 的 destroy()方法
52Servlet API 中 forward()与 redirect()的区别?
1. 从地址栏显示来说
forward 是服务器请求资源, 服务器直接访问目标地址的 URL, 把那个 URL 的响应内容读取过来, 然后把这些内容再发给浏览器. 浏览器根本不知道服务器发送的内容从哪里来的, 所以它的地址栏还是原来的地址.
redirect 是服务端根据逻辑, 发送一个状态码, 告诉浏览器重新去请求那个地址. 所以地址栏显示的是新的 URL. 所以 redirect 等于客户端向服务器端发出两次 request, 同时也接受两次 response
2. 从数据共享来说
forward: 转发页面和转发到的页面可以共享 request 里面的数据.
redirect: 不能共享数据.
redirect 不仅可以重定向到当前应用程序的其他资源, 还可以重定向到同一个站点上的其他应用程序中的资源, 甚至是使用绝对 URL 重定向到其他站点的资源.
forward 方法只能在同一个 Web 应用程序内的资源之间转发请求. forward 是服务器内部的一种操作.
redirect 是服务器通知客户端, 让客户端重新发起请求.
所以, 你可以说 redirect 是一种间接的请求, 但是你不能说 "一个请求是属于 forward 还是 redirect"
3. 从运用地方来说
forward: 一般用于用户登陆的时候, 根据角色转发到相应的模块.
redirect: 一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4. 从效率来说
forward: 高.
redirect: 低.
53request.getAttribute()和 request.getParameter()有何区别?
1,request.getParameter()取得是通过容器的实现来取得通过类似 post,get 等方式传入的数据
request.setAttribute()和 getAttribute()只是在 web 容器内部流转, 仅仅是请求处理阶段
2,getAttribute 是返回对象, getParameter 返回字符串
3,getAttribute()一向是和 setAttribute()一起使用的, 只有先用 setAttribute()设置之后, 才能够通过 getAttribute()来获得值, 它们传递的是 Object 类型的数据而且必须在同一个 request 对象中使用才有效, 而 getParameter()是接收表单的 get 或者 post 提交过来的参数
54,jsp 静态包含和动态包含的区别
1<%@include file="xxx.jsp"%>为 jsp 中的编译指令, 其文件的包含是发生在 jsp 向 servlet 转换的时期, 而 < jsp:include page="xxx.jsp">是 jsp 中的动作指令, 其文件的包含是发生在编译时期, 也就是将 java 文件编译为 class 文件的时期
2 使用静态包含只会产生一个 class 文件, 而使用动态包含会产生多个 class 文件
3 使用静态包含, 包含页面和被包含页面的 request 对象为同一对象, 因为静态包含只是将被包含的页面的内容复制到包含的页面中去; 而动态包含包含页面和被包含页面不是同一个页面, 被包含的页面的 request 对象可以取到的参数范围要相对大些, 不仅可以取到传递到包含页面的参数, 同样也能取得在包含页面向下传递的参数
55,MVC 的各个部分都有那些技术来实现? 如何实现?
MVC 是 Model-View-Controller 的简写 Model 代表的是应用的业务逻辑(通过 JavaBean,EJB 组件实现),View 是应用的表示面(由 JSP 页面产生),Controller 是提供应用的处理过程控制(一般是一个 Servlet), 通过这种设计模型把应用逻辑, 处理过程和显示逻辑分成不同的组件实现这些组件可以进行交互和重用
56,jsp 有哪些内置对象? 作用分别是什么?
JSP 共有以下 9 个内置的对象:
1,request 用户端请求, 此请求会包含来自 GET/POST 请求的参数
2,response 网页传回用户端的回应
3,pageContext 网页的属性是在这里管理
4,session 与请求有关的会话期
5,application servlet 正在执行的内容
6,out 用来传送回应的输出
7,config servlet 的构架部件
8,page JSP 网页本身
9,exception 针对错误网页, 未捕捉的例外
57,Http 中, get 和 post 方法的区别
1,Get 是向服务器发索取数据的一种请求, 而 Post 是向服务器提交数据的一种请求
2,Get 是获取信息, 而不是修改信息, 类似数据库查询功能一样, 数据不会被修改
3,Get 请求的参数会跟在 url 后进行传递, 请求的数据会附在 URL 之后, 以? 分割 URL 和传输数据, 参数之间以 & 相连,%XX 中的 XX 为该符号以 16 进制表示的 ASCII, 如果数据是英文字母 / 数字, 原样发送, 如果是空格, 转换为 +, 如果是中文 / 其他字符, 则直接把字符串用 BASE64 加密
4,Get 传输的数据有大小限制, 因为 GET 是通过 URL 提交数据, 那么 GET 可提交的数据量就跟 URL 的长度有直接关系了, 不同的浏览器对 URL 的长度的限制是不同的
5,GET 请求的数据会被浏览器缓存起来, 用户名和密码将明文出现在 URL 上, 其他人可以查到历史浏览记录, 数据不太安全
在服务器端, 用 Request.QueryString 来获取 Get 方式提交来的数据
Post 请求则作为 http 消息的实际内容发送给 web 服务器, 数据放置在 html Header 内提交, Post 没有限制提交的数据 Post 比 Get 安全, 当数据是中文或者不敏感的数据, 则用 get, 因为使用 get, 参数会显示在地址, 对于敏感数据和不是中文字符的数据, 则用 post
6,POST 表示可能修改变服务器上的资源的请求, 在服务器端, 用 Post 方式提交的数据只能用 Request.Form 来获取
(仅供参考, 如果有更好的回答, 欢迎探讨)
58, 什么是 cookie?Session 和 cookie 有什么区别?
Cookie 是会话技术, 将用户的信息保存到浏览器的对象.
区别:
(1)cookie 数据存放在客户的浏览器上, session 数据放在服务器上
(2)cookie 不是很安全, 别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗, 如果主要考虑到安全应当使用 session
(3)session 会在一定时间内保存在服务器上当访问增多, 会比较占用你服务器的性能, 如果主要考虑到减轻服务器性能方面, 应当使用 COOKIE
(4)单个 cookie 在客户端的限制是 3K, 就是说一个站点在客户端存放的 COOKIE 不能 3K
结论:
将登陆信息等重要信息存放为 SESSION; 其他信息如果需要保留, 可以放在 COOKIE 中
59,jsp 和 servlet 的区别共同点各自应用的范围?
JSP 是 Servlet 技术的扩展, 本质上就是 Servlet 的简易方式 JSP 编译后是类 servlet
Servlet 和 JSP 最主要的不同点在于: Servlet 的应用逻辑是在 Java 文件中, 并且完全从表示层中的 HTML 里分离开来而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为. jsp 的文件
JSP 侧重于视图, Servlet 主要用于控制逻辑在 struts 框架中, JSP 位于 MVC 设计模式的视图层, 而 Servlet 位于控制层.
60,tomcat 容器是如何创建 servlet 类实例? 用到了什么原理?
当容器启动时, 会读取在 webapps 目录下所有的 web 应用中的 web.xml 文件, 然后对 xml 文件进行解析, 并读取 servlet 注册信息然后, 将每个应用中注册的 servlet 类都进行加载, 并通过反射的方式实例化(有时候也是在第一次请求时实例化)
在 servlet 注册时加上 < load-on-startup>1</load-on-startup > 如果为正数, 则在一开始就实例化, 如果不写或为负数, 则第一次请求实例化
Java 知音公众号整理一些各大公司常用的面试笔试题, 供大家在每天闲暇之余学习其中几道题目, 日积月累, 等到出去面试时, 一切都水到渠成, 面试时就自然会游刃有余了
这里是一些中高级的:
Java 中高级面试题部分答案解析(1)
Java 中高级面试题部分答案解析(2)
Java 中高级面试题部分答案解析(3)
Java 中高级面试题部分答案解析(4)
来源: http://blog.csdn.net/weixin_38405253/article/details/79616016