java面试刷题------javaweb

  1. session 和 cookie 有什么区别?
    1, Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
    2, Cookie有大小限制(4K)以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
    3, Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
    4, Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
    5, session中保存的是对象,cookie中保存的是字符串

  2. Cookie工作原理
    Cookie是由服务端生成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie:
    1、创建Cookie (第一次访问)
    ①该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象;
    ②默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(将最大时效设为0则是命令浏览器删除该Cookie);
    ③将Cookie放入到HTTP响应报头,将Cookie插入到一个 Set-Cookie HTTP请求报头中。
    ④发送该HTTP响应报文。
    2、设置存储Cookie
    浏览器收到该响应报文之后,根据报文头里的Set-Cookied特殊的指示,生成相应的Cookie,保存在客户端。该Cookie里面记录着用户当前的信息。
    3、发送Cookie
    当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果某个存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将要请求的资源),则把该cookie附在请求资源的HTTP请求头上发送给服务器。
    4、读取Cookie
    服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的Cookie,从里面找到所需要的东西。

  3. Cookie作用 和缺陷
    Cookie的根本作用就是在客户端存储用户访问网站的一些信息。典型的应用有:
    1、记住密码,下次自动登录。
    2、购物车功能。
    3、记录用户浏览数据,进行商品(广告)推荐。
    缺陷
    ①Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
    ②由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS)
    ③Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。

  4. 说一下 session 的工作原理?
    1、创建Session
    当用户访问到一个服务器,如果服务器启用Session,服务器就要为该用户创建一个SESSION,在创建这个SESSION的时候,服务器首先检查这个用户发来的请求里是否包含了一个SESSION ID,如果包含了一个SESSION ID则说明之前该用户已经登陆过并为此用户创建过SESSION,那服务器就按照这个SESSION ID把这个SESSION在服务器的内存中查找出来(如果查找不到,就有可能为他新创建一个),如果客户端请求里不包含有SESSION ID,则为该客户端创建一个SESSION并生成一个与此SESSION相关的SESSION ID。这个SESSION ID是唯一的、不重复的、不容易找到规律的字符串,这个SESSION ID将被在本次响应中返回到客户端保存,而保存这个SESSION ID的正是COOKIE,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
    2、使用Session
    我们知道在IE中,我们可以在工具的Internet选项中把Cookie禁止,那么会不会出现把客户端的Cookie禁止了,那么SESSIONID就无法再用了呢?找了一些资料说明,可以有其他机制在COOKIE被禁止时仍然能够把Session id传递回服务器。
    经常被使用的一种技术叫做URL重写,就是把Session id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形式为:
    http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
    另一种是作为查询字符串附加在URL后面,表现形式为:
    http://……/xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
    还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器。

  5. Session作用
    1、判断用户是否登录。
    2、购物车功能。

  6. get和post请求的区别?
    ①get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
    ②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?“连接,而各个变量之间使用”&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
    ③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式;
    ④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;

  7. .说一下 JSONP 实现原理?
    动态添加一个<script>标签 而script标签的src属性是没有跨域的限制的.(这种跨域方式与ajax XmlHttpRequest协议无关).
    JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名,协议,端口) ,如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在响应中返回也要执行的script代码,其中可以直接使用javascript对象.

  8. http 响应码
    200(OK):请求成功。一般用于GET与POST请求
    201(Created):已创建。成功请求并创建了新的资源
    3XX——重定向类(Redirection),表示没有请求成功,必须采取进一步的动作
    301(Moved Permanently):资源被永久移动。
    302(Found):资源临时移动。资源只是临时被移动,客户端应继续使用原有URI
    304:用其他策略获取资源
    4XX——客户端错误(Client Error),表示客户端提交的请求包含语法错误或不能正确执行
    400(Bad Requests):客户端请求的地址不存在或者包含不支持的参数
    401(Unauthorized):未授权,或认证失败。对于需要登录的网页,服务器可能返回此响应
    403(Forbidden):没权限。服务器收到请求,但拒绝提供服务
    404(Not Found):请求的资源不存在。遇到404首先检查请求url是否正确
    5XX——服务端错误(Server Error),表示服务器不能正确执行一个正确的请求
    500(Internal Server Error):服务器内部错误,无法完成请求
    503(Service Unavailable):由于超载或系统维护(一般是访问人数过多),服务器无法处理客户端的请求 ,通常这只是暂时状态

  9. forward 和 redirect 的区别?
    forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
    redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址

  10. Ajax你以前用过么?简单介绍一下
    Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。
    ajax的优点:
    1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。
      2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。
      3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。
    4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。
    缺点:
    1:破坏浏览器后退按钮正常行为
    2:对搜索引擎不是多好

  11. 过滤器(Filter)和拦截器(interceptor)的区别
     ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
     ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
     ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
     ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
     ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
    ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
    ⑦过滤器和拦截器触发时机不一样:过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。

  12. HTTP请求/响应报文结构
    HTTP请求报文:4个部分(请求行,请求头,空行 请求体)
    请求行:请求方法字段(GET/POST)、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。
    请求头部: HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(GET/POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说 Content-Length必须出现。
    空行: 它的作用是通过一个空行,告诉服务器请求头部到此为止。
    请求体: 若方法字段是GET,则此项为空,没有数据 若方法字段是POST,则通常来说此处放置的就是要提交的数据
    HTTP响应报文 3部分 响应行、响应头、响应体
    响应行: 响应行一般由协议版本、状态码及其描述组成
    响应头: 用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
    响应体: 响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

  13. JSP有哪些内置对象?作用分别是什么?
    JSP有9个内置对象:
    request:封装客户端的请求,其中包含来自GET或POST请求的参数;
    response:封装服务器对客户端的响应;
    pageContext:通过该对象可以获取其他对象;
    session:封装用户会话的对象;
    application:封装服务器运行环境的对象;
    out:输出服务器响应的输出流对象;
    config:Web应用的配置对象;
    page:JSP页面本身(相当于Java程序中的this);
    exception:封装页面抛出异常的对象。

  14. 说一下 jsp 的 4 种作用域?
    JSP中的四种作用域包括page、request、session和application,具体来说:
    page代表与一个页面相关的对象和属性。
    request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。
    session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
    application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。

  15. jsp 和 servlet 有什么区别?
    servlet是java提供的一个用于开发web服务器的应用程序的一个组件,运行在服务端,由servlet容器管理,用于生成动态内容.。Servlet是平台独立的Java类
    JSP在本质上就是SERVLET,但是两者的创建方式不一样.
    JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.

  16. 如果客户端禁止 cookie 能实现 session 还能用吗?
    可以,可以使用url重写机制实现sessionId的跟踪

  17. Servlet的生命周期。
    1 .加载和实例化: 当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。
    2 .初始化 容器将调用Servlet的init()方法初始化这个对象。
    3 .请求处理 Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,
    4 . 服务终止 当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。

  18. Servlet是线程安全的吗
    Servlet不是线程安全的。
    在web 容器中只创建一个实例,所以多个线程同时访问servlet的时候,Servlet是线程不安全的。
    那么 web 容器能为每个请求创建一个Servlet的实例吗?当然是可以的,只要Servlet实现SingleThreadModel接口,就可以了。

  19. 说说自动登录功能的编码实现?
    a、登录功能是用session实现的,就是向session对象中保存当前用户的对象。
    b、自动功能是用cookie实现的,就是登录时将用户的信息保存为持久cookie。
    c、下次访问时,读取请求中如果有用户信息的cookie就可以自动登录。

  20. JSP乱码如何解决?
    JSP页面乱码
    <%@page contentType=“text/html;charset=utf-8” %>
    b、表单提交时出现乱码
    request.setCharacterEncoding(“utf-8”);
    c、数据库出现乱码
    jdbc:mysql://localhost:3306:/user?useSSL=false&useUnicode=true&characterEncoding=utf-8;

  21. MVC的各个部分都有哪些技术来实现,如何实现。
    Model:负责数据传递,一般和数据库,form表单对应。
    View:负责页面显示。
    Controller:负责每个请求的分发,可以处理请求并负责业务逻辑。
    Model通过JavaBean实现,View是JSP,Controller是一般是一个Servelt。


参考: https://blog.csdn.net/jackfrued/article/details/44931137
https://blog.csdn.net/xinghuo0007/article/details/53463978
https://blog.csdn.net/liuxiaogangqq/article/details/8124793
https://blog.csdn.net/Jeff_Seid/article/details/80761105
https://blog.csdn.net/Answer_Lanyu/article/details/77966802
https://blog.csdn.net/guoweimelon/article/details/50886092
https://blog.csdn.net/github_36032947/article/details/78343734
https://blog.csdn.net/wu_di_tian_xia/article/details/80272204

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值