九层之台始于垒土

千里之堤溃于蚁穴

面试简单整理之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

posted on 2019-03-07 10:09  nzxing  阅读(168)  评论(0编辑  收藏  举报

导航