標籤:
1.jsp:java server pages,java伺服器端的頁面
sun公司提供開發動態網站的技術servlet jsp
jsp會編譯成servlet,會放到tomcata的work目錄
jsp的包含:html+java代碼+jsp自身指令
有三種方式:
<%! %>
<% %>
<%= %>
題目
<%=x %>//把成員變數x的值輸出
<% x=5; %>//把成員x變數賦值為5
<% int x = 10; %>//在service方法裡面定義一個x值為10;
<% this.x = 20; %>//把成員變數x的值賦值20
<%=x %>//把方法裡面定義的變數x輸出
<%! int x = 0; %> //定義一個成員變數x值是0
A.0 10 B.10 20 C.0 20 D.20 0
最終的結果是 0 10
2.jsp的注釋
jsp:java server pages,java伺服器端的頁面
在jsp裡面可以寫html注釋,可以寫java注釋,可以寫jsp自身的注釋
三類注釋在jsp執行過程中,都會有
<!-- --><%-- jsp的注釋--%>java的三隻注釋
jsp編譯成seervlet之後,html存在,java注釋存在,但是jsp注釋就不存在
servlet顯示在頁面上,html注釋存在,java注釋和jsp注釋都沒有了
<!-- html注釋 -->
<!-- java的注釋 -->
<%
//單行注釋
/*多行注釋
*/
/**文檔注釋
*/
%>
<!-- jsp的注釋 -->
<%--jsp的注釋 --%>
3.jsp的指令
文法:<%@ 指令的名稱 屬性="屬性值" %>
jsp的品質包含三個指令:
page:設定jsp頁面的資訊,<%@ page 屬性="屬性值" %>
page指令裡面的屬性:
language:支援的語言類型,現在只有java,
extends:jsp編譯成的servlet會繼承哪個類:預設HttpJspBase
session:在jsp裡面是否可以直接使用session對象,session屬性值true | false
import:倒入一個包,可以寫在一起用逗號隔開
可以分開匯入包
<%@ page import="java.util.Date"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.List"%>
可以寫在一起
<%@ page import="java.util.List,java.util.ArrayList"%>
buffer:輸出的緩衝區大小 8kb;
autoFulsh:超出緩衝區是否正常使用
erroPage:如果當前的jsp頁面出現異常,到錯誤頁 errorPage="錯誤頁面"
isErroPage:在錯誤頁面中,是否可以顯示錯誤資訊。這個屬性一般是程式員偵錯工具時候使用,把程式給客戶時候,
這個屬性一定設定成false
值 true和false,預設值是false,不會產生下面的代碼
當在錯誤頁面中,設定這個屬性的值true之後,產生的servlet裡面,多出幾行代碼
java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
contentType:jsp最終編譯成servlet,最終使用瀏覽器編碼
pageEncoding:jsp編譯成servlet,設定使用的編碼
isElIgnored:jsp裡面死否忽略el運算式,改成true,寫el運算式,把它當成運算式
include:jsp包含其他的jsp頁面,
jsp包含其他的jsp頁面寫法:<%@ include file="包含的頁面">被包含的頁面不需要寫其他的內容,只要寫包含的內容,最終只編譯成一個servlet
靜態包含的過程,相當於代碼複製:
包含不能傳遞參數,不能是變數,只需要寫檔案內容
taglib:引入標籤庫
替代掉<%%>寫法:<%@ tagilb="標籤庫" prefix="標籤名稱"%>
4.jsp的內建對象
在jsp裡面的可以直接使用的對象
resquest:HttpServletRequest裡面代表請求,擷取提交的參數,是一個域對象,設定值和取值
response:相當於HttpServletResponse,代表響應,向頁面輸出內容
session:相當於servlet裡面的HttpSession,也是域對象,範圍會話
congfig:相當於ServletConfig,擷取servlet名稱,擷取初始化參數
application:相當於 servlet裡面servletContext,域對象,範圍整個web項目,擷取全域初始化參數
exception:擷取異常欣喜,getMessage方法,需要把isErrorPage設定成true
page:當成啟動並執行servlet對象
out:向頁面輸出內容,out.write()代碼,out使用的是Jspwrite對象,使用reaponse.getwrite()使用printWrite對象,也可以向頁面輸出
輸出機制:首先產生兩個緩衝區,一個是out緩衝區,一個是response緩衝區,out不會直接輸出,首先把內容放到out緩衝區,然後再放到response的緩衝區,最終通過緩衝區想頁面輸出
pageContext:
父類 JspContext
pageContext:只能在jsp裡面使用,servlet裡面沒有頁面的概念
作用範圍:當前的jsp頁面
設定值 setAttribute(java.lang.String name, java.lang.Object value)
擷取值 getAttribute(java.lang.String name)
代碼
<!-- 向pageContext域裡面設定值 -->
<%
pageContext.setAttribute("page1", "itcastpage1");
%>
<!-- 使用傳統方式擷取 -->
<%=pageContext.getAttribute("page1") %>
<hr/>
<!-- 使用el運算式擷取 -->
${page1 }
pageContext:可以向其他域對象裡面設定值
setAttribute(name,value,scope)第一個參數:名稱 第二個參數:值 第三個參數:網域名稱稱
pageContext:可以向其他域對象裡面擷取值 1.${名稱}就可以擷取值 2.兩個參數:第一個參數是域對象的名稱,第二個參數是哪個域對象
findAttribute():表示得到域對象裡面最小的值
pageContext:可以擷取其他的八個內建對象 :pageContext.getSeesion
四個域對象
pageContext : 範圍是jsp頁面,這個對象只能在jsp裡面使用
request :範圍一次請求,經常和轉寄一起使用
session :範圍一次會話
application:範圍整個web項目
四個域對象都使用setAttribute設定值,使用getAttribute擷取值
5.jsp的動作標籤
在jsp裡面有6個動作標籤:
<jsp:動態標籤名稱 屬性="屬性值"></jsp:動態標籤名>
<jsp:forward>:表示轉寄的操作
- jsp:forward page="轉寄到路徑 不要帶項目名稱"></jsp:forward>
- <!-- 使用jsp裡面的forward的動作標籤 -->
<jsp:forward page="/jsp/hello.jsp"></jsp:forward>
<jsp:include>:表示包含
<jsp:param>:表示頁面傳遞參數
* 代碼 <!-- 使用jsp裡面的forward的動作標籤 -->
<!-- 相當於在hello.jsp?id11=itcast200 -->
<jsp:forward page="/jsp/hello.jsp">
<jsp:param value="itcast200" name="id11"/>
</jsp:forward>
第二個類:操作javabean的動作標籤
<jsp:useBean>:操作哪個javabean
<jsp:setProperty>設定javabean的屬性
<jsp:getProperty>得到javabean的屬性
6.JavaBean的簡介
javabean就是一個java類,但是要遵循一定的書寫規範。
遵循的規範:必須有一個公開的沒有參數的構造方法。javabean裡面私人的,屬性必須是通過公用方法暴露出來
javabean的作用:存值和取值,封裝資料
使用傳統方式來存取資料,
使用jsp動作標籤封裝資料時候,表單輸入項的name值要一樣
7.javabean的內省(完成javabean的封裝)
完成javabean資料的封裝
使用到類
Introspector:
方法
BeanInfo getBeanInfo(Class<?> beanClass) :得到javabean裡面的內容
參數 Class類,javabean位元組碼檔案,
三種方式可以得到Class類 類名.class 對象.getClass() Class.forName("包類路徑")
BeanInfo
PropertyDescriptor[] getPropertyDescriptors() :得到屬性描述,返回數組
PropertyDescriptor
Method getReadMethod() :表示讀的方法,javabean裡面的getXX方法
Method getWriteMethod() :表示寫的方法,javabean裡面的setXX方法
Method
invoke(Object obj, Object... args) :讓方法去執行
8.BeanUtil架構的使用
作用:封裝資料到javabean
是apache組織開發的一個小型操作javabean的api
如果想要使用beanUtils,必須要匯入支援的jar包(匯入兩個jar包)
web項目裡面如何匯入jar包
把需要匯入的jar包,複製到webroot--WEB-INF--lib目錄下面,自動把jar包匯入到項目中
注意:表單輸入項name的值必須要和javabean裡面的屬性名稱要相同
使用到的類 org.apache.commons.beanutils 下面
BeanUtils
populate(Object bean, Map properties):完成資料的封裝
兩個參數:第一個參數是javabean對象,第二個參數表單輸入的值和輸入的值,map集合
建立jsp頁面,寫提交表單,表單提交到servlet裡面,在servlet裡面使用架構實現封裝資料到 javabean操作
代碼
//得到表單提交的資料
//建立javabe對象
//使用架構實現封裝
Person p12 = new Person();
try {
BeanUtils.populate(p12, request.getParameterMap());
} catch (Exception e) {
e.printStackTrace();
}
使用架構,如果屬性的類型是基礎資料型別 (Elementary Data Type)和String類型完成封裝,但是如果不是這些類型出現轉換的異常
ConvertUtils
register(Converter converter, Class clazz)
兩個參數:第一個參數是轉換器,第二個參數是轉換類型Class
String d1 = (String) o;
//把字串的日期類型轉換成Date類型
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(d1);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
9.el運算式
用途:擷取域對象裡面的值
文法: ${域對象的名稱}
(1)使用el運算式擷取域對象的值
代碼
<!-- 向四個域對象裡面設定值 -->
<%
pageContext.setAttribute("itcast", "pagevalue");
request.setAttribute("itcast", "requestvalue");
session.setAttribute("itcast", "sessionvalue");
application.setAttribute("itcast", "applicationvalue");
%>
<!-- 使用el運算式擷取值 -->
${pageScope.itcast }
${requestScope.itcast }
${sessionScope.itcast }
${applicationScope.itcast }
(2)使用el運算式擷取域對象裡面的數組的值
使用數組的下標擷取,如果數組的下標不存在,返回Null 字元串""
代碼
<!-- 使用el運算式擷取域對象裡面的數組的值 -->
<%
String[] arr = {"tom","jack","lucy"};
//把這個數組放到域對象裡面
request.setAttribute("arr", arr);
%>
<!-- 使用el運算式擷取數組裡面的值 -->
${arr[1] }
(3)使用el運算式擷取域對象裡面集合裡面的值
向域對象裡面放list集合
使用集合下標擷取值
代碼
<!-- 使用el運算式擷取域對象裡面list的值 -->
<%
List list = new ArrayList();
list.add("AAAA");
list.add("TTTT");
list.add("wwww");
request.setAttribute("list", list);
%>
${list[10] }
向域對象裡面map集合
<%
Map map = new HashMap();
map.put("aaa", "AAAA");
map.put("bbb", "BBBB");
map.put("ccc", "CCCC");
request.setAttribute("map", map);
%>
${map.aaa }
(4)使用el運算式擷取域對象裡面的對象的屬性的值
代碼
<!-- 使用el運算式擷取域對象裡面對象的屬性的值-->
<%
Person1 p11 = new Person1();
p11.setId("404");
p11.setUsername("mary");
p11.setAge("500");
request.setAttribute("p11", p11);
%>
${p11.id }
${p11.username }
${p11.age }
(5)執行運算
算數運算 + -
代碼
<!-- 執行算術的操作 -->
<%
pageContext.setAttribute("aa", "11");
pageContext.setAttribute("bb", "22");
%>
${aa+bb }
關係運算 > < <= >=
邏輯運算 && ||
三元運算子(三目運算)
${ user != null ? user.name : "" }
${ empty user ? user.name : "" }: empty表示空
${not empty user ? user.name : "" }: not empty不是空
10、使用EL運算式操作web開發常用的對象
el運算式裡面提供了11個隱含對象
param:得到提交的參數,相當於request.getParameter();
paramValues: 得到多個值,相當於request.getParameterValues();
header: 得到頭資訊,相當於request.getHeader();
initParam: 得到全域的初始化參數
pageContext:得到內建對象
<!-- pageContext對象 -->
${pageContext.request }
${pageContext.response }
JavaWeb系列之九(jsp,javabean,el運算式)