四种会话跟踪技术
会话跟踪:在客户端与服务端连接的过程中始终保持数据交换的通道
1.URL重写
2.表单隐藏域传值
3.Session
4.Cookie
Session与Cookie区别
Session是存在于服务端的临时缓存,利用内存实现的存储机制,只能存储极少量数据(用户登录信息),会随着会话的结束而清空,或者有效期到达之后清空(服务端)
Cookie是存在于客户端浏览器的缓存数据,是利用文件存储,可以存储少量数据,有效期可以自行设置,一般可以使用cookie存储用户信息,购物车信息,等缓存数据(客户端)
JSP三大指令
Page
JSP页面的设置通常使用page指令
Language设置页面的脚本语言
contentType响应数据的类型(text/html;charset=utf-8) http协议
PageEncoding页面的编码模式 jsp页面
Import导入外部依赖包
ErrorPage指定处理异常与错误的页面
IsErrorPage标记当前页面是否为异常与错误处理的页面
isELIgnored是否不解析EL表达式
Include
静态包含
Taglib
标记库
静态include动态include
静态包含就是把其他页面包含到当前页面中同时解析,生成一个Java文件
<%@include file=”被包含的页面”%>
动态包含把其他被包含的页面分别解析,各自生成java文件,然后在动态的导入主页面中
<jsp:includepage=”被包含的页面”>
七大动作
<jsp:forward page=""></jsp:forward>
<jsp:getProperty property="" name=""/>
<jsp:include page=""></jsp:include>
<jsp:param value="" name=""/>
<jsp:plugin code="" codebase=""type="bean"></jsp:plugin>
<jsp:setProperty property="" name=""/>
<jsp:useBeanid=""></jsp:useBean>
EL
ExpressLanguage表达式语言
${表达式}
JSTL
JSP标准标签库
使用过程
1.导入jstl支持包(jar包)
2.在需要使用jstl标记库的页面中导入标记
常用JSTL标签
C 核心(core) 常用
Fmt 格式化标签(日期,数字格式化)
X xml标签
Sql 访问数据库
Fn 全局函数
上传文件注意事项
1.表单的提交方式必须为Post
2.表单的enctype必须设置为multipart/form-data
3.每一个文件控件都必须有一个name属性
4.文件上传的目标一般为服务器的web-info或者服务器所在主机的本地磁盘(非项目目录),多数情况文件存储目标不会直接位于项目中,而是其他盘符或者目录,可以通过在服务器配置虚拟的方式访问到这些目录
SmartUpload与Commons-FileUpload的区别
Smartupload上传文件时,是直接将文件加载内存中,所以能够上传的文件大小与内存空间大小有直接关系,所以在上传大文件时很容易溢出,而且上传效率较低
Commons-Fileupload:是apache开源项目下子项目,能够提供稳定高效的文件上传功能,在上传文件时是利用磁盘的指定目录作为临时目录(在文件上传时不是一次性将文件加载的内存中),通过指定临时目录作为文件上传时的临时缓存目录,在上传完成之后会清空临时文件,目前common-fileupload作为推荐文件上传组件(struts2框架默认就支持,以及servlet3.0也直接将其作为一个模块纳入进来)
非servlet3.0的项目需要使用commons-fileupload时需要导入一下包:
commons-fileupload-1.3.3.jar
commons-io-2.5.jar
页面刷新表单重复提交问题
1.将表单提价方式改为post(不是最终解决方案)
2.Token机制(令牌)
监听器
1.ServletContext监听
ServletContextListener
ServletContextAttributeListener
2.Session监听
HttpSessionListener:监听session的创建与销毁
HttpSessionAttributeListener:监听session中属性的变化(新增,删除,替换)
3.Request监听
ServletRequestListener
ServletRequestAttributeListener