




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java web开发中的jsp知识总结1 jsp简介:jsp是一种基于文本的程序,其特点是HTML代码与Java程序共存,执行时jsp会被tomcat自动翻译,这个过程对开发者是透明的,不需要关注的,编译后的jsp和httpservlet一样,都是javax.servlet.Ser vlet接口的子类,因此jsp是另一种形式的servlet。2 Jsp概述:jsp全称是Java server page,是为了简化servlet的工作而出现的替代品,sun公司1997年推出了 servlet API以及第一款Java web 服务器,早期的java web层体系结构中只有servlet,接受用户请求,处理业务逻辑,生成HTML显示结果都是在HTML中完成的,虽然servlet可以胜任所有的工作,但是servlet不能像php,asp等镶嵌HTML代码,输出HTML代码比较困难,而且部署过程也比较复杂。为了克服servlet的这些弱点,sun公司在1999年推出了jsp,作为对servlet的补充,jsp在生成HTML代码上比servlet要简单许多,而且不需要特殊部署,只需要复制到服务器下面即可运行,jsp包括很多技术,包括Javabean,自定义标签,El表达式,JSTL标准标签类库等,这些强大成熟的技术使得jsp在视图层有很大的优势。3 Jsp工作原理:jsp是一种servlet,但是与httpservlet的工作方式不一样,httpservlet是先由源代码编译成.class文件在部署到服务器下,先编译后部署,而jsp则是先部署再编译成.class文件,先部署后编译的jsp会在客户端第一次请求jsp文件是被编译成httpjsppage类,该类会被服务器临时存放在服务器工作目录里面,由于jsp只会在客户端第一次请求时被编译,所以第一次请求jsp是会比较慢,而之后的请求由于不用编译,所以会比较快。4 Jsp生命周期:jsp也是servlet,运行时只有一个实例,跟servlet一样,jsp实例初始化,销毁是会调用servlet的init()和destory()方法,另外jsp还有自己的初始化方法和销毁方法_jspinit()与_jspdestory()。5 Jsp语法:jsp是HTML代码与Java代码的混合体,其中HTML部分遵循HTML语法,Java部分遵循Java语法。(1) Jsp元素与模板数据:元素:就是jsp的java部分,包括脚本,指令,与标签,元素决定着程序的流程,模板数据:就是jsp中的HTML部分,它的内容是固定的,无论程序怎么运行,模板数据输出到客户端时都不会发生变化,模板数据不会控制程序的流程,也不会影响程序的运行结果,模板数据写的是什么输出来就是什么。(2) jsp脚本:jsp脚本必须使用“括起来,否则被视为模板元素,且中间的代码必须遵循Java语法,否则会发生编译错误,共有三种格式:其中可以写语句:其中可以写类,方法,变量,枚举:输出变量的值(3) jsp指令:jsp指令用来输出jsp页面的一些属性等,例如编码方式,文档类型,jsp指令以结束,常见的指令有三种:page,taglib,include等。Page指令:最常见的指令,用来声明页面的属性,jsp指令的多个属性可以写在一个page指令里,也可以写在多个page里。但要注意,无论在哪个page指令里的属性都只能出现一次,否则会出现编译错误,import属性除外,可以出现多次。Include指令:比较简单,只有一种形式,relativeURL为本应用程序内的另一个jsp文件,jsp还有另外一种包含文件的行为,该命令与include指令的用法基本一致,作用也一样,不同的是,include指令是先包含 ,后编译,在被编译后的jsp中已经包含被include的文件内容了,而include行为是先运行后包含,在被编译的jsp中没有被include的内容。Taglib指令:jsp支持标签技术,使用标签功能可以实现视图代码重用,很少量的代码就能实现很复杂的显示效果,要使用标签必须先声明标签库以及标签前缀,taglib指令用来指明jsp页面内使用的jsp标签库,taglib指令有两个属性,url为类库的地址,prefix为标签的前缀。6 jsp内置对象:l out输出流对象:是javax.servlet.jsp.JspWrite类的实例,服务器向客户端输出的字符类内容可以通过out对象输出。l request请求对象:代表着客户端的请求,request包含客户端的信息以及请求的信息,如请求的哪个文件,附带的地址栏参数等,每次客户端请求都会产生一个request实例。l response响应对象:代表着客户端的响应,服务器端的任何输出都会通过response发送到客户端浏览器,每次服务端都回产生一个response实例。l config配置对象:servletconfig封装在了配置在web.xml中初始化jsp的参数,每个jsp文件共有一个config对象。l session会话对象:session和cookie是记录客户访问信息的两种机制,session用于在服务端保存用户信息,cookie用于在客户端保存用户信息,每个用户对应一个session对象。l application应用程序对象:application封装了jsp所在的web应用程序的信息,每个web应用程序对应一个application对象。l page页面对象:代表当前jsp页面,是当前jsp编译后servlet的对象,page相当于普通Java类中的this对象。l pagecontext页面上下文对象:代表当前jsp编译后的内容,通过Pagcontext可以获取jsp中的资源。7 Session机制:session是一种记录客户状态的机制,保存在服务器上,客户端浏览访问服务器时,服务器把客户端信息以某种形式记录在服务器上,服务器把信息以某种形式记录在服务器上,这就是session,客户端浏览器再次访问时只需要从该session中查找该客户的状态即可。(1) session的生命周期:session在用户第一次访问服务器的时候自动创建,需要注意只有访问jsp,servlet等程序时才会创建session,只访问HTML,image等静态资源时,不创建session,如果未生成session,也可以使用request.getsession(true)来强制生成session,session生成后,只要用户继续访问,服务器就会更新session的最后访问时间,并继续维护该session,用户每访问服务器一次,无论是否读写session,服务器都会认为该用户的session活跃(active)了一次。(2) session的有效期:由于会有越来越多的用户访问服务器,因此session会越来越多,为防止内存溢出,服务器会把长时间没有活跃的session从内存中删除这个时间就是session的超时时间。如果超过了超时时间没访问过服务器,session就自动失效了。Session的超时时间是MaxInactiveInterval属性,通过setMaxInactiveInterval() 来设置或修改。也可以在web.xml修改,另外,通过调用session的session.invalidate()来使session失效。(3) session的方法:public void invalidate()使此会话无效,然后取消对任何绑定到它的对象的绑定。public void removeAttribute(String name)从此会话中移除与指定名称绑定在一起的对象。如果会话没有与指定名称绑定在一起的对象,则此方法不执行任何操作。Public void setAttribute(String name, Object value)使用指定名称将对象绑定到此会话。如果具有同样名称的对象已经绑定到该会话,则替换该对象。Public Object getAttribute(String name)返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回 null。getAttributeNames()返回包含绑定到此会话的所有对象的名称的 String 对象的 Enumeration。 getCreationTime()返回创建此会话的时间,该时间是用自格林威治标准时间1970 年 1 月 1 日午夜起经过的毫秒数来测量的。getId()返回包含分配给此会话的唯一标识符的字符串。标识符是由 servlet 容器分配的,并且是与实现相关的。getLastAccessedTime()返回客户端上一次发送与此会话关联的请求的时间(该时间是自格林威治标准时间 1970 年 1 月 1 日午夜起经过的毫秒数),并用容器接收该请求的时间标记它。setMaxInactiveInterval(int interval)指定在 servlet 容器使此会话失效之前客户端请求之间的时间间隔,以秒为单位。负数时间指示会话永远不会超时。getMaxInactiveInterval()返回 servlet 容器在客户端访问之间将使此会话保持打开状态的最大时间间隔,以秒为单位。在此间隔之后,servlet 容器将使会话无效。可使用 setMaxInactiveInterval 方法设置最大时间间隔。负数时间指示会话永远不会超时。 isNew()如果客户端还不知道该会话,或者客户端选择不加入该会话,则返回 true。例如,如果服务器仅使用基于 cookie 的会话,而客户端已经禁止了 cookie 的使用,则每个请求上的会话都将是新会话。getServletContext()返回此会话所属的 ServletContext。(4) session对浏览器的要求:虽然session保存服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持,这是因为session需要cookie作为识别标志。HTTP协议是无状态的,session不能依据HTTP连接来判断是否是同一用户,因此服务器向客户端浏览器发送一个名为JSESSIONID的cookie,它的值为session的id,session依据该cookie判断是否是同一用户。8 Cookie机制:cookie实际上是一段小的文本信息,客户端请求服务器,如果服务器要求客户端记录该用户状态,就使用response向客户端浏览器发送一个cookie,客户端浏览器会把cookie保存起来,当浏览器再请求服务器时,浏览器会把请求的网址连同cookie一起发给服务器。服务器检查该cookie,以此来辨认用户状态,服务器还可以根据需要修改cookie的内容。(1) cookie的不可跨域名性:根据Cookie规范,浏览器访问谷歌只会携带谷歌的cookie,访问百度只会携带百度的cookie,cookie在客户端是由浏览器来管理的,浏览器能够保证Google只操作Google的Cookie,从而保证客户的隐私安全,浏览器判断一个网站是否能操作另一个网站的cookie是根据域名来判断。(2) Cookie的方法:l Cookie(String name, String value)构造带指定名称和值的 cookie。l setMaxAge(int expiry)设置 cookie 的最大生存时间,以秒为单位。正值表示 cookie 将在经过该值表示的秒数后过期。注意,该值是 cookie 过期的最大 生存时间,不是 cookie 的当前生存时间。l getMaxAge()返回以秒为单位指定的 cookie 的最大生存时间,默认情况下,-1 指示该 cookie 将保留到浏览器关闭为止。l getName()返回 cookie 的名称。名称在创建之后不得更改。 l setPath(String uri)指定客户端应该返回 cookie 的路径。l getPath()返回浏览器将此 cookie 返回到的服务器上的路径。cookie 对于服务器上的所有子路径都是可见的。l setValue(String newValue)在创建 cookie 之后将新值分配给 cookie。如果使用二进制值,则可能需要使用 BASE64 编码。l getValue()返回 cookie 的值9session和cookie的比较: Cookie和session都可以进行会话跟踪,但是实现额原理大不一样,一般情况下二者都可以满足需求,但有时候不可以使用cookie,有时候不可以使用session:(1) 从存取方式上比较:cookie只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8,GBK,Base64等方式的编码,cookie中也不能直接存取Java对象,若要存储稍微复杂的信息,使用cookie是比较困难的。而session中可以存取任何类型的数据,包括而不限于String,Integer,map,list等,session中也可以直接保存Javabean乃至任何Java类,对象等,使用起来非常方便,可以把session看作是一个Java容器类。(2) 从隐私安全上比较:cookie存储在客户端浏览器中,对客户端是可见的,客户端的一些程序可能会窥探,复制,甚至修改cookie的内容,而session存储在服务器上,对客户端是透明的,不存在泄漏敏感信息的危险。如果选用cookie,比较好的办法是敏感的信息如账号密码等尽量不要写到cookie中,最好将cookie内容进行加密,提交到服务器后再进行解密,保证cookie的内容只有自己能读得懂。(3) 从有效期上进行比较:使用过Google的人都知道,如果登陆过Google,则Google的登陆信息长期有效,用户不必每次访问都重新登陆,Google会长期的记录客户的登陆信息,要达到这种效果,选择cookie会比较好,使用Session也可以达到这种效果,但容易造成服务器内存溢出。(4) 从服务器的负担上比较:Session是保存在服务器端的,每个用户都会产生一个cookie,如果并发访问的用户非常多,会产生非常多的session,消耗大量的内存,而cookie保存在客户端,不占用服务器资源。(5) 从浏览器支持上比较:cookie是需要 客户端浏览器支持的,如果客户端禁用cookie,或者不支持cookie,则会话跟踪会失效,对于wep的应用,常规的cookie 就配不上用场了。(6) 从跨域名上比较:cookie支持跨域名而session不支持。9 过滤器Filter:Filter和Listener是servlet规范里的两个高级特性,不同于servlet,他们不用于处理客户端请求,只用于对request和response进行修改或者对context,session,request事件进行监听。(1) Filter概述:Filter意为滤镜或者过滤器,用于在servlet之外对request或者response进行修改,Filter提出了滤镜链(FilterChain)的概念,一个FilterChain中包含多个Filter,客户端请求request在抵达servlet之前会经过FilterChain里的所有Filter,服务器响应response在抵达客户端浏览器之前也会经过FilterChain里的所有Filter。(2) Filter接口:des
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学信息培训总
- 前端技术模拟面试题及答案
- 患者搬运约束技术培训试题及答案
- 辅警法律知识培训提纲课件
- 农业银行2025兴安盟秋招笔试性格测试题专练及答案
- 邮储银行2025鄂尔多斯市秋招笔试创新题型专练及答案
- 农业银行2025凉山彝族自治州秋招笔试创新题型专练及答案
- 农业银行2025鹰潭市小语种岗笔试题及答案
- 2025年3D打印的食品制造工艺
- 2025行业数字化转型成功案例分析
- 山东大学核心期刊目录(文科)
- 年产62万吨甲醇制烯烃(MTO)项目初步设计说明书
- 中医基础理论-脏象学说
- ICU患者的早期活动
- GB/T 8566-2007信息技术软件生存周期过程
- TSZUAVIA 009.11-2019 多旋翼无人机系统实验室环境试验方法 第11部分:淋雨试验
- GB/T 13452.2-2008色漆和清漆漆膜厚度的测定
- GB/T 12730-2008一般传动用窄V带
- ps6000自动化系统用户操作及问题处理培训
- 手机拍照技巧大全课件
- 基层医院如何做好临床科研课件
评论
0/150
提交评论