Java web开发中的jsp知识总结

时间:2024.4.21

Java web开发中的jsp知识总结

1. jsp简介:jsp是一种基于文本的程序,其特点是HTML代码与Java程序共存,执行时jsp

会被tomcat自动翻译,这个过程对开发者是透明的,不需要关注的,编译后的jsp和httpservlet一样,都是javax.servlet.Ser vlet接口的子类,因此jsp是另一种形式的servlet。

2. Jsp概述:jsp全称是Javaserverpage,是为了简化servlet的工作而出现的替代品,sun

公司19xx年推出了 servletAPI以及第一款Java web 服务器,早期的java web层体系结构中只有servlet,接受用户请求,处理业务逻辑,生成HTML显示结果都是在HTML中完成的,虽然servlet可以胜任所有的工作,但是servlet不能像php,asp等镶嵌HTML代码,输出HTML代码比较困难,而且部署过程也比较复杂。为了克服servlet的这些弱点,sun公司在19xx年推出了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指令:比较简单,只有一种形式,<%@ include file=”relativeURL” %>,

relativeURL为本应用程序内的另一个jsp文件,jsp还有另外一种包含文件的行

为,<% jsp:include page=”relativeURL” %>该命令与include指令的用法基本一致,

作用也一样,不同的是,include指令是先包含,后编译,在被编译后的jsp中已

经包含被include的文件内容了,而include行为是先运行后包含,在被编译的jsp

中没有被include的内容。

Taglib指令:jsp支持标签技术,使用标签功能可以实现视图代码重用,很少量

的代码就能实现很复杂的显示效果,要使用标签必须先声明标签库以及标签前

缀,taglib指令用来指明jsp页面内使用的jsp标签库,taglib指令有两个属性,

url为类库的地址,prefix为标签的前缀。

6. jsp内置对象:

? out输出流对象:是javax.servlet.jsp.JspWrite类的实例,服务器向客户端输出的字

符类内容可以通过out对象输出。

? request请求对象:代表着客户端的请求,request包含客户端的信息以及请求的信

息,如请求的哪个文件,附带的地址栏参数等,每次客户端请求都会产生一个request实例。

? response响应对象:代表着客户端的响应,服务器端的任何输出都会通过response

发送到客户端浏览器,每次服务端都回产生一个response实例。

? config配置对象:servletconfig封装在了配置在web.xml中初始化jsp的参数,每个

jsp文件共有一个config对象。

? session会话对象:session和cookie是记录客户访问信息的两种机制,session用于

在服务端保存用户信息,cookie用于在客户端保存用户信息,每个用户对应一个session对象。

? application应用程序对象:application封装了jsp所在的web应用程序的信息,每

个web应用程序对应一个application对象。

? page页面对象:代表当前jsp页面,是当前jsp编译后servlet的对象,page相当于

普通Java类中的this对象。

? 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()

返回创建此会话的时间,该时间是用自格林威治标准时间19xx年x月x日午夜起经过的毫秒数来测量的。

getId()

返回包含分配给此会话的唯一标识符的字符串。标识符是由 servlet 容器分配的,并且是与实现相关的。

getLastAccessedTime()

返回客户端上一次发送与此会话关联的请求的时间(该时间是自格林威治标准时间 19xx年x月x日午夜起经过的毫秒数),并用容器接收该请求的时间标记它。

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的方法:

? Cookie(String name, String value)

构造带指定名称和值的 cookie。

? setMaxAge(int expiry)

设置 cookie 的最大生存时间,以秒为单位。正值表示 cookie 将在经过该值表

示的秒数后过期。注意,该值是 cookie 过期的最大生存时间,不是 cookie 的

当前生存时间。

? getMaxAge()

返回以秒为单位指定的 cookie 的最大生存时间,默认情况下,-1 指示该 cookie 将保留到浏览器关闭为止。

? getName()

返回 cookie 的名称。名称在创建之后不得更改。

? setPath(String uri)

指定客户端应该返回 cookie 的路径。

? getPath()

返回浏览器将此 cookie 返回到的服务器上的路径。cookie 对于服务器上的所有

子路径都是可见的。

? setValue(String newValue)

在创建 cookie 之后将新值分配给 cookie。如果使用二进制值,则可能需要使用 BASE64 编码。

? getValue()

返回 cookie 的值

9.session和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的内容只有自己能读得

懂。

更多相关推荐:
javaweb总结

1javaweb应用的目录结构web程序文件夹WEBINFwebxmlclasses源程序对应的classlib程序用到的第三方库jar2如何用javac来编译程序a需要用到j2ee相关的jar将这些jar放到...

javaWeb总结+小结

JavaWebBS与CS的区别1从安装上来讲BS只需要在服务器端安装即可而CS却需要每一个客户端进行安装2从部署上来说BS只需要服务器能够支持即可而CS却对每一个客户端的电脑提出了要求3从升级维护角度来说BS只...

JavaWeb期末总结

第一章Web开发基础知识简单描述表单续表单元素ltFORMmethodquotGETPOSTactionquotURLquotgtformbodyltFORMgtltFORMgt元素括起整个表单并给出一些基本定...

JavaWeb总结

UserDaoImpl.javapackagecn.itcast.dao.impl;importorg.apache.commons.dbutils.QueryRunner;importorg.apache.c…

JavaWeb大总结

day01XML的主要内容1XML的作用2XML语法3DTD的约束4用Java语言编写XML数据解析器JAXPDOM4J5Xpath6Schema约束7Eclipse的基本使用8JUnit单元测试9Debug调...

javaweb学习心得

学习心得在写心得之前总结下中级部分学习的内容,我们的中级部分主要学习了html,css,javacript,xml,dtd/scheam,以及javaee中的jsp,servlet,过滤器,监听器,JSTL,E…

java web总结

JavaWeb总结1.JSP运行原理(1)用户通过客户端浏览器向服务器发送请求。(2)JSP文件将JSP引擎编译成Java的class文件,即servlet。(3)将产生的servlet加载到内存执行。(4)S…

Java web 开发教程学习心得

Javaweb开发教程学习心得Javaweb课程结束了,在完成了eclipse三份实验报告之后我开始总结这门课程自己究竟学到了什么。从C语言到Java,再到jsp,最后到javaweb,一直都在与编程都打交道,…

javaweb开发要学习的所有技术和框架总结:

学习javaweb开发要学习的技术和框架总结:前言:当初想学习javaweb开发的时候,希望能够全方面地学习(这样找工作时就胸有成足了)。但是对这个根本不理解,又不认识从事这方面的熟人,所以学习起来无从下手。经…

Java Web实训总结

Jspservletmysql论坛项目实训总结实训人程路峰学号11103303通过为期10天的实训我学习了很多关于JavaWeb的知识在老师的正确指导下顺利的完成了我的实训内容在此也有同学的帮助在他们的帮助下我...

java web 工作原理总结

总结第一章javaweb工作原理11web应用程序有web服务器web客服端浏览器HTTP协议以及静态HTML文件Web服务器的作用是接受客服端请求然后向客服端返回些结果浏览器的作用是允许用户请求服务器上的某个...

JavaWeb学习总结

一基本概念11WEB开发的相关知识WEB在英语中web即表示网页的意思它用于表示Internet主机上供外界访问的资源Internet上供外界访问的Web资源分为1静态web资源如html页面指web页面中供人...

java web总结(27篇)