1.application,session和cookie的区别
方法 | 信息量大小 | 保存时间 | 应用范围 | 保存位置 |
Application | 任意大小 | 整个应用程序的生命期 | 所有用户 | 服务器端 |
Session | 小量,简单的数据 | 用户活动时间+一段延迟时间 (一般为20分钟) | 单个用户 | 服务器端 |
Cookie | 小量,简单的数据 | 可以根据需要设定 | 单个用户 | 客户端 |
application,session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。
session中保存的是键值对,cookie中保存的是字符串。
session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
session在用户会话结束后就会关闭了,但cookie因为保存在客户端,可以长期保存。
Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件(global.asax)中完成.尽管使用Application.Lock和Applicaiton.Unlock方法来避免写操作的同步,但是它串行化了对application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合。
Session中的信息保存在Web服务器内容中,当session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用session对象保存还是一个不错的选择。
Cookie对象能够长期保存,Web应用程序可以通过获取客户端的cookie值来判断用户的身份来进行验证(实现保持用户长久的登录状态),无需占用任何服务器资源。但是也有缺点,有大小限制,而且如果客户端配置禁止Cookie设置,则被限制使用, 还存在安全风险,可以伪装。
涉及知识点:
无状态的HTTP协议:
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP协议)是一种通信协议,它允许将超文本标记语言文档(HTML文档)从web服务器传送到客户端的浏览器。
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务端的连接就会关闭,再次交换数据需要建立新的连接。也就是说,服务器无法从连接上跟踪会话。
会话跟踪:
会话,指的是用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话跟踪是web程序常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是cookie和session。cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份。
Cookie:
由于HTTP协议是一种无状态的协议,服务器单从网络连接上无从知晓客户身份。比如用户A购买了一件商品放入购物车,当再次购买商品的时候服务器已经无法判断该购物行为是属于用户A的会话还是用户B的会话了。该怎么办了?cookie其实是一小段的文本信息。客户端请求服务器,如果服务器需要记录用户状态,就使用response想客户端浏览器颁发一个cookie,客户端就会把cookie保存起来。
当浏览器请求该网站的时候,浏览器把请求网址连同该cookie一同提交给服务器,服务器检查该cookie,以此来辨认用户状态。服务器还可以根据内容修改cookie的内容。(cookie的内容主要包括名字、值、过期时间、路径和域。路径和域一起构成了cookie的作用范围)。
会话cookie和持久cookie:
若不设置过期时间,则表示这个cookie的生命周期为浏览器的会话期间,关闭浏览器窗口,cookie就会消失,这种生命周期巍峨浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘内而是保存在内存里,当然这种行为并不是规范规定的。
若设置了过期时间,那么浏览器会把cookie存在硬盘上,关闭浏览器后再次打开浏览器,这些cookie仍然有效直至超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。这就是持久cookie。
cookie具有不可跨域名性,浏览器访问百度不会带上谷歌的cookie。
session:
session是另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器会把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。
2.JSP内置对象
JSP的内置对象是指在JSP页面系统中已经默认内置的JAVA对象,这些对象不需要开发人员显式声明即可使用。在JSP页面中,可以通过存取JSP内置对象实现与JSP页面和Servlet环境的相互访问。每个内部对象均有对应所属的ServletAPI类型。
常见JSP内置对象包括request对象、response对象、session对象、out对象、application对象、page对象、exception对象、pageContext对象、config对象。
JSP的内置对象主要有以下特点:
1、由JSP规范提供,不用编写者实例化;(无需声明就可以使用)
2、通过WEB容器实现和管理;
3、所有JSP页面均可使用;
4、只有在脚本元素的表达式或代码段中才可使用;(<%=使用内置对象%>或<%使用内置对象%>)
涉及知识点:
1.Request对象
Request对象是javax.servlet.http.HttpServletRequest类的实例。代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。比如表单中的数据、网页地址后带的参数等。
2.Response对象
Response对象是javax.servlet.http.HttpServletResponse类的实例。代表响应对象,主要用于向客户端发送数据。
3.Out对象
Out对象是javax.servlet.jsp.JspWriter类的实例。主要用于向客户端浏览器输出数据。
4.session对象
Session 对象是javax.servlet.http.HttpSession类的实例。主要用来保持在服务器与一个客户端之间需要保留的数据,比如在会话期间保持用户的登录信息等,会话状态维持是Web应用开发者必须面对的问题。当客户端关闭网站的所有网页或关闭浏览器时,session对象中保存的数据会自动清除。由于Htp协议是一个无状态协议,不保留会话间的数据,因此通过session对象扩展了htp的功能。比如用户登录一个网站之后,登录信息会暂时保存在session对象中,打开不同的页面时,登录信息是可以共享的,一旦用户关闭浏览器或退出登录,就会清除session对象中保存的登录信息。
5.Application对象
Application对象是javax.servlet.ServletContext类的实例。主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享。
6.PageContext对象
PageContext对象是javax.servlet.jsp.PageContext类的实例。用来管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由JSP容器来完成的。
7.Config对象
Config对象是javax.servlet.ServletConfig类的实例。是代码片段配置对象,表示Servlet的配置。
8.Page(相当于this)对象
Page对象是javax.servlet.jsp.HttpJspPage类的实例。用来处理JSP网页,它指的是JSP页面对象本身,或者说代表编译后的servlet对象,只有在JSP页面范围之内才是合法的。
9.Exception对象
Exception对象是java.lang.Throwable类的实例。处理JSP文件执行时发生的错误和异常只有在JSP页面的page指令中指定isErrorPage=“true”后,才可以在本页面使用exception对象。
需要说明的是,pageContext中的属性默认在当前页面是共享的;session中的属性在当前session中是共享的;application对象中的属性则对所有页面都是共享的。
3.jsp标签
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
JSP的常用标签有 <jsp:include>, <jsp:forward> 和 <jsp:param>
<jsp:include>标签 :用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
举例:
<jsp:include page="/xxx/a2.jsp"/> 假设a1.jsp中存在此标签,那么当你访问a1.jsp时,页面内容不仅会显示出a1.jsp还会显示出a2.jsp。
<jsp:forward>标签 :用于把请求转发给另外一个资源。
举例:
<jsp:forward page="/a2.jsp"/> 假设a1.jsp中存在此标签,那么当你访问a1.jsp时,页面内容会显示出a2.jsp ,但是页面的地址还是显示a1.jsp,
这是因为此跳转属于服务器端跳转。只要是服务器端跳转,则地址栏永远没有变化。
<jsp:param>标签 :当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。
举例:使用<jsp:param>标签向被包含的页面传递参数
a1.jsp包涵以下代码
<jsp:include page="/a2.jsp"> <jsp:param name="parm1" value="hello" /> </jsp:include>
a2.jsp包涵以下代码
<%=request.getParameter("parm1")%>
就可以把a1.jsp中parm1的值传到a2.jsp
举例:使用<jsp:param>标签向要跳转的页面传递参数
a1.jsp包涵以下代码
<jsp:forward page="/a2.jsp"> <jsp:param name="parm1" value="hello" /> </jsp:forward>
a2.jsp包涵以下代码
<%=request.getParameter("parm1")%>
就可以把a1.jsp中parm1的值传到a2.jsp
4.sql优化方法,表拆分,表合并,数据库分页查询,sql注入
sql优化方法: 直接看这篇博客即可 https://blog.youkuaiyun.com/qq_38789941/article/details/83744271
数据库分页查询:直接看这篇博客即可 https://blog.youkuaiyun.com/use_admin/article/details/83622414
sql注入:直接看这篇博客即可 https://www.cnblogs.com/myseries/p/10821372.html
因为答案有大部分都是参考别的博客或者百科,统一底下写参考链接。
https://blog.youkuaiyun.com/chenghaibing2008/article/details/8499601
https://www.cnblogs.com/dorra/p/7748662.html
https://blog.youkuaiyun.com/u010889616/article/details/52751617