<h2>尾部內容</h2>
<%
System.out.println(request.getParameter("uname"));
System.out.println(request.getParameter("str"));
%>
zzj
JSP:java Server Page是動態網頁程式設計技術,可以使用java程式碼產生動態數據。
其實JSP就是一個servlet,第一次存取JSP的時候,JSP引擎都會講這個JSP翻譯成一個servlet,這個檔案存放在Tomcat中的work目錄中。
顯示註釋(瀏覽器中按F12能看到的註釋)
繼承HTML風格的註釋;<!–HTML註釋-- >
隱式註釋(瀏覽器中按F12不能看到的註釋)
a. jsp自己的註釋;<%–jsp註釋–%>
b. 繼承java風格的註釋;//單行註釋,/ *多行註釋 */
Java指令碼段
可以編寫Java語句,定義區域性變數。生成的程式碼在Servlet的service方法體中。
<%
// 定義區域性變數
int num = 100;
%>
宣告
可以宣告全域性變數、方法、類等生成的程式碼在Servlet的類體中。
<%!
// 全域性變數
int b = 10;
%>
輸出
可以輸出表示式,字面量、變數。生成的程式碼在Servlet的service方法體中,相當於out.write()。
<%=num%>
方法:將工具列、頭部資訊、尾部資訊都分成各個獨立的檔案,使用的時候直接匯入。
做法:分成多等分之後使用靜態包含、動態包含的方式。。
特點:相當於直接內容的貼上,只會生成一個原始碼檔案,不能出現同名變數。
語法:<%@include file=「相對路徑」%>
<%@include file="02-include靜態包含02.jsp"%>
<h2>中間內容</h2>
<%=a%>
<%@include file="02-include靜態包含03.jsp"%>
特點:相當於方法的呼叫,會生成多個原始碼檔案,可以出現同名變數,同名變數按先後順序會進行覆蓋。
語法:<jsp:include page=「路徑」>< /jsp:include>
<jsp:include page="03-include動態包含02.jsp"></jsp:include>
<h2>主體內容</h2>
<%
String str = "Hello";
%>
<%-- 傳遞參數 --%>
<jsp:include page="03-include動態包含03.jsp">
<jsp:param name="uname" value="admin"/>
<jsp:param name="str" value="<%=str%>"/>
</jsp:include>
注意:
include動態包含是雙標籤。
include動態包含可以傳遞參數。
< jsp:param name=「參數名」 value=「參數值」/> name不支援任何表達式,value支援表達式。
參數接受:request.getParameter(name);
若沒有參數傳遞,include雙標籤中不能有任何內容。
<jsp:include page="03-include動態包含02.jsp"></jsp:include>
<h2>主體內容</h2>
<%
String str = "Hello";
%>
<%-- 傳遞參數 --%>
<jsp:include page="03-include動態包含03.jsp">
<jsp:param name="uname" value="admin"/>
<jsp:param name="str" value="<%=str%>"/>
</jsp:include>
<h2>尾部內容</h2>
<%
request.getParameter("uname");//admin
request.getParameter("str");//Hello
%>
pageContext
只能在本頁面中獲取,頁面跳轉後無效。
request
請求轉發有效,重定向無效。
session
請求轉發和重定向都有效。瀏覽器關閉無效
application
只要伺服器不關閉都有效。
注意:儘量使用範圍小的域物件。
九大隱式物件中包含四大域物件。
pageContext、request、session、application、response、out(輸出流)、config(jsp的設定資訊)、page(如同java中的this)、exception (例外處理)
簡化了jsp程式碼。
<%
pageContext.setAttribute("uname","zhangsan");
request.setAttribute("uname","lisi");
session.setAttribute("uname","wangwu");
application.setAttribute("uname","zaholiu");
%>
預設獲取最小範圍的數據:${uname}<br>
page作用域:${pageScope.uname}<br>
request作用域:${requestScope.uname}<br>
session作用域:${sessionScope.uname}<br>
application作用域:${applicationScope.uname}<br>
根據集合的下標獲取。
<%
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>
獲取集合的長度:${list.size()} <br>
獲取指定下標的值:${list[0]}<br>
通過key值直接獲取。
<%
Map map = new HashMap();
map.put("aaa", "111");
map.put("bbb", 2222);
map.put("ccc-a", 333);
request.setAttribute("map", map);
%>
獲取指定key的value:${map.aaa} -- ${map["bbb"]} <br>
<%
User user = new User();
user.setUserId(1);
user.setUname("zhangsan");
user.setUpwd("123456");
Student student = new Student();
student.setId(1);
student.setStuName("ncdx");
user.setStudent(student);
request.setAttribute("user",user);
%>
獲取JavaBean物件:${user} <br>
<%-- 屬性欄位必須提供get方法 --%>
獲取JavaBean物件的屬性:${user.getUname()} -- ${user.uname} -- ${user.student.stuName}<br>
判斷域物件是否爲空。爲空返回true,不爲空返回false
request.setAttribute("str1","");
request.setAttribute("str2",null);
request.setAttribute("str3","Hello");
List<String> list1 = null;
List<String> list2 = new ArrayList<>();
List<String> list3 = new ArrayList<>();
list3.add("aaa");
list3.add("bbb");
list3.add("ccc");
request.setAttribute("list1", list1);
request.setAttribute("list2", list2);
request.setAttribute("list3", list3);
Map<String,String> map1 = null;
Map<String,String> map2 = new HashMap<>();
Map map3 = new HashMap();
map3.put("aaa", "111");
map3.put("bbb", 2222);
map3.put("ccc-a", 333);
request.setAttribute("map1", map1);
request.setAttribute("map2", map2);
request.setAttribute("map3", map3);
字串:${empty str1} -- ${empty str2} -- ${empty str3} <br><!--true,true,false-->
List:${empty list1} -- ${empty list2} -- ${empty list3}<br><!--true,true,false-->
Map:${empty map1} -- ${empty map2} -- ${empty map3}<br><!--true,true,false-->
javabean中
User user1 = null;
User user2 = new User();
User user3 = new User();
user3.setUserId(1);
request.setAttribute("user1", user1);
request.setAttribute("user2", user2);
request.setAttribute("user3", user3);
JavaBean:${empty user1} --${empty user2} --${empty user3} <br><!--true,false,false-->
${a == b }
${c == d }
${c eq d }
${a == 5 }
${c == 'aa' }
jsp的標準標籤庫,最重要的是用於迭代集合以及格式化日期等。
使用JSTL要記得匯入兩個jar包,使用maven的時候不用導包,它會自動生成一個倉庫。
<%
int num = 10;
request.setAttribute("num",num);
int score = 60;
request.setAttribute("score", score);
%>
<c:if test="${num>1}">
<h3>num值大於1</h3>
</c:if>
<c:if test="${score<60}">
<h3>不及格</h3>
</c:if>
<c:if test="${score==60}">
<h3>剛剛及格</h3>
</c:if>
<c:if test="${score>60}">
<h3>哎喲不錯哦!</h3>
</c:if>
類似於switch、case、default關鍵字。
<%
int num = 10;
request.setAttribute("num",num);
int score = 60;
request.setAttribute("score", score);
%>
<c:choose>
<c:when test="${score < 60}">
<h3>你個小渣渣!</h3>
</c:when>
<c:when test="${score == 60}">
<h3>分不在高,及格就行!</h3>
</c:when>
<c:otherwise>
<h3>哎喲不錯哦!</h3>
</c:otherwise>
</c:choose>
forEach標籤
<c:forEach var="i" begin="1" end="10">
${i}
</c:forEach>
<br>
<%
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>
<c:forEach var="str" items="${list}">
${str}
</c:forEach><!--常用-->
格式化日期:(日期型別轉化爲字串型別)
<%
request.setAttribute("date1",new Date());
%>
${date1}<br>
<fmt:formatDate value="${date1}" type="date"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="time"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="both"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="date" dateStyle="FULL"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" type="date" dateStyle="short"></fmt:formatDate><br>
<fmt:formatDate value="${date1}" pattern="yyyy-MM-dd"></fmt:formatDate>
字串型別轉化爲日期型別:
<%
request.setAttribute("str1","2020-08-09");
%>
<fmt:parseDate value="${str1}" type="date" /> <br>
<fmt:parseDate value="2020/01/06" pattern="yyyy/MM/dd" /> <br>