64.jsp 和 servlet 有什么区别?php
65.jsp 有哪些内置对象?做用分别是什么?css
66.说一下 jsp 的 4 种做用域?html
67.session 和 cookie 有什么区别?前端
68.说一下 session 的工做原理?java
69.若是客户端禁止 cookie 能实现 session 还能用吗?web
70.spring mvc 和 struts 的区别是什么?算法
71.如何避免 sql 注入?spring
72.什么是 XSS 攻击,如何避免?sql
73.什么是 CSRF 攻击,如何避免?数据库
64.jsp 和 servlet 有什么区别?
首先来看一下Servlet:Java服务器小程序(Server Applet)
事实上,Servlet不复杂,它只是一个接口,而接口的做用是什么,规范。
servlet接口定义的是一套处理网络请求的规范,全部实现servlet的类,都须要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,全部实现servlet接口的类,或者说,全部想要处理网络请求的类,都须要回答这三个问题:
这是Java给的一种规范!servlet是一个规范,那实现了servlet的类,就能处理请求了吗?答案是,不能。
看一下service方法的说明,该方法是被servlet container即servlet容器调用来响应请求的,好比咱们最经常使用的Tomcat容器。
因此,servlet不直接和客户端打交道,而是经过Tomcat,Tomcat监听了端口,请求过来后,根据url等信息,肯定要将请求交给哪一个servlet去处理,而后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。
/** * Defines methods that all servlets must implement. * * <p> * A servlet is a small Java program that runs within a Web server. Servlets * receive and respond to requests from Web clients, usually across HTTP, the * HyperText Transfer Protocol. */ public interface Servlet { /** * Called by the servlet container to allow the servlet to respond to a * request. */ public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; }
Servlet应用没法独立运行,必须运行在Servlet容器中。Tomcat 是Web应用服务器,就是一个Servlet/JSP容器。Servlet容器将用户的请求传递给Servlet应用,并将结果返回给用户。Web服务器和Web客户端间经过HTTP协议通讯,所以Web服务器也叫HTTP服务器。像下图
接着看一下JSP: Java Server Pages,直译就是运行在服务器端的页面,是Sun 公司指定的一种服务器端动态页面技术的组件规范,Jsp是以“.jsp”为后缀的文件,在该文件中主要是html 和少许的java 代码。jsp 文件在容器中会转换成Servlet去执行。
当有人请求JSP时,服务器内部会经历一次动态资源(JSP)到静态资源(HTML)的转化,服务器会自动帮咱们把JSP中的HTML片断和数据拼接成静态资源响应给浏览器。也就是说JSP是运行在服务器端,但最终发给客户端的都已是转换好的HTML静态页面(在响应体里)。
即:JSP = HTML + Java片断(各类标签本质上仍是Java片断)
因此:简单总结一下servelet与JSP的区别:
一、运行过程
客户在第一次请求JSP时,请求较慢,由于JSP Engine先把JSP程序转换成servlet代码,接着将它编译成类文件,之后贮存在内存中再次调用速度就快了;
访问servlet时,能够直接对其编译好的类文件执行。
二、使用方式
要想使用servlet必须把它放在特定位置并且必须对其映射配置;
jsp能够放在和html一样位置(webapps根目录下或者webapps根目录下的子目录下)并且不须要配置,能够直接使用。
三、程序组成
Servlet在Java代码中经过HttpServletResponse对象动态输出HTML内容;
JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容
四、职能分工
jsp更侧重于前端页面显示,servlet更侧重于业务逻辑。
五、本是一家人
Jsp 本质上是servlet,用jsp实现的页面用servlet也能实现。
最后,servlet和JSP经过MVC双剑合璧
各自的特色
既然JSP和Servlet都有自身的适用环境,那么可否扬长避短,让它们发挥各自的优点呢?答案是确定的——MVC(Model-View-Controller)模式很是适合解决这一问题。
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):
在JSP/Servlet开发的软件系统中,这三个部分的描述以下所示:
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;img src="https://pic2.zhimg.com/50/229cf9ff5b1729eaf408fac56238eeb3_hd.jpg" data-rawwidth="842" data-rawheight="326" class="origin_image zh-lightbox-thumb" width="842" data-original="https://pic2.zhimg.com/229cf9ff5b1729eaf408fac56238eeb3_r.jpg"/&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
MVC模式在Web开发中的好处是很是明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会经过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提升了代码的可读性和可维护性。
注意:MVC是web开发都有的一种模式,好比PHP开发web时也有MVC模式。而三层架构则是JavaEE的:Controller/Service/Dao。分层开发是为了使代码逻辑更加清晰,也起到了必定的解耦合做用。
65.jsp 有哪些内置对象?做用分别是什么?
在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.若是每次咱们在jsp页面中须要使用这些对象都要本身亲自动手建立就会特别的繁琐.SUN公司所以在设计jsp时,在jsp页面加载完毕以后自动帮开发者建立好了这些对象,开发者只须要使用相应的对象调用相应的方法便可.这些系统建立好的对象就叫作内置对象.
在servlet程序中,若是开发者但愿使用session对象,必须经过request.getSession()来获得session对象;而在jsp程序中,开发中可直接使用session(系统帮咱们建立好的session对象的名字就叫session)调用相应的方法便可,如:session.getId().
JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception
内置对象(又叫隐含对象)特色:
1. 由JSP规范提供,不用编写者实例化。
2. 经过Web容器实现和管理
3. 全部JSP页面都可使用
4. 只有在脚本元素的表达式或代码段中才可以使用(<%=使用内置对象%>或<%使用内置对象%>)
对象名 | 功能 | 类型 | 做用域 |
---|---|---|---|
request | 向客户端请求数据 | javax.servlet.ServletRequest | Request |
response | 封装了jsp产生的响应,而后被发送到客户端以响应客户的请求 | javax.servlet.SrvletResponse | Page |
pageContext | 为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中己经命名对象的该问 | javax.servlet.jsp.PageContext | Page |
session | 用来保存每一个用户的信息,以便跟踪每一个用户的操做状态 | javax.servlet.http.HttpSession | Session |
application | 应用程序对象 | javax.servlet.ServletContext | Application |
out | 向客户端输出数据 | javax.servlet.jsp.JspWriter | Page |
config | 表示Servlet的配置,当一个Servlet初始化时,容器把某些信息经过此对象传递给这个Servlet | javax.servlet.ServletConfig | Page |
page | Jsp实现类的实例,它是jsp自己,经过这个能够对它进行访问 | javax.lang.Object | Page |
exception | 反映运行的异常 | javax.lang.Throwable | Page |
66.说一下 jsp 的 4 种做用域?
分类:
域对象的做用:保存数据,获取数据,共享数据.
保存数据:Context.setAttribute("内容");//默认保存到page域
获取数据:
//自动在四个域中搜索数据 pageContext.findAttribute("内容");//在四个域中自动搜索数据,顺序:page域->request域->session域->application域(context域)
域做用范围:
67.session 和 cookie 有什么区别?
首先明白为何须要session和cookie?
由于HTTP协议是无链接无状态的。无链接: 一个请求完毕后,会断开链接,不会保持。无状态:http自己不会存储客户端和服务器在临时会话中产生的数据,而是经过客户端添加cookie机制与服务器添加session机制实现会话期间缓存产生的数据。好比你看到的网站啊,论坛啊,能记住你的密码,记住你的登录状态,那是用cookie和session实现的,和HTTP无关。
什么是Http无状态?Session、Cookie、Token三者之间的区别
session与cookie:Cookie经过在客户端记录信息肯定用户身份,Session经过在服务器端记录信息肯定用户身份。
因为HTTP是一种无状态的协议,服务器单从网络链接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,不管谁访问都必须携带本身通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工做原理。
Cookie其实是一小段的文本信息。客户端请求服务器,若是服务器须要记录该用户状态,就使用response向客 户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务 器。服务器检查该Cookie,以此来辨认用户状态。服务器还能够根据须要修改Cookie的内容。
Session是另外一种记录客户状态的机制,不一样的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只须要从该Session中查找该客户的状态就能够了。
虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然须要客户端浏览器的支持。这是由于Session 须要使用Cookie做为识别标志。HTTP协议是无状态的,Session不能依据HTTP链接来判断是否为同一客户,所以服务器向客户端浏览器发送一 个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session 依据该Cookie来识别是否为同一用户。该Cookie为服务器自动生成的,它的maxAge属性通常为–1,表示仅当前浏览器内有效,而且各浏览器窗口间不共享,关闭浏览器就会失效。
总结一下session与cookie的区别:
使用方式:
(1)cookie机制:若是不在浏览器中设置过时时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。若是在浏览器中设置了cookie的过时时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过时时间结束才消失。
Cookie是服务器发给客户端的特殊信息,cookie是以文本的方式保存在客户端,每次请求时都带上它
(2)session机制:当服务器收到请求须要建立session对象时,首先会检查客户端请求中是否包含sessionid。若是有sessionid,服务器将根据该id返回对应session对象。若是客户端请求中没有sessionid,服务器会建立新的session对象,并把sessionid在本次响应中返回给客户端。一般使用cookie方式存储sessionid到客户端,在交互中浏览器按照规则将sessionid发送给服务器。若是用户禁用cookie,则要使用URL重写,能够经过response.encodeURL(url) 进行实现;API对encodeURL的结束为,当浏览器支持Cookie时,url不作任何处理;当浏览器不支持Cookie的时候,将会重写URL将SessionID拼接到访问地址后。
安全性:cookie:针对cookie所存在的攻击:Cookie欺骗,Cookie截获;session的安全性大于cookie。
缘由以下:(1)sessionID存储在cookie中,若要攻破session首先要攻破cookie;
(2)sessionID是要有人登陆,或者启动session_start才会有,因此攻破cookie也不必定能获得sessionID;
(3)第二次启动session_start后,前一次的sessionID就是失效了,session过时后,sessionID也随之失效。
(4)sessionID是加密的
(5)综上所述,攻击者必须在短期内攻破加密的sessionID,这很难。
68.说一下 session 的工做原理?
Session字面含义就是会话。因为HTTP是无状态协议,为了保持浏览器与服务器之间的联系,才有了Session。Session就是用于在服务器端保存用户状态的协议。一般用来保存用户的登陆状态。
工做原理:
Session内容保存在服务器端的,一般是保存在内存中,固然也能够保存在文件、数据库等等。客户端跟服务器端经过SessionId来关联, SessionId一般以Cookie的形式存储在客户端。每次HTTP请求,SessionId都会随着Cookie被传递到服务器端,这样就能够经过SessionId取到对应的信息,来判断这个请求来自于哪一个客户端/用户。
添加购物车场景示例:
对象 |
职责 |
---|---|
SessionId |
负责标识客户端/用户 |
HTTP |
负责传递SessionId |
Cookie |
负责保存SessionId |
服务器 |
负责保存Session内容 |
69.若是客户端禁止 cookie 能实现 session 还能用吗?
此处cookie的做用是HTTP请求时传递sessionID,不经过cookie也能够传递,即经过URL地址重写。
URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写 到URL地址中。服务器可以解析重写后的URL获取Session的id。这样即便客户端不支持Cookie,也可使用Session来记录用户状态。
70.spring mvc 的工做原理?
首先用户发送请求——>DispatcherServlet,DispatcherServlet——>HandlerMapping匹配到具体的URL,再经过HandlerAdapter调用具体的HandlerMethod,当Handler执行完成后返回ModelAndView,会被ViewResolver解析,调用具体的物理视图。最终响应给客户端浏览器。
71.如何避免 sql 注入?
SQL注入指的是发生在Web应用对后台数据库查询语句处理存在的安全漏洞,简单的说,就是在输入字符串中嵌入SQL指令,在设计程序中忽略了对特殊字符串的检查,这些嵌入的指令便会被误认为正常的SQL指令,在数据库中执行,所以能够对后台数据库进行查看等工做,甚至破快后台数据库形成严重后果。
避免SQL注入的方法:
72.什么是 XSS 攻击,如何避免?
跨站脚本(cross site script)为了不与样式css混淆,因此简称为XSS。
XSS是一种常常出如今web应用中的计算机安全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动做或者对访问者进行病毒侵害的一种攻击方式。
主要缘由:过于信任客户端提交的数据!
解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理而后方可进行下一步的操做。
一、将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
二、表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。
四、对数据进行Html Encode 处理
五、过滤或移除特殊的Html标签, 例如: <script>, <iframe> , < for <, > for >, " for
六、过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等。
73.什么是 CSRF 攻击,如何避免?
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
你这能够这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF可以作的事情包括:以你名义发送邮件,发消息,盗取你的帐号,甚至于购买商品,虚拟货币转帐......形成的问题包括:我的隐私泄露以及财产安全。
下图简单阐述了CSRF攻击的思想:
从上图能够看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登陆受信任网站A,并在本地生成Cookie。
2.在不登出A的状况下,访问危险网站B。
CSRF攻击之因此可以成功,是由于攻击者能够伪造用户的请求,该请求中全部的用户验证信息都存在于Cookie中,所以攻击者能够在不知道这些验证信息的状况下直接利用用户本身的Cookie来经过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,而且该信息不存在于Cookie之中。
鉴于此,咱们将为每个表单生成一个随机数秘钥,并在服务器端创建一个拦截器来验证这个token,若是请求中没有token或者token内容不正确,则认为多是CSRF攻击而拒绝该请求。