java面试题--web/ssm/数据库

1.java面试题–web/ssm/数据库

1.1. 描述Servlet调用过程?

答案:
(1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址。
(2)浏览器根据ip地址和端口号访问服务器,组织http请求信息发送给服务器。
(3)服务器收到请求后首先根据Host请求头判断当前访问的是哪台虚拟主机。
(4)服务器根据http请求头中的请求URI判断当前访问的是哪个web应用。
(5)服务器根据http请求头中的请求URI判断当前访问的是web应用中的哪个web资源。
(6)检查web应用的web.xml文件,如果根据路径找到具体的servlet处理类的全路径名交给该servlet处理,如果找不到就交给缺省servlet处理。
(7)这个过程中浏览器只知道自己发出来http请求,不久就收到了http响应,浏览器不知道也不关心服务器内部是如何处理的。浏览器和服务器之间的关系是非常单纯的,只有HTTP协议。
(8)解析请求、封装RequestResponse对象、创建Servlet、调用Service方法都是服务器自动进行的,开发人员只需要写好Servlet配置进容器中即可,无需操心具体的底层实现。

1.2. 简述Servlet生命周期?

答案:
(1)Servlet第一次被访问到时创建对象,创建出来后立即执行init方法执行初始化的操作。
(2)从此以后该对象一直驻留在内存中为后续的对这个Servlet的请求进行服务。
(3)直到服务器关闭或web应用移除出容器时,随着web应用的销毁Servlet对象销毁掉,在销毁之前调用destory方法执行善后工作。
(4)在存活期间,每次对Servlet 的调用都会导致Service方法的执行。

1.3. 什么是http协议?

答案:

HTTP协议就是一套基于tcp/ip协议的应用层协议 。简单来说,就是一个基于应用层的通信规范,双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。它规定了客户端(通常是浏览器)和服务器之间的通信方式。

1.4. HTTP协议工作原理?

答案:

HTTP协议基于请求响应模型。
一次请求对应一次响应。
首先客户端发送一个请求(request)给服务器,服务器在接收到这个请求后将生成一个响应(response)返回给客户端。

1.5. HTTP协议的特点是什么 ?

答案:

(1) 它是一个无状态的协议,服务器端在处理相应请求后不会保留任何客户端的信息,每次请求都是独立的
(2) 客户端与服务器端的每一次数据交互,都要经过一次请求/响应的过程。
(3) 服务器端无法识别能够触发客户端请求的方法。
(4) 一个典型的HTTP请求分为 一个请求行 若干请求头 一个空行 实体内容。

1.6. get和post请求的区别?

答案:

(1) get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
(2) get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?“连接,而各个变量之间使用”&“连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
(3) get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据, POST数据是没有限制的,上传文件通常要使用post方式;
(4) 使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
(5) get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是”%20"。
(6) Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()。

1.7. 请求乱码产生的原因?

答案:

浏览器用什么码表来打开表单页面就用什么编码来发送数据。当前我们的注册页面指定了用utf-8来打开。
这就决定了浏览器是用utf-8打开的页面,浏览器在提交表单时是用utf-8编码的。
而tomcat默认情况下会使用iso8859-1来进行解码。
我们知道全世界的码表都兼容iso8859-1,所以英文处理是没有问题的。
但是iso8859-1中并没有中文,iso8859-1对于无法处理的字节都使用?替代,所以我们看到的都是?。

1.8. 如何来处理get请求产生的乱码?

答案:

由于客户端发送时使用的是utf-8编码而服务器用iso8859-1解码造成了乱码,虽然字符已经乱掉了,但底层的字节仍然是正确的,我们只要将乱码字符getBytes(“iso8859-1”)转换为字节,就是正确的字节,再将这些字节new String(bytes,“utf-8”)按照正确的码表编码,就可以转换回正确的字符了。从而解决了乱码。

1.9. Request生命周期

答案:

request对象的生命周期是针对一个客户端(一个浏览器应用程序)的一次请求,当请求完毕之后,request里边的内容也将被释放,一个请求开始时创建,请求结束后销毁。

1.10. 如何处理响应乱码?

答案:

通过response.setHeader(“Content-Type”, “text/html;charset=utf-8”)方法,通知服务器发送数据时的码表;通过response.setCharacterEncoding(“utf-8”)方法,通知浏览器解析时使用的码表。两码相同就不会有乱码了。
response提供了setContentType(“text/html;charset=UTF-8”)快捷方法,在它的底层,会同时做上面两件事,所以可以一行代码解决response产生的乱码问题。

1.11. 简述ServletContext生命周期?

答案:

ServletContext对象代表当前web应用。当服务器启动时,服务器在启动时会依次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用销毁,ServletContext对象跟着销毁。

1.12. 转发与重定向的比较?

答案:

转发是服务器内部资源跳转,重定向是通过302+Location实现浏览器跳转访问。
转发一次请求一次响应,重定向两次请求两次响应。
转发地址栏不发生变化,重定向地址栏会发生变化。
转发之前和转发之后request是一个,重定向之前和之后不是一个request。

1.13. Session生命周期?

答案:

当程序第一次调用到request.getSession()代码时,服务器明确的知道了需要用到session了,此时创建session。
如果session超过30分钟(可以在web.xml中配置的)没人使用,服务器认为这个session超时了,销毁session。
明确的调用session.invalidate(),session立即销毁。
服务器被非正常关闭或web应用被移除出容器,此时随着web应用的销毁session销毁.如果是正常关闭,session会被钝化.当下次服务器正常启动时,没有超时的session还会被活化回来。

1.14. session的原理?

答案:

session的原理:在服务器第一次调用request.getSession()方法的时候,会在内存中创建一个session对象,此对象具有一个独一无二的id值,此id值将会以cookie(JSESSIONID)的形式发送给浏览器,浏览器以后每次访问都会带着此cookie,服务器就利用此cookie区分浏览器找到对应的session空间。

1.15. cookie与session的区别

答案:

cookie数据存放在客户的浏览器上,session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE

1.16. JSP和Servlet是什么关系ÿ

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗人在流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值