转:include、jsp:forward等jsp中经常使用的标签和指令
时间 2019-12-05
标签
include
jsp
forward
中经
常使
用的
标签
指令
1
、
include
指令
做用:把多个文件中须要共享的代码放在单独的文件中,而后在须要的时候使用该指令引入这个文件。典型的应用,把网站的头部和版权信息放在单独的文件中,在其余文件中包含这两部分。
基本的语法格式:
<%@ include file="
目标文件
"%>
file
属性指出目标文件。
例:把
index.jsp
和
register.jsp
中的共同部分作成单独的文件
header.jsp
(后缀名不必定是
.jsp
),而后在
index.jsp
和
register.jsp
中调用。
header.jsp
中的内容以下:
<%@ page contentType="text/html;charset=gb2312"%>
<table align="center" width=780>
<tr height="100">
<td align="center"><h1>
电子书店
</h1></td>
</tr>
<tr>
<td align="center">
<!--
超连接的基本格式
-->
<a href="register.jsp">
注册
</a>
最新图书
最畅销图书
查询图书
修改密码
查询订单购物车
</td>
</tr>
<tr>
<td><hr></td>
</tr>
在
index.jsp
中引入
header.jsp
的代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ includefile="header.jsp"%>
<tr>
<td>
<table>
<tr>
<td>
<!--
登陆界面代码
-->
<form action="login_process.jsp"method="post">
<!--
主要是涉及提交信息,就要用到
form
,
action
决定了提交给哪一个文件处理
-->
用户名:
<input type="text"name="username" value="aaa"> <br>
口令:
<input type="password"name="userpass" value=""> <br>
<input type="submit" value="
登陆
"><inputtype="reset" value="
重写
">
</form>
</td>
<td>
欢迎光临咱们的书店!
</td>
</tr>
</table>
</td>
</tr>
</table>
运行过程:在转换的时候,当遇到
include
指令的时候会把
include
指令指向的目标文件的内容拷贝到当前位置,替换
include
指令,这样最后造成一个文件。而后才编译造成
class
文件,而后运行。
2
、
<jsp:forward>
标签
咱们使用登陆功能的模拟来介绍。
首先,使用
Java
代码完成判断,使用
<jsp:forward>
完成跳转,代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%
//
先获取用户输入的用户名和口令,而后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:forward page="success.jsp"/>
<%
}else{
%>
<jsp:forward page="index.jsp"/>
<%
}
%>
注意:无论跳转到
success.jsp
仍是
index.jsp
,地址栏都是处理文件的名字。
<jsp:forward>
的语法格式:
<jsp:forward page="
目标文件
"/>
page
属性指出转向的目标文件。最后的结束符为
“/>”
,斜杠不能省略。
另一个能够完成跳转的方式是采用
response.sendRedirect()
。
response
和
request
同样,都是内容对象,能够直接访问。修改上面的文件:
<%@ page contentType="text/html;charset=gb2312"%>
<%
//
先获取用户输入的用户名和口令,而后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
response.sendRedirect("success.jsp");
}else{
response.sendRedirect("index.jsp");
}
%>
<jsp:forward>
和
response.sendRedirect
的运行效果相同(针对上面的这个例子)。
相同点:都是转向目标文件。
不一样点:地址栏中显示的内容是不相同的,若是使用
<jsp:forward>
,地址栏显示当前文件的名字,若是使用
response
,地址栏显示的是转向后的文件的名字。执行过程不一样:使用
<jsp:forward>
至关于一次请求,使用
response
至关于两次请求。
使用
<jsp:forward>
的状况:
index.jsp
中输入用户名和口令,提交给
login_process.jsp
,服务器保存用户的输入信息,使用
<jsp:forward>
转向
success.jsp
以后,
success.jsp
还能够访问用户输入的信息,由于输入同一次请求。
使用
response
的请求:
index.jsp
中输入用户名和口令,提交给
login_process.jsp
,服务器保存用户的输入信息,使用
response
的
sendRedirect
方法至关于从新向服务器发送一次请求,这样上次的请求内容(用户名和口令)就不能共享了。
3
、
<jsp:include>
标签
把
index.jsp
中
<%@include="header.jsp"%>
替换成
<jsp:include page="header.jsp"/>
从运行效果上相同。
不一样点:
1
、两个文件,目标文件是单独运行的,当前文件运行到
<jsp:include>
标签的时候,转向执行标签所指向的目标文件,执行以后返回继续标签以后的内容。
2
、
<%@ include%>
指令是在编译(转换)的时候使用,
<jsp:include>
在运行的时候起做用。
程序中如何选用:要导入的内容是否是每次都执行,若是每次都执行的话,应该使用
<%@ include%>
,若是是在特定的条件下,应该使用
<jsp:include>
。例如,登陆以后要么转向
success.jsp
要么转向
index.jsp
,若是在程序中使用导入,应该用
<jsp:include>
。
4
、
<jsp:include>
和
<jsp:forward>
区别
把
login_process.jsp
中的
<jsp:forward>
替换成
<jsp:include>
:
<%@ page contentType="text/html;charset=gb2312"%>
<%
//
先获取用户输入的用户名和口令,而后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:include page="success.jsp"/>
<%
}else{
%>
<jsp:include page="index.jsp"/>
<%
}
%>
运行效果是相同的。可是有不一样点,修改代码以下:
<%@ page contentType="text/html;charset=gb2312"%>
处理文件的前半部分
<br>
<%
//
先获取用户输入的用户名和口令,而后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:include page="success.jsp"/>
<%
}else{
%>
<jsp:include page="index.jsp"/>
<%
}
%>
<br>
处理文件的后半部分
两次运行结果不相同。
分析缘由:
<jsp:forward>:
先执行标签以前的内容,遇到标签的时候转向执行目标文件,执行完不返回,显示的内容为目标文件的内容,标签以前的内容执行,可是不显示。标签以后的内容不会执行,固然更不会显示。
<jsp:include>
:先执行标签以前的内容,遇到标签转向执行目标文件,执行完返回,继续执行标签以后的内容,显示的内容为:标签以前的内容
+
目标文件的内容
+
标签以后的内容,标签的先后都执行,都显示。
5
、使用标准标签库(
JSTL
)完成登陆的判断过程
如何使用标签标签库:(
1
)获得标签库的实现文件,
jstl.jar
和
standard.jar
,放在
WEB-INF
下面的
lib
子文件夹。(
2
)在
JSP
文件中要声明标签库,经过
tablib
指令进行声明:
<%@ taglibprefix="c" uri="
http://java.sun.com/jsp/jstl/core"%
> (3)
使用标签:
<c:iftest=""> </c:if>
要完成判断,可使用标签标签库中的
c:if
标签。标签的基本格式:
<c:if test="">
条件成功要执行的内容
</c:if>
test
表示测试条件,测试条件能够写常量,能够是表达式语言(
EL
,主要用于输出),主要使用表达式语言。
例如:要判断用户提交的用户名和口令是不是
zhangsan
。
<c:if test="${param.username==\"zhangsan\"&& param.userpass==\"zhangsan\"}">
<jsp:forward page="success.jsp"/>
</c:if>
注意:添加完标准标签库以后,须要从新启动服务器。
6
、使用
session
保存登陆后的信息
在网站中设置了
application sessionrequest pageContext
对象保存内存中的信息。
application
是网站全部用户共享的存储变量的位置。
session
是网站为每一个访问网站的人建立的,每一个用户对应一个
session
,也是存放变量的位置。
request
是为每一个用户的每次请求设置的存储信息的位置,每次访问会有一个
request
。
pageContext
是每次访问的每一个页面对应一个。经常使用的
session
和
request
。屡次访问之间要共享信息可使用
session
,若是在某次访问的多个页面之间共享信息使用
request
(例如,使用
jsp:forwrad
转向的文件和当前文件就属于同一次请求)。
登陆后的用户信息应该放在
session
中。
要在这些范围中保存信息,可使用标准标签库中的
<c:set>
标签完成。
<c:set>
的基本语法格式:
<c:set var="
变量的名字
" scope="
范围
" value="
值
"/>
要把用户名放到
session
中:
<c:set var="username" scope="session"value="${param.username}"/>