• 面试简单整理之web


    63.servlet是什么?运行过程?

      Servlet是一门用于开发动态web资源的技术。

    运行过程:

    Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
      ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
      ②装载并创建该Servlet的一个实例对象。 
      ③调用Servlet实例对象的init()方法。
      ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
      ⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。 

    64.jsp 和 servlet 有什么区别?

      JSP本质上就是servlet,jsp经编译后就变成了Servlet。jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。

    • Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容
    • JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容

    65.jsp 有哪些内置对象?作用分别是什么?

    一、pageContext表示页面容器
         pageContext对象的作用是取得任何范围的参数,通过pageContext对象可以获取JSP页面的out、request、response、session、application等对象,或者可以重新定向客户的请求等,较少使用
    二、request服务器端取得客户端的信息:头信息 、Cookie、请求参数等
       1. 获取头信息
       2.Cookie
       3.请求参数
       4.属性
    三、response服务器端回应客户端信息:Cookie、重定向
           1.重定向
           2.添加一个Cookie
           3. 设置头标
    四、session表示每一个用户,用于登录验证上
            session用于保存客户信息而分配给客户的对象,session的生命周期从客户端进行第一个request开始,到用户端结束对应用程序的访问终止,如关闭浏览器。session中的ID标识是唯一的,用了标识每个用户,当刷新浏览器时,该标识的值不变,可通过session.getId()获取ID
            1. 设置session的属性
           2. 获取session的属性(session的属性可以看做全局变量,在同一个Web哪个页面都能够获取)
            3. 移除属性
    五、application表示整个服务器
           application是多客户端共享对象,每个WEB应用程序开始运行时,会创建唯一的application对象,工所有访问该应用程序的客户端共享。当应用程序结束时,application对象被销毁
    
    六、config取得初始化参数,初始化参数在web.xml文件中配置
    七、exception表示的是错误页的处理操作
    
           只有page指令的isErrorPage属性值为true时(<%@page isErrorPage="true" %>),JSP中的exception对象才有效。其他页面通过<%@page errorPage="JSP的路径和名字" %>,指定了错误处理页面
    八、page如同this一样,代表整个jsp页面自身
           page对象的声明类型是java.lang.Object。代表JSP本身,即对应的servlet类的对象,较少使用。
    
    九、out输出 
           out对象主要内容是向web浏览器内输出各种数据类型的内容,并且管理应用服务器上的输出缓冲器,缓冲器默认值为8KB
    View Code

    66.说一下 jsp 的 4 种作用域?

    四个作用域:request域  session域  application域  page域
    page的有效范围只在当前jsp页面里。
    
    request,它的有效范围是当前请求周期。
      所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
    session,它的有效范围是当前会话。
      所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
    application,它的有效范围是整个应用。
      整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。
    View Code

    67.session 和 cookie 有什么区别?

    cookie 和session的区别
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
    
    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
       考虑到安全应当使用session。
    
    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
       考虑到减轻服务器性能方面,应当使用COOKIE。
    
    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
    
    5、所以个人建议:
       将登陆信息等重要信息存放为SESSION
       其他信息如果需要保留,可以放在COOKIE中
    View Code

    68.说一下 session 的工作原理?

    Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录
    
      在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
    
      每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。
    
      1、两个问题:
    
    1)什么东西可以让你每次请求都把SessionId自动带到服务器呢?显然就是cookie了,如果你想为用户建立一次会话,可以在用户授权成功时给他一个唯一的cookie。当一个
    
    用户提交了表单时,浏览器会将用户的SessionId自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionId
    
    所对应的用户。试想,如果没有 SessionId,当有两个用户同时进行注册时,服务器怎样才能知道到底是哪个用户提交了哪个表单呢。
    
    2)储存需要的信息。服务器通过SessionId作为key,读写到对应的value,这就达到了保持会话信息的目的。
    
      2、session的创建:
    
    当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了sessionId,如果已包含则说明以前已经为此客户端创建过session,服务
    
    器就按照sessionId把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionId,则为此客户端创建一个session并且生成一个与此session相关
    
    联的sessionId,sessionId的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionId将被在本次响应中返回给客户端保存。
    
      3、禁用cookie:
    
      如果客户端禁用了cookie,通常有两种方法实现session而不依赖cookie。
    
    1)URL重写,就是把sessionId直接附加在URL路径的后面。
    
    2)表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如: 
    
    <form name="testform" action="/xxx"> 
    <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
    <input type="text"> 
    </form> 
    
      4、Session共享:
    对于多网站(同一父域不同子域)单服务器,我们需要解决的就是来自不同网站之间SessionId的共享。由于域名不同(aaa.test.com和bbb.test.com),而SessionId又分别储存
    
    在各自的cookie中,因此服务器会认为对于两个子站的访问,是来自不同的会话。解决的方法是通过修改cookies的域名为父域名达到cookie共享的目的,从而实现SessionId的共
    
    享。带来的弊端就是,子站间的cookie信息也同时被共享了。  
    View Code

    69.如果客户端禁止 cookie 能实现 session 还能用吗?

      

    如果客户端禁用了cookie,通常有两种方法实现session而不依赖cookie。

    1)URL重写,就是把sessionId直接附加在URL路径的后面。

    2)表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

    71.如何避免 sql 注入?

      sql注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

      sql预编译 和 使用正则表达式过滤传入的参数  字符串过滤  检查是否包函非法字符

    72.什么是 XSS 攻击,如何避免?

      XSS就是在用户的浏览器中执行攻击者自己定制的脚本。       需要的参数进行过滤;检查用户输入的内容中是否有非法内容

    73.什么是 CSRF 攻击,如何避免?

      跨站点请求伪造。尽量使用POST,限制GET  加验证码    使用一个Token

  • 相关阅读:
    嘀嘀咕 (1)
    碎碎念(4)
    渲染层错误] TypeError: Cannot read property 'replace' of undefined at rewrit
    怎么跳出foreach
    vs code的Go Live不出现
    ES6
    h5分享到微信,分享到朋友圈
    网页之间传值与获取值
    原生js添加节点的高级简便写法
    原型链
  • 原文地址:https://www.cnblogs.com/nzxj/p/10470369.html
Copyright © 2020-2023  润新知