Java JSP相关技术

Java    JSP相关技术

 

一    web应用

    1、  构建web应用

         徒手构建一个web应用步骤:

             (1)在任意目录下新建一个文件夹,此处将以webDemo文件夹建立一个web应用

             (2)在第一步所建的文件夹内建一个WEB-INF文件夹(注意大小写,这里为大写)

            (3)进入Tomcat或任何其他web容器内,找到任何一个web应用,将web应用的WEB-INF下的web.xml文件复制到第二                         步所建的WEB-INF文件夹下

             (4)修改复制后的web.xml文件,将文件修改成只有一个根元素的XML文件

            (5)在第2步所建的WEB-INF路径下,新建两个文件夹:classes和lib,这两个文件夹的作用完全相同,都适用于保存                            web应用所需要的Java类文件,区别是classes保存单个*.class文件;而lib保存打包后的JAR文件

              经过上述步骤,已经建立了一个空的web应用,将该web应用复制到Tomcat的webapps路径下,该应用就可以自动部署                 在Tomcat中。

    2、配置描述符web.xml

        Java web绝大部分组建都是通过web.xml文件来配置管理。有以下配置管理方式

(1)配置JSP

(2)配置和管理Servlet

(3)配置和管理Listener

(4)配置和管理Filter

(5)配置标签库

(6)配置JSP属性

(7)配置和管理JAAS授权认证

(8)配置和管理资源应用

(9)配置管理web应用首页

web.xml文件的根元素时<web-app…/>元素。在配置首页时使用welcome-file-list元素,该元素包含welcome-file子元素。示例

<welcome-file-list>

        <welcome-file>index.html</welcome-file>

        <welcome-file>index.htm</welcome-file>

        <welcome-file>index.jsp</welcome-file>

</welcome-file-list>

当有index.html文件时,首页为index.html,否则为index.htm,以此类推。

 

 

二    JSP的基本原理

 

1、JSP本质:JSP本质是Servlet(一个特殊的Java类),当用户向指定的Servlet发送请求时,Servlet利用输出流动态生成HTML页面,包括每一个静态的HTML和所有在HTML页面出现的内容。JSP中可以包含HTML标签,也可以包括Java代码

2、JSP页面组成部分

静态部分:标准的HTML标签,静态的页面内容,这些内容与静态的HTML页面相同

动态部分:受Java程序控制的内容,这些内容由Java脚本动态生成

示例代码:在JSP文件中的<body></body>标签内添加如下代码

<%out.println(new java.util.Date());%>

即会在屏幕上显示当前时间。

实际上JSP就是一个Servlet,JSP页面由系统编译成Servlet类,再由Servlet类负责响应用户请求。

 

三    JSP的四种基本语法

 

1、JSP注释

格式:<%-- 注释内容 --%>

/2、JSP声明

JSP声明用于声明变量和方法,JSP声明将会转换成对应的Servlet的成员变量或成员方法。

格式:<%! 声明部分 %>

 

3、JSP输出表达式

格式:<%=输出内容%>。类似于普通的System.out.println();

 

4、JSP小脚本

可以将HTML标签嵌入Java代码中,在JSP中Java代码必须在<% %>里面,而HTML标记语言不能再里面声明。示例代码:

<%

        for(int  i=0;i<10;i++)

{

%>

        <td><%=i%></td>

<%

}

%>

这段程序将会依次输出i的值

 

 

四    JSP的3个编译指令

        JSP的编译指令是通知JSP引擎的消息,他不直接生成输出,编译指令都有默认值,因此开发人员无需为每个指令设置值。常见的有三个编译指令:page(针对当前页面的指令)、include(指定包含另一个页面)、taglib(定义和访问自定义标签暂不介绍)。

 

1、page指令

page指令通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令。

语法格式:

<%@page

[language=”Java”]

[extends=”package.class”]

[import=”package.class | package.*,…”]

[session=”true | false”]

[buffer=”none | 8KB | size Kb”]

[autoFlush=”true | false”]

[isThreadSafe=”true | false”]

[info=”text”]

[errorPage=”relativeURL”]

[contextType=”mimeType[; charset=characterSet]” | “text/html;charset=ISO-8859-1”]

[pageEncoding=”ISO-8859-1”]

[isErrorPage=”true | false”]

%>

              各属性的意义:

language:声明当前JSP页面使用的脚本语言的种类,一般是Java,默认值也是Java,所以可以不用设置

extends:指定JSP页面编译所产生的Java类所继承的父类,或实现的接口

import:需要导入的包

session:设定这个JSP页面是否需要HTTP Session

buffer:指定输出缓冲区的大小,默认为8KB

autoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容

info:设置该JSP程序的信息,可以通过Servlet.getServletInfo()方法获取该值

errorPage:指定错误处理也米娜

isErrorPage:设置本JSP页面是否为错误处理程序

contentType:用于设定生成网页的文件格式和编码字符集,默认的MIME类型为text/html,默认的网页字符集为ISO-8859-1

pageEncoding:指定的生成网页的编码字符集

 

2、include指令

使用include指令,可以将一个外部文件嵌入当前JSP文件中,同时解析这个页面中的JSP语句(如果有的话)。这时一个静态的include,还有一个动态的include,只有静态的可以将目标页面的其他编译指令也包含进来。include既可以包含静态的文本,也可以包含动态的JSP页面。语法格式:<%@include  file=”relativeURLSpec”%>

 

 

五    JSP的7个动作指令

动作指令是运行时的动作。总共有7个:

jsp:forward:执行页面转向,将请求的处理转发到下一个页面

jsp:param:用于传递参数,必须与其他支持参数的标签一起使用

jsp:include:用于动态包含一个JSP页面

jsp:plugin:用于下载JavaBean或Applet到客户端执行

jsp:useBean:创建一个JavaBean的实例

jsp:setProperty:设置JavaBean实例的属性值

jsp:getProperty:输出JavaBean市里的属性值

 

1、forward指令

forward指令用于将页面响应转发到另外的页面,既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。语法格式:

<jsp:forward  page=”{relativeURL | <%=expression%>}”/><jsp:param   …><jsp:forward>

中间的就是传递的参数

 

2、include指令

include指定是一个动态的include指令,也用于包含一个页面,不会导入被include页面的编译指令,仅仅将导入的页面的body内容插入到本页面。语法格式:

<jsp:include page=”{relativeURl | <%=expression%>}”flush=”true”><jsp:param  name=”parameterName” value=”paraterValue”></jsp:include>

动态导入和静态导入有三点区别:

静态导入是将页面的代码完全融入,两个页面融合成一个整体的Servlet;而动态导入则是在Servlet中导入include方法来引入被导入页面的内容

静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容

动态包含还可以增加额外的参数

3、useBean、setProperty、getProperty指令

这三个指令都是JavaBean相关的指令,其中useBean指令用于在JSP页面中初始化一个Java实例,setProperty指令用于为JavaBean实例的属性设置值,getProperty指令用于输出JavaBean实例的属性。

useBean语法格式:<jsp:useBean  id=”name”  class=”classname”scope=”page | request  | session | application”/>

其中ID属性是JavaBean的实例名,class属性确定JavaBean的实现类,scope属性用于指定JavaBean实例的作用范围,该范围有四个值:page(该JavaBean实例仅在该页面有效)、request(该JavaBean实例在本次请求有效)、session(该JavaBean在本次session有效)、application(该JavaBean实例在本应用内一直有效)

setProperty指令语法:<jsp:serProperty  name=”BeanName” property=”propertyName”/>,其中一个为实例名一个为确定输出的属性名

 

4、plugin指令

plugin指令主要用于下载服务器端的JavaBean或Applet到客户端执行,所以客户端必须安装虚拟机。

 

5、param指令

param指令用于设置参数值,这个指令本身不能单独使用,因为单独的param没有实际意义。param指令可以与三个指令结合使用:jsp:include、jsp:forward、jsp:plugin

当与include指令结合使用时,param指令用于将参数值传入被导入的页面。

当与forward指令结合使用时,param指令用于将参数值传入被转向的页面

当与plugin指令结合使用时,param指令用于将参数传入页面中的JavaBean实例或者Applet实例。

语法格式:<jsp:param  name=”Name”  value=”Value”>

 

 

六    Jsp脚本中的9个内置对象

 

application:javax.servlet.ServletContext的实例,该实例代表JSP所属web应用本身,可用于JSP页面,或者在Servlet之间交换信息。常用的方法有getAttribute(String  attName)、setAttribute(String  attName , String  attValue)和getInitParameter(String  paramname )(获取web应用配置参数)等

config:javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息,常用的方法有getInitParameter(String  name)和getInitParameternames()等。事实上,JSP页面通常无需配置,也就不存在配置信息,一般在Servlet中有效

exception:java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有页面是错误处理页面,该对象才可以使用

out:java.servlet.jsp.JSPWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面

page:代表页面本身,通常没有什么太大的用处,在Servlet中的this

pageContext:javax.servlet.jsp.PageContext的实例,该对象代表该JSP页面的上下文,使用该对象可以访问页面中的共享数据,常用的方法为getServletContext()和getServletConfig()等

request:该对象封装了一次请求,客户端的请求参数都被封装在该对象里,这时一个常用的对象,获取客户端请求参数必须使用该对象,常用的方法有getParameter(String  name)、getParameterValues(String  name)、setAttribute(String name , Object  value)、getAttribute(String  name)、setCharacterEncoding(String  env)等

response:代表服务器对客户端的响应,response常用于重定向,常用的方法有getOutputStream()、sendRedirect(java.lang.String  location)等

session:该对象代表依次回话,当客户端浏览器与站点建立连接时,回话开始,当客户端关闭浏览器后,回话结束。常用方法有getAttribute(String  name)、setAttribute(String  name , Object  value)等

 

1、application对象

在web服务器中,Java提供了四个Map结构,分别为application、session、request、page,并允许JSP、Servlet将数据放入这四个结构中,并允许从这四个结构中取出数据。即解决JSP和Servlet之间数据的传递。

application:对于整个web应用有效,一旦JSP、Servlet将数据放入application中,该数据将可以被该应用下其他所有的JSP、Servlet访问

session:仅对一次会话有效,一旦JSP、Servlet将数据放入session中,该数据将可以被本次会话的其他所有JSP、Servlet访问

request:仅对本次请求有效,一旦JSP、Servlet将数据放入request中,该数据将可以被该次请求的其他JSP、Servlet访问

page:仅对当前页面有效,一旦JSP、Servlet将数据放入page中,该数据只可以被当前页面的JSP脚本,声明部分访问。方法在上面已经介绍,调用时直接用application对象调用其方法即可。

 

2、pageContext对象

这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据,使用pageContext对象可以访问page、request、session、application范围的变量。有以下两个方法:

getAttribute(String  name):获得page范围的name属性

getAttribute(String  name , int  scope):取得指定范围内的name属性,其中scope可以是以下四个值:

pageContext.PAGE_SCOPE:对应于page范围

pageContext.REQUEST_SCOPE:对应于request范围

pageContext.SESSION_SCOPE:对应于session范围

pageContext.APPLICATION_SCOPE:对应于application

当然还有两个对应的setAttribute()方法,pageContext对象包含如下方法:

ServletRequest  getRequest():获取request对象

ServletResponse  getResponse():获取response对象

ServletConfig  getServletConfig():获取config对象

ServletContext  getServletContext():获取application对象

HttpSession  getSession():获取session对象

 

3、request对象

每个request对象风阻那隔着依次用户请求,并且所有的请求参数都被封装在request对象中,request可代表本次请求范围,还可用于操作request范围的属性

(1)获取请求头/请求参数

request时HTTPServletRequest接口的实例,提供了几个方法来获得请求参数

String getParameter(String  name):获取name请求参数的值

Map  getParameter ():获取所有请求参数名和参数值所组成的Map对象

String []  getParameterValues(String  Name):name请求参数的值,当该请求参数有多个值时,该方法将返回多个值所组成的数组

HTTPServletRequest提供了如下方法访问请求头

String  getHeader(String  name):根据指定请求头的值

java.util.Enumeration<String> getHeaderNames():获取所有请求头的名称

java.util.Enumeration<String> getHeaders(String   name):获取指定请求头的值

int  getIntHeader(String  name):获取指定请求头的值,并将该值转换为整数值。

客户端发送请求参数通常分为两种情况:

GET方式的请求:直接在浏览器地址栏输入访问地址所发送的请求或提交表单发送请求时,该表单对应的form元素没有设置method属性,或设置method属性为get,这几种请求都是GET方式的请求。GET方式的请求会将请求参数的名和值转换为字符串,并附加在原URL之后,因此可以在地址栏中看到请求参数名和值,且GET请求传送的数据量较小,一般不能大于2KB

POST方式使得请求:这种方式通常需要提交表单(由formHTML元素表示)的方式来传送,且需要设置form元素的method属性为post。POST方式传送的数据量较大,通常认为POST请求参数的大小不受限制,但往往取决于服务器的限制,POST请求传输的数据量总比GET传输的数据量大,而且POST方式发送的请求参数以及对应的值放在HTML HEADER中传输,用户能在地址栏里看到请求参数值,安全性相对较高。

注意:在POST请求里如果包含了非西欧字符,则必须在获取参数前调用setCharacterEncoding()方法设置编码的字符集。如果发送的请求的表单页采用GBK字符集,该表单页发送的请求也将采用GBK字符集,所以本页面需要先执行如下方法:setCharacterEncoding(“GBK”):设置request编码所用的字符集。为了获取GET请求里的中文参数值,必须借助于java.net.URLDecoder类。

 

(2)操作request范围的属性

有两个方法用于设置和获取request范围的属性

setAttribute(String  name , Object  value):将value设置成request范围的属性

Object  getAttribute(String  name):获取request范围的属性

 

(3)执行forward或include

request还有一个功能就是代替JSP提供的forward和include动作指令,HTTPServletRequest类提供了一个getRequestDispatcher(String  path)方法,其中path就是希望forward或者include目标路径,该方法返回RequestDispatcher,该对象提供了两个方法:

forward(ServletRequest  request , ServletResponse   response):执行forward

include(ServletRequest  request , ServletResponse   response):执行include

 

4、response对象

response对象代表服务器对客户端的响应,还可以使用response来重定向请求,以及用于向客户端增加Cookie

response响应生成非字符响应:对于需要生成非字符响应的情况,HTTPServletRequest接口提供了一个getOutputStream()方法,该方法返回响应输出字节流

重定向:与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因此重定向将生成第二次请求,HTTPServletResponse接口提供了一个sendRedirect(String  path)方法,该方法用于重定向到path资源,即重新向path资源发送请求。

增加Cookie:Cookie用于网站记录客户的某些信息,与session不同的是,Cookie会一直存放在客户端机器上,除非超出Cookie生命周期。增加Cookie是使用response内置对象完成,response对象提供了一个方法增加Cookie:void  addCookie(Cookie  cookie)。一般步骤为:创建Cookie实例,Cookie构造器为Cookie(String   name , String value),设置Cookie生命周期,向客户端写Cookie。访问客户端的Cookie使用request对象,该对象提供了一个getCookie()方法,该方法返回客户端机器上所有的Cookie组成的数组,遍历该数组的每个元素,找到希望访问的Cookie即可。

七    JSP2特性

JSP2主要增加了以下新特性:

       直接配置JSP属性

       表达式语言

       简化的自定义标签

       Tag文件语法

1、  配置JSP属性

JSP属性定义使用<jsp-property-group/>元素配置,主要包括四个方面:

是否允许使用表达式语言:使用<el-ignored/>元素确定,默认值为false,即允许使用表达式语言。

是否允许使用JSP小脚本:使用<scripting-invalid/>元素确定,默认值为false,即允许使用JSP小脚本。

声明JSP页面的编码:使用<page-encoding/>元素确定,配置元素后,可以代替每个页面里page指令contentType属性的charset部分。

使用隐式包含:使用<include-prelude/>和<include-coda/>元素确定,可以代替在每个页面里使用include编译指令来包含其他页面

 

2、  表达式语言

(1)表达式语言是一种简化的数据访问方式,使用表达式语言可以方便地访问JSP的隐含对象和JavaBeans组件,建议尽量使用表达式语言使JSP文件的格式一致,尽量避免使用JSP小脚本。表达式语言格式是:${expression}。

 

(2)表达式语言支持的算术运算符和逻辑运算符,表达式语言还支持div、mod等运算符,并且把所有的数值都当成浮点数处理。如果想在表达式语言的页面中正常输出“$”符号,则在“$”符号前加上转义字符“\”。

表达式语言可以直接获取请求参数值,可以获取页面中JavaBean的指定属性值,获取请求头及获取page、request、session、和application范围的属性值等。表达式语言包含以下11个内置对象

pageContext:代表该页面的pageContext对象,与JSP的pageContext内置对象相同。

                            pageScope:用于获取page范围的属性值

                            requestScope:用于获取request范围的属性值

                            sessionScope:用于获取session范围的属性值

                            applicationScope:用于获取application范围的属性值

                            param:用于获取请求的参数值

paramValues:用于获取请求的参数值,与param的区别在于,该对象用于获取属性值为数组的属性值

                            header:用于获取请求头的参数值

headerValues:用于获取请求头的参数值,与header的区别在于,该对象用于获取属性值为数组的属性值

                            initParam:用于获取请求Web应用的初始化参数

                            cookies:永不获取指定的Cookie值

(3)表达式语言的自定义函数

表达式语言除了可以使用的基本的运算符外,还可以使用自定义函数,通过自定义函数能够大大加强表达式语言的功能。自定义函数的步骤如下:

开发函数处理类:函数处理类就是普通类,这个类包含若干个静态方法,每个静态方法都可以定义成一个类。

使用标签库定义函数:定义函数的方法和定义标签的方法大致相似,在<taglib…/>元素下增加<tag../>元素用于定义自定义标签;增加<function…/>元素则用于定义自定义函数。每个<function…/>元素只要三个子元素即可:name(指定自定义函数的函数名)、function-class(指定自定义函数的处理类)、function-signature(指定自定义函数对应的方法)

在JSP页面的EL中使用函数:一样需要先导入标签库,然后使用函数。

 

(4)Tag File支持

Tag File是自定义标签的简化方法,使用Tag File可以无须定义标签处理类和标签库文件,但仍然可以在JSP页面中使用自定义标签。

下面以建立一个迭代器标签,步骤如下

       建立Tag文件,在JSP所支持的Tag File规范下,Tag File代理了标签处理类,它的格式类似于JSP文件。Tag File具有以下5个编译指令:taglib(作用与JSP文件中的taglib指令效果相同,用于导入其他标签库)、include(作用于JSP里面的include指令效果相同,用于导入其他JSP或静态页面)、tag(作用类似于JSP里面的page指令,有pageEncoding、body-content等属性,用于设置页面编码等属性)、attribute(用于设置自定义标签的属性,类似于自定义标签处理类中的标签属性)、variable(用于设置自定义标签的变量,这些变量将传给JSP页面使用。)代码示例:定义一个属性:<%@ attribute  name =”clolor”%>   定义一个属性名为color的变量。

       在页面中使用自定义标签时,需要先导入标签库,再使用标签。导入标签时,语法格式为:<%@ taglib  prefix=”tagPrefix”  tagdir = “ path ” %>

Tag File中有如下几个内置对象

       request:与JSP脚本中的request对应

       response:与JSP脚本中的response对应

       session:与JSP脚本中的session对应

       application:与JSP脚本中的application对应

       config:与JSP脚本中的config对应

       out:与JSP脚本中的out对应。

 

猜你喜欢

转载自blog.csdn.net/qq_40133908/article/details/82555603