Java面试集锦(一)之Java web

  • 作者: 凯哥Java
  • 面试宝典
  • 时间:2020-08-05 08:49
  • 140人已阅读
简介 Javaweb1.AjaxAJAX=AsynchronousJavaScriptandXML(异步JavaScript和XML)。Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用Javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。XmlHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是

Java web

1.Ajax

AJAX = Asynchronous JavaScript and XML(异步 JavaScript 和 XML)。

Ajax 的原理简单来说通过 XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后用 Javascript 来操作 DOM 而更新页面。这其中最关键的一步就是从服务器获得请求数据。

XmlHttpRequest 是 ajax 的核心机制,它是在 IE5 中首先引入的,是一种支持异步请求的技术。简单的说,也就是 Javascript 可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果

40e11c32896a0342419df8719aee8053.png


2.JQuery

JQuery 是一个 JavaScript 库。功能包括 HTML 元素选取和操作、CSS 操作、HTML 事件函数、 JavaScript 特效和动画、HTML DOM 遍历和修改、AJAX 和 Utilities。除此之外,JQuery 还提供了大量插件。

基础语法: $(selector).action()。

选择器:主要分四大选择器,分别是基本选择器、层次选择器、过滤选择器、属性过滤选择器。

事件:例如 click()、dblclick()、mouseenter()、mouseleave()、mousedown()等。

3.Cookie

在 web 程序中是使用 HTTP 协议来传输数据的,因为 http 是无状态协议,一旦数据交换完毕,客户端和服务器端的连接就会关闭,再次交换数据需要建立新的连接,所以无法实现会话跟踪,cookie 技术则弥补了这一缺陷。

cookie 实际上一段的文本信息,客户端请求服务器。如果服务器需要记录该用户的状态,就使用 response 向客户端浏览器颁发一个 cookie。客户端浏览器会把 cookie 保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该 cookie 一同提交给服务器。服务器检查该 cookie,以此来辨认用户的状态。服务器还可以根据需要修改 cookie 的内容。

cookie 生命周期:

cookie 的 maxAge 决定 cookie 的生命周期,单位为秒(second)。cookie 通过 getMaxAge() 方法和 setMaxAge()方法来获得 maxAge 属性,如果 maxAhe 属性为正,则表示 cookie 会在 maxAge 秒之后自动失效。如果 maxAge 属性为负,则说明 cookie 仅在本浏览器窗口和本窗口打开的子窗口下有效,关闭窗口 cookie 则失效。maxAge 的默认值是-1 当 maxAge 的值为 0 时,表示删除 cookie。

4.Session

session 也是一种记录客户状态的机制,不同的是 cookie 保存在客户端浏览器中,而 session 保存在服务器上。客户端浏览器访问服务器是时候把客户端信息以某种形式记录在服务器上,这就是 session 中查找该客户的状态。

session 生命周期:

session 保存在服务器端,为了获得更高的存取速度,服务器一般把 session 放在内存。每个用户都会有一个独立的 session,如果 session 内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。

session 在用户第一次访问服务器的时候自动创建,需要注意只有访问 JSP,Servlet 等程序时才会创建 session;只要访问 HTML、IMAGE 等静态资源不会创建 session。如果尚未生成session,可以使用 request.getSession(true)强制生成 session。

在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session

session 生成后,只要用户访问,服务器就会更新 session 的最后访问时间,并维护该 session。用户每访问服务器一次,无论是否续写 session 服务器都认为该用户的 session 活跃(active)了一次。

Session 对应的类是 javax.servlet.http.HttpSession,每一个访问者都对应一个 session 对象,并将其状态信息保存在这个 session 对象中,session 对象的创建是在用户第一次访问服务器时产生的。

但是服务端的session的实现对客户端的cookie有依赖关系的,上面我讲到服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie,因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用

5.转发(forward)和重定向(redirect)的区别?

转发是服务器行为,重定向是客户端行为。

forward(转发) 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect(重定向) 就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显 redirect 无法访问到服务器保护起来资源,但是可以从一个网站 redirect 到其他网站。

  1. 从地址栏显示来说: forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

  2. 从数据共享来说: forward:转发页面和转发到的页面可以共享request里面的数据. redirect:不能共享数据.

  3. 从运用地方来说: forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

  4. 从效率来说: forward:高. redirect:低.

6.怎么防止表单重复提交?

i.禁掉提交按钮。表单提交后使用 Javascript 使提交按钮 disable。

ii.Post/Redirect/Get 模式。在提交后执行页面重定向,这就是所谓的 Post-Redirect-Get (PRG) 模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

iii.在 session 中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在 session 中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从 session 中删除它,然后正常处理数据。

7.web.xml 文件中可以配置哪些内容?

web.xml 用于配置 Web 应用的相关信息,如:监听器(listener)、过滤器(filter)、 Servlet、相关参数、会话超时时间、安全验证方式、错误页面等

8. servlet声明周期?

Initialization 初始化

Service 服务

Distory 销毁

1.init()。当Servlet第一次被装载时,Servlet引擎调用这个Servlet的init()方法,只调用一次。如果某个Sevlet需要特殊的初始化需要。那么Servlet编写人员可以重写该方法来执行初始化任务。如果某个Servlet不需要初始化,那么默认情况下将调用它父类的init方法。系统保证,在init方法成功完成以前,是不会调用Servlet去处理任何请求的。

2.service()。这是Servlet最重要的方法,是真正处理请求的地方。对于每个请求,Servlet引擎将调用Servlet的service方法,并把Servlet请求对象和Servlet响应对象最为参数传递给它。

3.destroy()。这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源

9.Jsp类置对象(Web开发中的四个域对象)

范围小到大:
page(jsp有效) page域指的是pageContext.
request(一次请求) request域指的是request HttpServletRequest
session(一次会话) session 域指的是 session HTTPSession
application(当前web应用) application 域指的是 application ServletContext

4个对象的生命周期(生命周期就是值对象的创建到销毁的期间):
page:jsp页面被执行,生命周期开始,jsp页面执行完毕,声明周期结束。
request:用户发送一个请求,开始,服务器返回响应,请求结束,生命周期结束。
session:用户打开浏览器访问,创建session(开始),session超时或被声明失效,该对象生命周期结束。
application:web应用加载的时候创建。Web应用被移除或服务器关闭,对象销毁。【结束】
appliction: ServletContext
session: HttpSession
request: HttpServletRequest
response:HttpServletResponse
pageContext: PageContext
out: JspWriter
config: ServletConfig
page: this

10.doGet 和doPost区别

get方式将参数放在url后面,在请求行, post方式将参数放在请求的正文部分。
get方式参数显示在地址栏,不安全, post参数地址栏不可见,相对安全。
地址栏的参数长度有限制,post无限制
如果未重写service()方法,则执行父类的service()方法,起调度作用,如果是get请求就调动doGet()如果是post请求就调用doPost()
如果重写了service()方法,即使重写了doGet()或doPost()也只会调用service()方法

3.提交数据的安全
POST比GET方式的安全性要高
通过GET提交数据,用户名和密码将明文出现在URL上,因为一下几个原因get方式安全性会比post弱:
(1)登录页面有可能被浏览器缓存
(2)其他人查看浏览器的历史纪录,那么别人就可 以拿到你的账号和密码了
(3)当遇上跨站的攻击时,安全性的表现更差了

11.HTTP协议下请求和响应的格式

请求格式:请求行 请求头 请求正文部分
响应格式:响应状态行 响应头 响应内容

12. request.getAttribute() 和 request.getParameter() 有何区别?

request.getAttribute()是获取属性值
request.getParameter()是获得请求中值

13.Servlet和Filter的区别:

整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

Filter有如下几个用处:
Filter可以进行对特定的url请求和相应做预处理和后处理。
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
实际上Filter和Servlet极其相似,区别只是Filter不能直接对用户生成响应。实际上Filter里doFilter()方法里的代码就是从多个Servlet的service()方法里抽取的通用代码,通过使用Filter可以实现更好的复用。

14. Filter和Servlet的生命周期

1.Filter在web服务器启动时初始化
2.如果某个Servlet配置了 1 ,该Servlet也是在Tomcat(Servlet容器)启动时初始化。
3.如果Servlet没有配置1 ,该Servlet不会在Tomcat启动时初始化,而是在请求到来时初始化。
4.每次请求, Request都会被初始化,响应请求后,请求被销毁。
5.Servlet初始化后,将不会随着请求的结束而注销。
6.关闭Tomcat时,Servlet、Filter依次被注销。

15. Jsp与Servlet区别

1.JSP的本质就是Servlet,JSP页面在执行的时候都会被服务器端的JSP引擎转换为Servelet(.java),然后又由JSP引擎调用Java编译器,将Servelet(.java)编译为Class文件(.class),并由Java虚拟机(JVM)解释执行。
2.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。
3.Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容,JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容。
4.JSP侧重于界面表现,Servlet主要用于控制逻辑

16.Servlet的调用过程

1.浏览器输入访问路径后,携带了请求行,头,体
2.根据访问路径找到已注册的servlet名称
3.根据映射找到对应的servlet名
4.根据根据servlet名找到我们全限定类名,既我们自己写的类
5.服务器找到全限定类名后,通过反射创建对象,同时也创建了servletConfig,里面存放了一些初始化信息(注意服务器只会创建一次servlet对象,所以servletConfig也只有一个)

18. HTTP与HTTPS有什么区别?

 HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。


Top Top