Java Web
jsp简介:
HTML善于显示页面,然而它并不能调用Java代码动静的生成内容;Servlet善于调用Java程序,生成动静内容,然而Servlet不善于显示页面。
jsp(Java Server Pages)联合了HTML和Servlet的长处,实质上是运行在服务端的一个Servlet,Tomcat等Servlet容器会将jsp文件中的内容通过out.write()、out.print()等办法间接输入给浏览器,浏览器获取到的仍然是一个html文档,而后再进行渲染等
JSP根本语法
1、模板元素
模板元素指就是JSP中的HTML代码,模板元素的内容会作为out.write()的参数,间接输入到页面中,在HTML中怎么写,在JSP中就怎么写
2、 脚本片段
脚本片段写在 <% %>中,能够在脚本片段中间接编写Java代码,脚本片段会一成不变的复制到java文件的service办法中的对应地位
3、表达式
JSP的表达式写在<%= %>中,JSP表达式能够将一个对象间接输入到页面中,JSP表达式中的内容最终会作为out.print()办法的参数,输入到页面中
4、正文
JSP的正文写在 <%-- --%>中
5、申明
JSP中的申明写在<%! %>中
6、JSP指令
JSP指令的格局:<%@ 指令名 属性名1=”属性值1” 属性名2=”属性值2” %>,举例:
a、page指令:b、include指令c、taglib指令
7、JSP动作标签格局:<jsp:标签名 属性名=“属性值”></jsp:标签名>
a、申请转发
<jsp:forward page=""></jsp:forward>
b、动静蕴含
<jsp:include page="/include2/2.jsp"></jsp:include>
64. jsp 和 servlet 有什么区别?
- jsp经编译后就变成了Servlet.(JSP的实质就是Servlet,JVM只能辨认java的类,不能辨认JSP的代码,Web容器将JSP的代码编译成JVM可能辨认的java类)
- jsp更善于体现于页面显示,servlet更擅长于逻辑管制。
- Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象失去。
- Jsp是Servlet的一种简化,应用Jsp只须要实现程序员须要输入到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器实现。而Servlet则是个残缺的Java类,这个类的Service办法用于生成对客户端的响应。
65. jsp 的9个内置对象别离是什么?作用是什么?
JSP有9个内置对象:
- request:封装客户端的申请,其中蕴含来自GET或POST申请的参数;
- response:封装服务器对客户端的响应;
- pageContext:通过该对象能够获取其余对象;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输入服务器响应的输入流对象;
- config:Web利用的配置对象;
- page:JSP页面自身(相当于Java程序中的this);
- exception:封装页面抛出异样的对象。
66. 说一下 jsp 的 4 种作用域?
JSP中的四种作用域包含page、request、session和application,具体来说:
- pageContext对象,最小的域对象,能够在以后页面中共享数据,一旦切换页面,则域中的属性就会失落,该对象次要用来向标签中传递数据。
- request对象,能够在一次申请中共享数据,一旦发送屡次申请,则域中的属性就会失落。次要用于在转发时共享数据(request域中属性在转发时无效,重定向时有效)。
- session对象,能够在一次会话中共享数据,一旦会话完结则域中的属性失落。会话:就是一次关上敞开浏览器的过程。
- application对象,是最大的域对象,作用范畴是整个我的项目,只有不敞开服务器则application域中的属性始终无效。
67. session 和 cookie 有什么区别?
1、存储地位不同
cookie的数据信息寄存在客户端浏览器上。session的数据信息寄存在服务器上。
2、存储容量不同
单个cookie保留的数据<=4KB,一个站点最多保留20个Cookie。对于session来说并没有下限,但出于对服务器端的性能思考,session内不要寄存过多的货色,并且设置session删除机制。
3、存储形式不同
cookie中只能保存ASCII字符串,并须要通过编码方式存储为Unicode字符或者二进制数据。session中可能存储任何类型的数据,包含且不限于string,integer,list,map等。
4、隐衷策略不同
cookie对客户端是可见的,所以它是不平安的。session存储在服务器上,不存在敏感信息透露的危险。
5、有效期上不同
能够通过设置cookie的属性,达到使cookie长期有效的成果。session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期工夫默认为-1,只需敞开窗口该session就会生效,因此session不能达到长期有效的成果。session的过期工夫是从session不流动的时候开始计算(如果session始终流动,session就总不会过期,从该Session未被拜访,开始计时; 一旦Session被拜访,计时清0);
6、服务器压力不同
cookie保存在客户端,不占用服务器资源。对于并发用户非常多的网站,cookie是很好的抉择。session是保存在服务器端的,每个用户都会产生一个session。如果并发拜访的用户非常多,会产生非常多的session,消耗大量的内存。
7、浏览器反对不同
如果客户端浏览器不反对cookie:
cookie是须要客户端浏览器反对的,如果客户端禁用了cookie,或者不反对cookie,则会话跟踪会生效。使用session须要应用URL地址重写的形式。所有用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会生效。
如果客户端反对cookie:
cookie既可能设为本浏览器窗口以及子窗口内无效,也可能设为所有窗口内无效。session只能在本窗口以及子窗口内无效。
8、跨域反对上不同
cookie反对跨域名拜访。session不反对跨域名拜访。
68. 说一下 session 的工作原理?
其实session是一个存在服务器上的相似于一个散列表格的文件。外面存有咱们须要的信息,在咱们须要用的时候能够从外面取出来。相似于一个大号的map吧,外面的键存储的是用户的sessionid,用户向服务器发送申请的时候会带上这个sessionid。这时就能够从中取出对应的值了。
69. 如果客户端禁止 cookie 能实现 session 还能用吗?
Cookie与 Session,个别认为是两个独立的货色,Session采纳的是在服务器端放弃状态的计划,而Cookie采纳的是在客户端放弃状态的计划。但为什么禁用Cookie就不能失去Session呢?因为Session是用Session ID来确定以后对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。
假设用户敞开Cookie的状况下应用Session,其实现路径有以下几种:
- 设置php.ini配置文件中的“session.use_trans_sid = 1”,或者编译时关上关上了“--enable-trans-sid”选项,让PHP主动跨页传递Session ID。
- 手动通过URL传值、暗藏表单传递Session ID。
- 用文件、数据库等模式保留Session ID,在跨页过程中手动调用。
70. spring mvc 和 struts 的区别是什么?
拦挡机制的不同
Struts2是类级别的拦挡,每次申请就会创立一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,而后通过setter,getter吧request数据注入到属性。Struts2中,一个Action对应一个request,response上下文,在接管参数时,能够通过属性接管,这阐明属性参数是让多个办法共享的。Struts2中Action的一个办法能够对应一个url,而其类属性却被所有办法共享,这也就无奈用注解或其余形式标识其所属办法了,只能设计为多例。
SpringMVC是办法级别的拦挡,一个办法对应一个Request上下文,所以办法间接基本上是独立的,独享request,response数据。而每个办法同时又何一个url对应,参数的传递是间接注入到办法中的,是办法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的申请,只会创立一个Controller,有应为没有共享的属性,所以是线程平安的,如果要扭转默认的作用域,须要增加@Scope注解批改。
Struts2有本人的拦挡Interceptor机制,SpringMVC这是用的是独立的Aop形式,这样导致Struts2的配置文件量还是比SpringMVC大。
底层框架的不同
Struts2采纳Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采纳Servlet实现。Filter在容器启动之后即初始化;服务进行当前坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务进行后销毁。
性能方面
Struts2是类级别的拦挡,每次申请对应实例一个新的Action,须要加载所有的属性值注入,SpringMVC实现了零配置,因为SpringMVC基于办法的拦挡,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。
配置方面
spring MVC和Spring是无缝的。从这个我的项目的治理和平安上也比Struts2高。
71. 如何防止 sql 注入?
- PreparedStatement(简略又无效的办法)
- 应用正则表达式过滤传入的参数
- 字符串过滤
- JSP中调用该函数查看是否包函非法字符
- JSP页面判断代码
72. 什么是 XSS 攻打,如何防止?
XSS攻打又称CSS,全称Cross Site Script (跨站脚本攻打),其原理是攻击者向有XSS破绽的网站中输出歹意的 HTML 代码,当用户浏览该网站时,这段 HTML 代码会主动执行,从而达到攻打的目标。XSS 攻打相似于 SQL 注入攻打,SQL注入攻打中以SQL语句作为用户输出,从而达到查问/批改/删除数据的目标,而在xss攻打中,通过插入歹意脚本,实现对用户游览器的管制,获取用户的一些信息。 XSS是 Web 程序中常见的破绽,XSS 属于被动式且用于客户端的攻击方式。
XSS防备的总体思路是:对输出(和URL参数)进行过滤,对输入进行编码。
73. 什么是 CSRF 攻打,如何防止?
CSRF(Cross-site request forgery)也被称为 one-click attack或者 session riding,中文全称是叫跨站申请伪造。一般来说,攻击者通过伪造用户的浏览器的申请,向拜访一个用户本人已经认证拜访过的网站发送进来,使指标网站接管并误以为是用户的实在操作而去执行命令。罕用于盗取账号、转账、发送虚伪音讯等。攻击者利用网站对申请的验证破绽而实现这样的攻击行为,网站可能确认申请来源于用户的浏览器,却不能验证申请是否源于用户的实在志愿下的操作行为。
如何防止:
1. 验证 HTTP Referer 字段
HTTP头中的Referer字段记录了该 HTTP 申请的起源地址。在通常状况下,拜访一个平安受限页面的申请来自于同一个网站,而如果黑客要对其施行 CSRF
攻打,他个别只能在他本人的网站结构申请。因而,能够通过验证Referer值来进攻CSRF 攻打。
2. 应用验证码
要害操作页面加上验证码,后盾收到申请后通过判断验证码能够进攻CSRF。但这种办法对用户不太敌对。
3. 在申请地址中增加token并验证
CSRF 攻打之所以可能胜利,是因为黑客能够齐全伪造用户的申请,该申请中所有的用户验证信息都是存在于cookie中,因而黑客能够在不晓得这些验证信息的状况下间接利用用户本人的cookie 来通过平安验证。要抵挡 CSRF,关键在于在申请中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。能够在 HTTP 申请中以参数的模式退出一个随机产生的 token,并在服务器端建设一个拦截器来验证这个 token,如果申请中没有token或者 token 内容不正确,则认为可能是 CSRF 攻打而回绝该申请。这种办法要比查看 Referer 要平安一些,token 能够在用户登陆后产生并放于session之中,而后在每次申请时把token 从 session 中拿出,与申请中的 token 进行比对,但这种办法的难点在于如何把 token 以参数的模式退出申请。
对于 GET 申请,token 将附在申请地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。
而对于 POST 申请来说,要在 form 的最初加上 <input type="hidden" name="csrftoken" value="tokenvalue"/>,这样就把token以参数的模式退出申请了。
4. 在HTTP 头中自定义属性并验证
这种办法也是应用 token 并进行验证,和上一种办法不同的是,这里并不是把 token 以参数的模式置于 HTTP 申请之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,能够一次性给所有该类申请加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种办法在申请中退出 token 的不便,同时,通过 XMLHttpRequest 申请的地址不会被记录到浏览器的地址栏,也不必放心 token 会透过 Referer 泄露到其余网站中去。