JSP入门初级教程之预定义变量的使用 2 之Actions的使用 3 之实现页面跳转

JSP表达式和scriptlets中的代码,提供了8种自动定义的变量,有时称做implicit objects(固有对象)。它们是:request,response,out,session,application,config,pageContext,和 page.下面我们来详细的了解它们。

request

与request相联系的是HttpServletRequest类,使您可以得到request的参数(通过getParameter方法),request 的类型(GET,POST,HEAD,等等),和引入的HTTP头(cookies,Referer,等等)。严格来说,request是类ServletRequest的一个子类而不是HttpServletRequest类的,事实上,如果request的协议不是HTTP,那麽它几乎不会工作。

response

对客户端的response与HttpServletResponse 相连。请注意,因为输出流是放入缓冲的,所以可以设置HTTP状态码和response头,尽管在标准的servlets中不允许将之发送到客户端。

out

这里使用PrintWriter类来发送输出到客户端。然而,为了使response对象有效,可使用一个PrintWrite类的使用缓冲的版本JspWriter.使用session的属性page directive,您可以自己定义缓冲的大小,甚至可以在使用了buffer属性后关闭缓冲。也请注意,out仅用于scriptlets之中,因为JSP表达式自动的放入输出流,所以极少需要明确的声明out.

session

应用与request相联系的HttpSession类。因为session是自动创建的,即使没有一个引入的session,这种变量仍可绑定。有一个例外是,如果您用page directive关闭session,再试图使用session时将导致错误(在JSP页面向servlet转换时)。

application

使用ServeletContext类,通过使用getServletConfig()。getContext()得到。

config

是一个ServletConfig类的对象。

pageContext

这是JSP中的一个新的类PageContext,用于精练特定服务器的特点时使用,如提高JspWriters的执行效率。如果您通过这个类访问而不是直接的,您的代码将仍然运行在“规则”的JSP /servlet引擎 br>

page

在JAVA中不是很有用,它仅仅是用来保存在脚本的语言不是JAVA时的时间。

JSP入门初级教程之Actions的使用   JSP actions 使用您可以动态的插入一个文件,重用JavaBeans组件,前进到另一个页面,或为Java 插件生成一个HTML。可以使用的action 有:

(1) jsp:include –在页面被请求时包含进一个文件。

(2) jsp:useBean–找到或实例化一个JavaBean。

(3) jsp:setProperty–设置一个JavaBean属性。

(4) jsp:getProperty–将JavaBean的属性插入到输出。

(5) jsp:forward–让请求者可以向前到一个新的页面。

(6) jsp:plugin–用OBJECT或EMBED标签为Java plugins生成特定的浏览器的代码。

1、jsp:include Action

这个action使您可以在即将生成的页面上包含进一些文件:

<jsp:include page=”relative URL” flush=”true” />

与include directive不同,这个action是在页面被请求时才将文件包含进来,而,include directive则是在JSP页面被转换为servlet时包含文件。为了提高效率,include action做了一点小小的牺牲,即,它不允许被包含的页面含有一般的JSP代码(例如,不可设置HTTP头),但是,它具有显著的灵活性,如下面的JSP 代码,它实现将四个不同的片段插入如下的页面。每一次当标题改变的时候,您仅需修改这四个文件而无须更改主要的JSP 页面。

WhatsNew.jsp

<HTML>
<HEAD>
<TITLE> JSP教程</TITLE>
<BODY >
<CENTER>
<TABLE BORDER=5 BGCOLOR=”#EF8429″>
<TR><TH CLASS=”TITLE”> What”s New at Chinese comic sites</TABLE>
</CENTER>
<P>
Here is a summary of our four most recent news stories:
<OL>
<LI><jsp:include page=”news/Item1.html” flush=”true”/>
<LI><jsp:include page=”news/Item2.html” flush=”true”/>
<LI><jsp:include page=”news/Item3.html” flush=”true”/>
<LI><jsp:include page=”news/Item4.html” flush=”true”/>
</OL>
</BODY>
</HTML>

当然您可以定义自己? ML文件,但有一点请注意:

您应该将文件放到您的JSP目录下的news目录内。

jsp:useBean Action 的使用

一、 语法:

<jsp:useBean
id=”beanInstanceName”
scope=”page|request|session|application”
{ class=”package.class” |
type=”package.class” |
class=”package.class” type=”package.class” |
beanName=”{package.class | <%= expression %>}” type=”package.class”
}
{ /> |
> 其他元素
</jsp:useBean>
}

这个action使您能将一个JavaBean装入一个JSP页面。这是一个非常有用的能力,因为它使您可以使用可重用的JAVA类而不需牺牲性能。最简单的语法用于指定一个bean:

<jsp:useBean id=”name” class=”package.class” />

这通常意味着“实例化一个类的对象通过指定一个类,并将之与一个通过id指定名称的变量绑定”。然而,就象我们看到的,您可以指定一个scope属性来使得bean不仅仅与当前的页面相联系。在这种情形下,得到一个对已存在的bean的引用是非常有用的,而且,仅当没有相同的id和scope的bean存在时才创建一个新的。现在,您已有了bean,您可以通过jsp:setProperty来修改它,或者,通过使用之前用id指定的名字来使用scriptlet或明确的调用方法。当您说“这个bean有一个称为foo的X类型的属性”,您真正的意思是“这个类有一个称为getFoo的方法,它返回X类型的某类值,还有另一个方法称为setFoo,它以X为参数。”这jsp:setProperty action 将在下一单元详细的介绍,但是现在您既可以给出一个明确的值,给出一个属性来说明此值是从request的参数继承而来,也可以仅仅列出属性来标志此值应该从与属性名同名的参数继承而来。您可以通过调用适用的getXxx方法,或更普遍的,使用jsp:getProperty action,来得到已存在的JSP表达式或scriptlet属性。

请注意,为bean指定的类必须在服务器的规则的类路径下,而不是用来保留当改变时自动装载的类的路径。例如,在Java Web Server上,它和它所用的类必须到类的目录或在lib目录下的一个jar文件内,而不是在servlets的目录下。

JSP入门初级教程之实现页面跳转

JSP中使用jsp forward Action来实现页面的跳转功能。

语法:

<jsp:forward page=”{relativeURL|<%= expression %>}”/> 或
<jsp:forward page=”{relativeURL|<%= expression %>}”>
<jsp:param name=”parameterName”
value=”{parameterValue|<%= expression %>}”/>+</jsp:forward>

这个action使您可以将request向前到另外一个页面。它只有一个属性,page。Page应有一个相对的URL组成。这可以是一个静态的值或者是能够在被请求的时候计算得到的值,就如下面两个例子一般:

<jsp:forward page=”/utils/errorReporter.jsp”/>
<jsp:forward page=”<%= someJavaExpression %>”/>
!supportEmptyParas]>

现在以一个具体例子来说明:在test1.jsp中使用forward使其跳转到test2.jsp页面中。

Test1.jsp

<HTML>
<HEAD>
<TITLE>forward test</TITLE>
!supportEmptyParas]>
</HEAD>
!supportEmptyParas]>
<BODY BGCOLOR=”#FFFFFF”>
<!–跳转到test2.jsp–!>
<jsp:forward page=”/test2.jsp”/>
</BODY>
</HTML>
!supportEmptyParas]>

test2.jsp

<HTML>
<HEAD>
<TITLE> forward test </TITLE>
!supportEmptyParas]>
</HEAD>
!supportEmptyParas]>
<BODY BGCOLOR=”#FFFFFF”>
<%out.println(“这是jsp2.jsp页面产生出的输出”);%>
</BO ;
</HTML>
!supportEmptyParas]>

运行test1.jsp,可在浏览器中看见:”这是jsp2.jsp页面产生出的输出”的输出信息。但是如果你在test1.jsp和test2.jsp这两个页面中有参数传递怎么办呢?用get方式吧,不但总的长度有限制,使用现在十分不方便,而且有时候还不安全。其实我们完全可以使用jsp1.1中给forward里提供的para属性就可以解决。现以test3.jsp和test4.jsp来说明。

!supportEmptyParas]>
Test1.jsp
<HTML>
<HEAD>
<TITLE> forward test </TITLE>
!supportEmptyParas]>
</HEAD>
!supportEmptyParas]>
<BODY BGCOLOR=”#FFFFFF”>
<jsp:forward page=”/test4.jsp”>
<jsp:param name=”name” value=”powerman”/>
<jsp:param name=”address” value=” 北京西大街188号”/>
</jsp:forward>
</BODY>
</HTML>
!supportEmptyParas]>
test2.jsp
<HTML>
<HEAD>
<TITLE>forward test</TITLE>
!supportEmptyParas]>
</HEAD>
!supportEmptyParas]>
<BODY BGCOLOR=”#FFFFFF”>
<%
out.println(“这是jsp4.jsp页面产生出的输出”+”<br>”);
out.println(“姓名:”+request.getParameter(“name”)+”<br>”);
out.println(“地址:”+request.getParameter(“address”)+”<br>”);
!supportEmptyParas]>
%>
</BODY>
</HTML>

运行test3.jsp,可在浏览器中看见输出信息 :

“这是jsp4.jsp页面产生出的输出
姓名:powerman
地址:北京西大街188号”

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>