JSP全名為Java Server Pages,java服務器頁面。JSP是一種基于文本的程序,其特點就是HTML和Java代碼共同存在!
JSP是為了簡化Servlet的工作出現的替代品,Servlet輸出HTML非常困難,JSP就是替代Servlet輸出HTML的。
String s = "HelloWorda"; out.println(s);
JSP也是Servlet,運行時只有一個實例,JSP初始化和銷毀時也會調用Servlet的init()和destroy()方法。另外,JSP還有自己初始化和銷毀的方法
JSP代碼可以分為兩部分:
JSP腳本
<jsp:scriptlet> String s = "HelloWorld"; out.println(s); </jsp:scriptlet>
JSP注釋
<%--這是JSP注釋--%> <%--%> //這是java的當行注釋 // /*這是java的多行注釋*/ /**/
JSP指令
JSP指令用來聲明JSP頁面的相關屬性,例如編碼方式、文檔類型等等
JSP指令的語法:
<%@指令 屬性名="值" %>
page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page contentType="application/msword;charset=UTF-8" language="java" %> <html> <head> <title>簡單使用JSP</title> </head> <body> 1111 </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %> <html> <head> <title>該頁面出錯了!</title> </head> <body> <%--模擬頁面出錯了!!!--%> <% int result = 2 / 0; %> 你好呀 </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> <html> <head> <title>友好提示頁面</title> </head> <body> 服務器正忙著呢! </body> </html>
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.jsp</location> </error-page>
include指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁頭</title> </head> <body> 我是頁頭 <br> <br> <br> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁尾</title> </head> <body> 我是頁尾 </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>包含頁頭和頁尾進來</title> </head> <body> <%@include file="head.jsp" %> <%@include file="foot.jsp" %> </body> </html>
taglib指令
JSP行為
JSP行為(JSP Actions)是一組JSP內置的標簽,只書寫少量的標記代碼就能夠使用JSP提供豐富的功能,JSP行為是對常用的JSP功能的抽象和封裝。
為什么我不把它直接稱為JSP標簽呢?我把這些JSP內置的標簽稱之為JSP行為,能夠和JSTL標簽區分開來。當然了,你也可以把它稱之為JSP標簽,你不要搞混就行了。我個人喜歡把這些JSP內置標簽稱之為JSP行為。
include行為
<jsp:include page=""/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>包含頁頭和頁尾進來</title> </head> <body> <jsp:include page="head.jsp"/> <jsp:include page="foot.jsp"/> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁頭</title> </head> <body> <% String s = "zhongfucheng"; %> 我是頁頭呀 <br> <br> <br> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁尾</title> </head> <body> <% String s = "zhongfucheng"; %> 我是頁尾呀 </body> </html>
param行為
forward行為
<jsp:forward page=""/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>訪問1.jsp就跳轉到head.jsp</title> </head> <body> <jsp:forward page="head.jsp"/> </body> </html>
<jsp:forward page="head.jsp"> <jsp:param name="username" value="zhongfucheng"/> </jsp:forward>
<% String ss = request.getParameter("username"); %> 獲取到的參數是: <%=ss%>
directive行為
<jsp:directive.include file="head.jsp"></jsp:directive.include> <jsp:directive.include file="foot.jsp"></jsp:directive.include>
javaBean行為
<jsp:useBean id=""/> <jsp:setProperty name="" property=""/> <jsp:getProperty name="" property=""/>
文章來源:https://dwz.cn/OtXvyvh3
作者:Java3y
開發過程中,有些功能是一直可以重復使用的,這樣的頁面我們可以做成公共的,供每個頁面適用,那么就需要我們在使用的時候做一下嵌套。
例如:這樣一個頁面中:
上半部分是公共的:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fund" uri="/WEB-INF/tag/fund.tld"%>
<div class='box-content box-double-padding'>
<form class='form form-horizontal' id="selectForm" action="${pageContext.request.contextPath}/admin/trade/payByCard" method="post" style='margin-bottom: 0;'>
<input id="urlParam" name="urlParam" type='hidden' value="${param.pageTitle}" />
<div class='row-fluid'>
<div class="span6 box">
<label class='control-label'>客戶類型</label>
<div class='controls'>
<span class="control-text">
<select class='input-block-level' id='custType' name="custType" validate="required:true">
<fund:dictOptions dictId="301001" value="${ map['custType'] }"/>
</select>
<i class="form-tips text-error">*</i>
</span>
</div>
</div>
<div class="span6 box">
<label class='control-label'>資金卡號</label>
<fund:appParam keyName="pay_mode" keyValue="2">
<div class='controls'>
<input class="form-control" id="accNo" name="accNo" autocomplete="off" value="${map['accNo']}" type='text' validate="required:true"/>
<i class="form-tips text-error">*</i>
</div>
</fund:appParam>
<div class='controls'>
<button class='btn btn-default' id="selectBtn" mode='submit' type='submit'>刷卡</button>
</div>
</div>
</div>
<div class='row-fluid'>
<div class="span6 box">
<label class='control-label'>基金交易賬戶</label>
<div class='controls'>
<input class="form-control" id="financeAcc" name="financeAcc" autocomplete="off" value="${map['financeAcc']}" type='text' disabled/>
</div>
</div>
<div class="span6 box">
<label class='control-label'>風險等級</label>
<div class='controls'>
<%-- <select class='input-block-level' id='riskLevel' ajaxValue="${riskLevel}" name="riskLevel"> --%>
<%-- <fund:dictOptions dictId="301005" value="${map['riskLevel']}"/> --%>
<!-- </select> -->
<input class="form-control" id="riskLevel" name="riskLevel" autocomplete="off" value="${map['riskLevel']}" type='text' disabled/>
</div>
</div>
</div>
</form>
</div>
<script type="text/javascript">
</script>
在另一個 頁面嵌套的時候只需要把頁面加進去就可以了:
<jsp:include page="../../includes/tradeCommon.jsp" flush="true" ></jsp:include>
這樣,就實現了一個jsp頁面嵌套公共的jsp頁面。
JSP表達式語言(EL)使得訪問存儲在JavaBean中的數據變得非常簡單。JSP EL既可以用來創建算術表達式也可以用來創建邏輯表達式。在JSP EL表達式內可以使用整型數,浮點數,字符串,常量true、false,還有null。
一個簡單的語法
典型的,當您需要在JSP標簽中指定一個屬性值時,只需要簡單地使用字符串即可:
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL允許您指定一個表達式來表示屬性值。一個簡單的表達式語法如下:
${expr}
其中,expr指的是表達式。在JSP EL中通用的操作符是"."和"[]"。這兩個操作符允許您通過內嵌的JSP對象訪問各種各樣的JavaBean屬性。
舉例來說,上面的<jsp:setProperty>標簽可以使用表達式語言改寫成如下形式:
<jsp:setProperty name="box" property="perimeter"
value="${2*box.width+2*box.height}"/>
當JSP編譯器在屬性中見到"${}"格式后,它會產生代碼來計算這個表達式,并且產生一個替代品來代替表達式的值。
您也可以在標簽的模板文本中使用表達式語言。比如<jsp:text>標簽簡單地將其主體中的文本插入到JSP輸出中:
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>
現在,在<jsp:text>標簽主體中使用表達式,就像這樣:
<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>
在EL表達式中可以使用圓括號來組織子表達式。比如${(1 + 2) * 3}等于9,但是${1 + (2 * 3)} 等于7。
想要停用對EL表達式的評估的話,需要使用page指令將isELIgnored屬性值設為true:
<%@ page isELIgnored ="true|false" %>
這樣,EL表達式就會被忽略。若設為false,則容器將會計算EL表達式。
EL中的基礎操作符
EL表達式支持大部分Java所提供的算術和邏輯操作符:
操作符 | 描述 |
---|---|
. | 訪問一個Bean屬性或者一個映射條目 |
[] | 訪問一個數組或者鏈表的元素 |
( ) | 組織一個子表達式以改變優先級 |
+ | 加 |
- | 減或負 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 測試是否相等 |
!= or ne | 測試是否不等 |
< or lt | 測試是否小于 |
> or gt | 測試是否大于 |
<= or le | 測試是否小于等于 |
>= or ge | 測試是否大于等于 |
&& or and | 測試邏輯與 |
|| or or | 測試邏輯或 |
! or not | 測試取反 |
empty | 測試是否空值 |
JSP EL中的函數
JSP EL允許您在表達式中使用函數。這些函數必須被定義在自定義標簽庫中。函數的使用語法如下:
${ns:func(param1, param2, ...)}
ns指的是命名空間(namespace),func指的是函數的名稱,param1指的是第一個參數,param2指的是第二個參數,以此類推。比如,有函數fn:length,在JSTL庫中定義,可以像下面這樣來獲取一個字符串的長度:
${fn:length("Get my length")}
要使用任何標簽庫中的函數,您需要將這些庫安裝在服務器中,然后使用<taglib>標簽在JSP文件中包含這些庫。
JSP EL隱含對象
JSP EL支持下表列出的隱含對象:
隱含對象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
param | Request 對象的參數,字符串 |
paramValues | Request對象的參數,字符串集合 |
header | HTTP 信息頭,字符串 |
headerValues | HTTP 信息頭,字符串集合 |
initParam | 上下文初始化參數 |
cookie | Cookie值 |
pageContext | 當前頁面的pageContext |
您可以在表達式中使用這些對象,就像使用變量一樣。接下來會給出幾個例子來更好的理解這個概念。
pageContext對象
pageContext對象是JSP中pageContext對象的引用。通過pageContext對象,您可以訪問request對象。比如,訪問request對象傳入的查詢字符串,就像這樣:
${pageContext.request.queryString}
Scope對象
pageScope,requestScope,sessionScope,applicationScope變量用來訪問存儲在各個作用域層次的變量。
舉例來說,如果您需要顯式訪問在applicationScope層的box變量,可以這樣來訪問:applicationScope.box。
param和paramValues對象
param和paramValues對象用來訪問參數值,通過使用request.getParameter方法和request.getParameterValues方法。
舉例來說,訪問一個名為order的參數,可以這樣使用表達式:${param.order},或者${param["order"]}。
接下來的例子表明了如何訪問request中的username參數:
<%@ page import="java.io.*,java.util.*" %>
<%
String title = "Accessing Request Param";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${param["username"]}</p>
</div>
</body>
</html>
param對象返回單一的字符串,而paramValues對象則返回一個字符串數組。
header和headerValues對象
header和headerValues對象用來訪問信息頭,通過使用 request.getHeader方法和request.getHeaders方法。
舉例來說,要訪問一個名為user-agent的信息頭,可以這樣使用表達式:${header.user-agent},或者${header["user-agent"]}。
接下來的例子表明了如何訪問user-agent信息頭:
<%@ page import="java.io.*,java.util.*" %>
<%
String title = "User Agent Example";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>
運行結果如下:
header對象返回單一值,而headerValues則返回一個字符串數組。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。