1.jsp和servlet有什么区别?
jsp是servlet技术的扩展,本质上就是servlet的简易方式。
servlet和jsp最主要的区别在于,servlet的应用逻辑是在java文件中,并且完全从表示层中的html里分离开来,而jsp是java和html组合成一个扩展名为jsp的文件。jsp侧重于视图,servlet主要用于控制逻辑。
2.jsp有哪些内置对象?作用分别是什么?
jsp中有9大内置对象:
- request:封装客户端的请求,其中包含来自get或post请求的参数。
- response:封装服务器对客户端的响应。
- pageContext:通过该对象可以获取其他对象。
- session:封装用户会话的对象。
- application:封装服务器运行环境的对象。
- out:输出服务器响应的输出流对象。
- config:web应用的配置对象。
- page:jsp页面本身(相当于java程序的this)。
- exception:封装页面抛出异常的对象。
3.jsp有哪些作用域?
jsp有四中作用域:
- page:代表与一个页面相关的对象和属性。
- request:代表与客户端发出的一个请求相关的对象和属性。
- session:代表某个用户与服务器建立的一次会话相关的对象和属性。
- application:代表与整个web应用程序相关的对象和属性。
4.session和cookie有什么区别?
存储位置不同:session存储在服务器端,cookie存储在浏览器端。
安全性不同:cookie安全性一般,因为存储在客户端可以被伪造和修改。
容量和个数限制:cookie有容量限制,每个站点下的cookie也有个数限制。
存储的多样性:session可以存储在redis、数据库、应用程序中。而cookie只能存储在浏览器中。
5.session的工作原理?
session的工作原理:在客户端登录完成后,服务器会创建对应的session,session创建完成后,会把session的id发送给客户端,客户端在存储到浏览器中。这样客户端每次访问服务器时,都会带着sessionid,服务器拿到sessionid之后,在内存中找到与之对应的session这样就可以正常工作了。
6.客户端禁止cookie能实现session还能用?
可以用,session只是依赖cookie存储sessionid,如果cookie被禁用了,可以在URL中添加sessionid的方式保证session能正常使用。
7.Spring MVC和Struts的区别是什么?
拦截级别:struts2是类级别的拦截。spring mvc是方法级别的拦截。
数据独立性:spring mvc的方法之间基本是独立的,独享request和response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量。而struts2虽然方法之间也是独立的,但其所有的action变量是共享的,这不会影响程序的运行,却给我们的编码和读程序时造成一定的麻烦。
拦截机制:struts2有自己的intercepoter机制,spring mvc用的是独立的aop方式,这样导致struts2的配置文件量比spring mvc大。
对ajax的支持:spring mvc集成了ajax,所以ajax的使用很方便,只需要一个注解@ReponseBody就可以实现了。而struts2一般需要安装插件或者自己写代码才行。
8.如果避免sql注入?
使用预处理PreparedStatement。
使用正则表达式过滤掉字符中的特殊字符。
9.什么是XSS攻击,如何避免?
XSS攻击:即跨站脚步攻击,它是web程序中常见的漏洞。原理是攻击者往web页面里插入恶意的脚步代码(css代码、Javascript代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户cookie、破坏页面结构、重定向到其他网站等。
预防XSS的核心是必须对输入的数据做过滤处理。
10.是你是CSRF攻击,如何避免?
CSRF:Cross-Site Request Forgery(跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你的名义发送邮件、发消息、购买商品、转账等。
防御手段:
- 验证请求来源地址。
- 关键操作添加验证码。
- 在请求地址添加token并验证。