了一些Java代码。④它使用 . Jsp的后缀,用来告诉服务器这个文件需要特殊的处理。 纯Servlet方案存在的问题:①开发和维护应用程序的所有部分需要有深厚的Java编程知识。②改变应用程序的外观和风格,或者加入对某种新类型客户机的支持时,都需要更新并重新编译Servlet代码。③很难利用网页开发工具的优势来设计应用程序界面。
JSP与ASP的比较。两者都提供在HTML代码中混合某种程序代码。由语言引擎解释执行程序代码的能力。在ASP或JSP环境下,HTML代码主要负责描述信息显示的样式,而程序代码则用来描述处理逻辑。普通的HTML页面只依赖于Web服务器,而ASP和JSP页面需要附加的语言引擎分析和执行程序的代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP和JSP都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。ASP的编程语言是VBScript之类的脚本语言,JSP使用的是Java,这是两者最明显的区别。此外,ASP和JSP还有一个更为本质的区别:两种语言引擎用两种完全不同的方式处理页面中嵌入的程序代码。在ASP下,VBScript代码被ASP引擎解释执行;在JSP下,代码被编译成Servlet并由Java虚拟机执行,这种编译操作仅在对JSP页面的第一次请求时发生。
JSP的组成:模版元素、指令元素、动作元素、脚本元素、声明、表达式、Scriptlets和JSP内建对象组成。
(1)模版元素:是指JSP的静态HTML或者XML内容,它对JSP的显示是非常重要的。这部分的任务主要由制作网页的美工来完成。在JSP编译时,它将这些模版元素编译到Servlet里。当客户请求JSP时,它会把这些模版元素一字不变的发送给客户端。 (2)指令元素。指令是用于从JSP发送到容器上的一个信息。它用来设置全局变量,声明类要是想的方法和输出内容的类型等。它们并不向客户产生任何输出,所有的指令都在JSP整个文件范围类有效。指令元素为翻译阶段提供了全局信息。格式:<%@ directivename
attribute=“value”,attribute=“value”%>。 JSP有三类指令:页面指令、Include指令、Taglib指令
①页面指令。页面指令定义了很多影响到整个页面的重要属性。一个JSP页面可以包含多个页面指令,子编译过程中,所有的页面指令都被抽出来同时应用到一个页面里。除了Import外,其他的页面指令定义的属性值只能出现一次。格式:<%@ page ATTRIBUTE%> ②Include指令。Include指令通知容器将当前的JSP页面中的内嵌的、在指定位置上的资源内容包含进来。被包含的文件内容可以被JSP解析,这种解析发生在编译期间。格式:<%@ include file=“filename”>。其中filename为要包含的文件名。需要注意的是,一经编译,内容不可变,如果要改变filename的内容,必须重新编译JSP文件,但是它的执行效率高。
③Taglib指令。这个指令允许页面使用者自定义标签。首先开发用户的自定义标签库,为标签库编写 . tld配置文件,然后在JSP 页面里使用自定义标签。这样,容器使用这个标签库确定在遇到定制标签时要怎么做。在JSP 规范里,标签库得到了不断的加强,最新的JSP规范增加了JSTL标签库。格式:<%@ taglib uri=“taglibURL”prefix=“tagPrefix”%>。tagPrefix定义了在JSP页面里要引用这个标签时的前缀,这些前缀不可以是jsp、jspx、iava、iavax、sun、servlet、sunw。
(3)脚本元素。脚本元素把JSP的所有内容都集中在一起,它通常是用Java编写的脚本语言。它允许变量声明和函数声明,可以包含任意的Java脚本代码和对表达式的求值。 脚本元素有三种类型:声明(Declaration)、表达式(Expression)、Scriptlets ①声明。在JSP中,声明是一段Java代码,它用来定义在产生的类文件中了的属性和方法。声明后的变量和方法可以在JSP的任意地方的使用。声明的格式如下: <%!Variable declaration
Method declaration(s)%>
②表达式。表达式是在JSP请求处理阶段计算它的值,所得的结果转换成字符串并与模版数据组合在一起。表达式在页面的位置,也就是该表达式计算结果处在的位置。语法是:<%=Some iava expression %>。如果表达式的任何部分是一个对象,就可以用toString()进行转换。
③Scriptlets。Scriptlets。是一段可以在处理请求时间执行的Java代码。Scriptlets包含在<%和%>之间。它可以产生输出,并将输出发送到客户的输出流里,也可以是一些流程控制语句。在编译的类里,多个Scriptlets可以按照在JSP中出现的顺序合并成一个Scriptlets。Scriptlets像其他的Java代码或者方法一样,可以修改在它内部的对象,作为方法引用的结果。使用方法:<% java code statement %>
(4)动作元素。动作元素在请求处理阶段起作用,它用JSP作为前缀。标准动作有: ①
①
其中id是一个大小写相关的名字,用来表示这个实例;scope表示此对象可以使用的范围;otherDetails可以是一下四种之一:class=“className”;class=“className”type=“typeName”;beanName=“beanName”type=“typeName”;type=“typeName”。 ②
还是索引的,它们是什么类型等。语法:
③
④
⑤
⑥
⑦
JSP内建对象:Request对象、Response对象、PageContext对象、Session对象、Application对象、Out对象、Config对象、Page对象、Exception对象。
①Request对象。Request对象有它的请求访问,它被包装成HttpServletRequest接口。
来自客户端的请求经JSP处理后,有Request对象进行封装。它被作为给jspService()方法的一个参数而由容器传递给JSP页面。通过getParameter(String parameterName)方法可以得到Request参数,通过GET、POST、HEAD等可以得到Request类型,通过Cookies、Referer等可以得到引入的Http头。常用的方法有:Request . getParameter(String name)、Request . getParameterNames()、Request . setCharacterEncoding(String encoding)
②Response对象。Response对象对象具有页面的范围,它被包装成HttpServletResponse接口。它封住了JSP产生的响应,然后被发送到客户端以响应客户的请求。同样,它由容器生成,作为jspService()方法的参数被传入JSP。因为输出流是缓冲的,所以可以设置HTTP状态码和Response头。常用的操作有:Response . sendRedirect(“newURL”)、response.setHeader(“HeadInfo”)
③PageContext对象。PageContext对象被封装成javax.servlet.PageContext接口,它为JSP页面包装上下文。管理对属于JSP中特殊可见部分中已命名对象的访问。它的创建和初始化,都是由容器来完成的。JSP页面里可以直接使用PageContext对象的句柄。PageContext对象的getXXX()、setXXX()和findXXX()方法可以用来根据不同的对象范围实现对这些对象的管理。常用的方法有:getServletContext()、getAttribute()、setAttribute()、getSession()等
④Session对象。Session对象用来保存每个用户的信息,以便跟踪每个用户的操作状态。其中,Session信息保存在容器里,Session的id保存在客户机的Cookie中。一般情况下,用户首次登录系统时,这个Session就会自动消失。和Session对应的是HttpSession接口。常使用的方法有:getAttribute(String attrName)、setAttribute(String attrName)、getID等。