现在的位置: 首页 > 综合 > 正文

javaEE JSP学习

2017年10月23日 ⁄ 综合 ⁄ 共 6727字 ⁄ 字号 评论关闭

JSP---Java Server Pages

拥有servlet的特性与优点(本身就是一个servlet)

直接在HTML中内嵌JSP代码

JSP程序由JSP Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行

只有当客户端第一次请求JSP时,才需要将其转换,编译

像html一样使用它就行,html能放在什么位置,jsp就能放在什么位置。

可以放在webapps的根目录下面,可以放在webapps的子目录下面,不可以放在WEB-INF下面,不用配置直接可以使用,和

html一样。


优点:

   优良的性能:

    优于CGI,PHP,ASP

   平台无关性:

    操作系统无关,Web服务器无关

   可扩展性:

    tag的扩展机制,简化页面开发


JSP传统语法(目录):

   Declaration:声明

   Scriptlet:小程序段

   Expression:表达式

   Comment:注释

   Directives:编译指令

   Action:动作指令

   内置对象:对象

JSTL

JSF

其他taglib(如:struts)


<%= ...... %>:把中间的值原封不动地输出出来


JSP传统语法详解:

脚本元素包括:小程序段,声明,表达式,JSP2.0增加了EL表达式,作为脚本元素的另一个选择。

1 Declaration:声明

用于声明在其他脚本元素中可以使用的变量,方法和类,必须是完整的声明语句,遵循java语言的语法

基本语法:

<%! %>或<%  %>

说明:<%! %>这里声明的变量是成员变量(实例变量,类变量static)。一个jsp页面仅保存一份。方法都会被保留成唯一的一份,

直到服务器停止执行。线程不安全。

 <%  %>这里声明的变量是局部变量,每次jsp被客户端访问或者刷新都会被重置。线程安全。

例:

<%! 

int i;

public void setName(){... ...}

%>


2 Scriptlet 小程序段:

基本语法:

<% 程序代码区 %>

可以放入任何的Java程序代码

例:

<% 

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

... ....

}

%>


3 Comment 注释:

<%--... ...--%>//客户端看不见

<%//... ...%>

<%/*... ...*/%>

<!--... ...-->//客户端可以看见


4 Expression 表达式:

基本语法:<%=... ...%>

=后面必须是字符串变量或者可以转换成字符串的表达式

不需要以;结束

只有一行

例:

<%="hello world"%>

<%=i+1%>

<%=request.getParameter("name")%>


5 Directive 编译指令,相当于在编译期间的命令,程序还没有开始运行,不包含控制逻辑,不会产生任何可见的输出:

格式:

<%@ 指令类别 属性1=“属性值1” ... 属性n=“属性值n” %>

<%@Directive 属性="属性值"%>

常见的Directive:

page:用来设定页面的属性和相关的功能,可以用来进行导入需要类、指明jsp输出内容的类型、指明处理异常的错误页面等操作,一般将page指令放在JSP文件顶部

基本格式:

<%@page language="script language" //现在只有java

 
extends="className"|  //一般非常少用

 
import="importList"|  //引入哪些包或类,相当与java中的import语句,引入多个类用,隔开。

 
buffer="none|kb size"| //none不缓冲,默认8k,即先把页面写入内存缓冲,然后一次性地显示整个页面,
指定out对象使用缓冲区的大小。

 
session="true|false"|  //是否可以使用session,默认true

 
autoFlush="true|false"|  //缓冲器是否自动清除,默认true,这个页面从服务器创建完了是否自动输出到客户端

 
isThreadSafe="true|false"| //默认false,不需要指定,

 
info="infoText"|  //任何字符,相关的描述信息,通过servlet接口的getServletInfo()方法来得到。

 
errorPage="errorPageURL"|  //页面出错以后显示的页面,如果一个页面通过该属性定义了错误页面,那
么在web.xml文件中定义的任何错误页面将

会被使用

 
isErrorPage="true|false"|  //当前页面是不是一个显示错误的页面

 
contentType="contentTypeInfo"| //用于指定响应的JSP页面的MIME类型和字符编码,一般写
text/html;charset=gb2312,如:contentType="MIME类

型;charset=字符编码",此处设置字符编码和下面的pageEncoding属性作用相同

 
pageEncoding="peinfo"|//指定JSP页面使用的字符编码,和contentType指定的字符编码共用时优先使用
这个属性定义的字符编码

 
isELIgnored="true|false"//定义在JSP页面中是否执行或忽略EL表达式
  

%>

include:将指定的JSP程序或者HTML文件包含进来

格式:<%@include file="fileURL"%>

JSP Engine会在JSP程序的转换时期(即在编译前)先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。

一般用于包含非动态的代码,不接受参数的代码。

file属性的值被解释为相对于当前JSP文件的URL。

获取父页面的变量参数:这种包含页面的方式可以直接获取父页面声明的变量的值。

限制:不能向fileURL中传递参数,不能:abc.jsp?user=aaa

原文件和被包含的文件可以互相访问彼此定义的变量和方法。


taglib:允许页面使用用户定制的标签

格式:<%@taglib (uri="tagLibraryURI"|tagdir="tagDir") prefix="tagPrefix" %>

属性:

uri:定位标签库描述符的位置,可以是绝对或相对的uri


6 Action 动作指令,在运行期间的指令,本质上是一段java代码:

在页面被转换为servlet期间,当JSP遇到这个标签,就用预先定义的对应于该标签的java代码来代替它。

常见的有:

jsp:useBean 通过jsp:useBean,可以在JSP中使用定义好的Bean

Bean的基本要素:

必须要有一个不带参数的构造器,在JSP元素创建Bean时会调用空构造器

Bean类应该没有任何公共实例对象,也就是说,不允许直接访问实例变量,变量名称首字母必须小写

通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改为大写

在jsp里面使用javabean,要求这个bean应该放在包里面,不要写裸体类。

基本用法:

<jsp:useBean id="beanName" scope="page|request|session|application" class="package.BeanClass" 

type="typeName" /

//id:指用class所指的javabean类new出来的javabean对象。相当于<@ page import="package.*"><% BeanClass 

beanName = new BeanClass() %>

//scope:默认是page,这个bean new出来之后就是一个局部变量,页面一没有了,方法就结束了,局部变量就消

失了,其他的页面访问不了,只对这个jsp有

效。

//request指在request范围之内有效。session指在用户整个连接过程中有效。application指把javabean放在了

servletContext里面,在整个servletContext生存

期间内有效,即对整个网站均有效,只要程序不退出,永远存在,客户端共享。

//type:指把new出来的javabean当成什么对象来用,Bean类实例类型,可以是本类,或其父类,或其实现的接

口,默认为本类。如:<% Object cb = new

 BeanClass() %>,这里将javabean当成Object来用。 相当于<jsp:useBean id="beanName" class="package.beanClass" 

type="java.lang.Object" />

//class:Bean类名称

<jsp:useBean id="couneterBean" scope="request" scope="requset" class="bean.CounterBean">对于scope为

request中的jsp:useBean相当于:

<%--

bean.CounterBean CounterBean = 

(counterBean)request.setAttribute("counterBean");

if(counterBean == null) {

counterBean = new bean.CounterBean();

request.setAttribute("counterBean",counterBean);

}

--%>

<jsp:useBean id="counterBean" scope="session" class="bean.CounterBean" />对于scope为session的

jspL:useBean相当于:

<%--

bean.CounterBean counterBean = (counterBean)session.getAttribute("counterBean");

if(counterBean == null) {

couneterBean = new bean.CounterBean();

session.setAttribute("counterBean",counterBean);

}

--%>


jsp:setProperty

例如:<jsp:setProperty name="beanName" property="propertyName" value=""/>//首先必须把这个javabean初始化

了,这句话相当于:<%

 beanName.setProperty(value) %>

name属性:bean实例的名字,它必须是已经在<jsp:useBean>元素中通过id属性定义的名字

property属性:被设置的属性的名字,可以设置为*

param属性:通过param指定表单元素的名称,通过property指定bean属性的名称,由此建立这两个变量的关联,可以

写在要使用<jsp:getProperty>的时候。

<jsp:setProperty name="entry property="itemID" param="itemID" />相当于<jsp:setProperty name="entry property="itemID" value="

<%=request.getParameter(itemID)%>" />

注意:指定请求对象的名字。在设置bean属性时,如果请求参数的名字和bean属性的名字不同,可以用param来

指定参数的名字,如果没有使用param,那

么就认为请求参数的名字和bean属性的名字相同。

value属性:指定要赋给bean属性的值,可以使用一个请求时属性表达式作为value的值,不能同时出现value和param

通过*来设置所有属性和输入参数之间的关联。

   例如:<jsp:useBean id="hello" class="bean.HelloBean" scope="request">

   <jsp:setProperty name="hello" property="*" />

    </jsp:useBean>

   //用于前一个页面提交到这个页面时可以这样用,scope为request,前面一个页面表单提交的 name属性的表单项 为对

应request的参数,用于设置javabean对象

里面所有的关于提交的属性的值

jsp:getProperty

   例如:<jsp:getProperty name="beanName" property="propertyName" />//相当于<%=beanName.getProperty()%>或<% 

out.write(beanName.getProperty()) %>

<jsp:useBean ...>

<jsp:setProperty...>

<jsp:getProperty...>

</jsp:useBean>


jsp:include

用于动态包含JSP程序或HTML文件等除非这个指令被执行到,否则它(被包含进来的jsp代码或html代码)是不会被Tomcat等JSP Engine编译的

对应于servlet的javax.servlet.RequestDispatcher类的include()方法

属性:

page:指定被包含资源的相对路径,该路径是相对于当前JSP页面的URL

flush:

格式:

<jsp:include page="URLSpec" flush="true"/>//flush默认为true,不要改为false,flush指另外一个网页的内容赶快输出

<jsp:include page="URLSpec" flush="true">

<jsp:param name="ParamName" value="paramValue"/>

</jsp:include>

request对象包含了原始的参数和用<jsp:param>指定的新参数。可以使用getParameter()返回参数。

和编译指令include的区别:

include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行,而include指令在

转换时期是不会被编译的,只有在客户端请

求时期如果被执行到才会被动态的编译载入

include不能带参数,而<jsp:include>可以


jsp:param

用来设定include文件时的参数和对应的值,它和<jsp:include>,<jsp:forward>和<jsp:plugin>一起使用。

属性:

name:给出参数的名字

value:给出参数的值,可以是一个表达式

例如:

<jsp:include page="divide.jsp" flush="true">

<jsp:param name="v1" value="<%=value1%>">

<jsp:param name="v2" value="<%=value2%>">

</jsp:include>

//这里被包含的页面divide.jsp这个页面里面可以通过request.getParameter("v1")获得参数的值。



jsp:forward

jsp:param

用于将当前的请求转发给一个静态的的资源,JSP页面或者servlet。这个动作的作用同RequestDispatcher接口的forward()方法作用是一样的。

page:是相对于当前JSP页面的URL

格式:

<jsp:forward page="urlSpec" flush="true"/>

<jsp:forward page="urlSpec">

<jsp:param name="paramName" value="paramValue"/>

</jsp:forward>

对应的servlet代码:<% pageContext.forward("abc.jsp"); %>

<jsp:param>用于指定参数和其对应的值

forward的页面和forward到的页面是同一个request

与此相对应的是

reponse.sendRedirect//也用于转发页面

jsp:forward与response.sendRedirect的区别:

jsp:forward转发页面:转发完成后浏览器看到的还是第一个转发前的页面,转发发生在服务器端,所以请求的

request与转发给 转发页面的request是同一个

request

response.sendRedirect转发页面:转发完成后浏览器看到的是转发到的页面,第一个页面收到转发请求后先是返

回浏览器,然后浏览器在重新发起一个

request给第二个转发后的页面,所以第一次请求的request与第二次转发给转发页面的request不是同一个request


jsp:plugin

applet

抱歉!评论已关闭.