JSP
JSP:九大對象、七大動作、三大指令。
在BIN目錄裏面啓動服務器(startup),然後在瀏覽器裏面輸入http://localhost(服務器IP):端口號(8080)/就可以看到自己的服務端.
如果要運行程序:
例如:http://192.168.1.77:8080/mywork/table.jsp
192.168.1.77是服務器IP。
8080是端口號。
mywork是項目名。
table.jsp是文件名。
解決亂碼:
一定要把這一行放到jsp文件的第一行:
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
九大對象:
第一大對象:Out
Out.print();輸出數據到瀏覽器,和<%= %>一樣的效果.
<% %>括號中間寫JAVA代碼。
<%=變量%>輸出到瀏覽器
1. 網頁跳轉.
form表單的跳轉,在form裏面輸入action=”*.jsp”;
例如:
<form name="enter" action="文件名.jsp" οnsubmit="return 函數名()">
再<input type="submit" value="提交" name="refer">,點擊提交後就可以就可以跳轉到*.jsp頁面.
如果輸入爲空的話,不想讓頁面跳轉,可以在函數裏面加入return false;不滿足條件就不往下執行.全部滿足條件的時候就跳轉到另一個頁面.
2. javascript跳轉:
例如:
function test(){
//window.location.href="*.jsp"; 這個就像超鏈接,可以返回
window.location.replace("*.jsp"); 這個就是把以前的給替代了,所以不能返回.
}
在按鈕上面調用這個函數方法就可以執行跳轉了.
Button類型按鈕:
function xxx(){
document.form名.submit();
}
//調用這個方法的按鈕會自動執行form裏面的action,跳轉到另一個頁面.
動態修改action:
function xxx(){
document.enter.action="color.jsp"; //更改action裏面的頁面,下面的語句不能註釋,要靠它提交,不然會沒反映.
document.enter.submit(); //調用這個方法的按鈕會自動執行form裏面的action,跳轉到另一個頁面.
}
function text(){
document.enter.action=document.enter.name.value; //在文本框上面輸入什麼頁面就進入什麼頁面.
document.enter.submit(); //上面改值後用這個提交.
}
****(第二大對象)request對象:獲取客戶端提交的數據。
out 向客戶端輸出數據
request 向客戶端請求數據
客戶端的跳轉方式:
function zhuce(){
document.enter.action="requestTest.jsp";
document.enter.submit();
}
<%
out.print("<table border=1>");
out.print("<tr>");
out.print("<td>"+"姓名:"+request.getParameter("name")+"</td>");
out.print("</tr>");
%>
執行上面這段代碼將會在另外一個頁面輸出你輸入的姓名.
l 表單的兩種提交方式get與post
<form name="enter" action="array.jsp" οnsubmit="return login()" method="post">
解決亂碼的三種方式:
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<% request.setCharacterEncoding("GBK") ;
response.setCharacterEncoding("GBK")
%>
Get和post提交的區別:
1.Get不安全,Post安全(因爲get把裏面的信息全部顯示在了地址欄上面,而post沒有)
2.get有長度限制,post沒有長度限制.
下面是get提交後產生的地址欄的地址:
http://192.168.1.77:8080/mywork/requestTest.jsp?name=%CD%F5%BA%A3&age=22&sex=%C4%D0&native=%C0%E4%CB%AE%CC%B2&like=%BF%B4%CA%E9&like=%CC%B8%C7%E9&like=%CB%AF%BE%F5&intro=%09%0D%0A%09tell+me+why+%0D%0A%09%D7
下面是post提交後產生的地址欄的地址:
http://192.168.1.77:8080/mywork/requestTest.jsp
服務端的跳轉方式:
第三大內置對象:response (重定向)
只發生在請求的範圍之內(只能從上一個頁面傳到另一個頁面).
Response.sendRedirect(“http://www.baidu.com”);
response 封裝了jsp產生的響應,然後被髮送到客戶端以響應客戶的請求
hidden:隱藏表單域.
就是把一個框架給隱藏起來,但是它的值還在這裏,只是不顯示出來而已,也可以用它來傳值,並且在另一個頁面顯示出來.
例如:
<input type="hidden" name="userName" value=<%=request.getParameter("userName")%>>
第四大內置對象session:
在當前打開的瀏覽器內,多個頁面的數據共享.
session.setAttribute("name",request.getParameter("userName"));
session.setAttribute("pass",request.getParameter("password"));
session.getAttribute("name");
session.getAttribute("pass");
第一大指令:page
用指令導入一個包:
<%@ import=”包名”%>
2010-4-19
在一個項目中不能用過多的session,因爲它會導致系統的性能下降,所以我們要慎用session。
一般是用在保存用戶的登錄信息(用戶信息、權限、資源)、頻繁使用的信息。
第五大內置對象(application):可以在多個瀏覽器內共享數據
application>session>request
session保存的數據只在當前瀏覽器有效,只要不關閉瀏覽器,就能實現多個瀏覽器之間的共享。
Application保存的數據在當前服務器裏有效,只要不關閉服務器,也能實現多個瀏覽器之間的共享。
application對象 application對象實現了用戶間數據的共享,可存放全局變量.它開始於服務器的啓動,直到服務器的關閉,在此期間,此對象將一直存在;這樣在用戶的前後連接或不同用戶之間的連接中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他用戶對此的訪問.服務器的啓動和關閉決定了application對象的生命.它是ServletContext類的實例.
session對象 session對象指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開連接爲止.它是HttpSession類的實例.
第一大指令:page
導入自己的類:
<%@ page import=”包名.類名”%>
2010-4-22
l JSP中的靜態包含與動態包含
第二大指令:include
重複的代碼就抽取出來,如:一個表的歡迎語句就可以抽取出來,因爲每個表都要有歡迎語句:
1.靜態包含<%@ include file=”*.jsp”%>
第一大動作:<jsp:include >
2.動態包含<jsp:include page=”*.jsp” flush=”true”> </jsp:include>
這段代碼放在哪裏就顯示在哪裏!!
靜態包含和動態包含的區別:
1. 單獨編譯(動態包含)與統一編譯(靜態包含)→變量共享。
2.檢查包含文件變化(動態包含刷新的時候總是會去檢查文件,而靜態包含卻不一定會去檢查文件)。
3.動態包含可以帶參數,靜態包含不可以帶參數。
第二大動作:<jsp:useBean>
語法:
<jsp:useBean class=”包名.類名” id=”aa” />
<jsp:useBean class=”包名.類名” id=”aa” scope=”session” />
<%
//scope=”session” 這是設置它的有效範圍 就相當於session.setAttribute();
//id="person"就相當於 PersonDB person=new PersonDB();生成person對象
%>
動態包含與靜態包含
<jsp:include>動態包含與靜態包含
it 分類:jsp
動態INCLUDE
用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。
(這裏你必須使用flush="true",你不能使用false值.缺省值爲false )
靜態INCLUDE
用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>
===================================================================
1. 靜態include的結果是把其他jsp引入當前jsp,兩者合爲一體
動態include的結構是兩者獨立,直到輸出時才合併( 看看jsp生成的java文件就可以知道了)
2.正是因爲這樣,動態include的jsp文件獨立性很強,是一個單獨的jsp文件,需要使用的對象,頁面設置,都必須有自己創建,當然, 還好它和include它的頁面的request範圍是一致的.
而靜態include純粹是把代碼寫在外面的一種共享方法,所有的變量都是可以和include它的主文件共享,兩者高度緊密結合,不能有變量同名的衝突.而頁面設置也可以借用主文件的.
flush屬性: 用true ,表示頁面可刷新。
第六大內置對象:page
<jsp:useBean class=”包名.類名” id=”生成的對象的名字” scope=”session” />
如果不寫scope=”session” 就默認爲第六大內置對象。
它的數據只作用於當前頁面
第三大動作:<jsp:getProperty name=”生成對象的名字” property=”對象的屬性(age)”>
從對象中取出屬性值:<jsp:getProperty name="bean對象" property="bean對象屬性" >
例如:<jsp:getProperty property="age" name="person"/>
第四大動作<jsp:getProperty name=”bean對象實例” property=”age” value=”12”/>
例如: <jsp:setProperty property="age" name="person" value="12"/>
參數賦值法:<jsp:setProperty name=”bean對象實例” property=”age” param=”參數屬性”/>
就是說你用?號傳值法把你輸入的值給傳到param裏面。
1.創建bean對象:
<jsp:useBean id="bean對象引用名" class="包.類" scope="對象作用域(page(默認)/request/session/application)" />
2.爲對象設置屬性值:
<jsp:setProperty name="bean對象" property="bean對象屬性" param="請求參數名(表單元素名)">
<jsp:setProperty name="bean對象" property="bean對象屬性" value="變量的值">
注意:屬性名區別大小寫,param 和 value只能單獨用,不能合用
2. 從對象中取出屬性值:<jsp:getProperty name="bean對象" property="bean對象屬" >
set
form提交
post
1.客戶端跳轉 href
修改地址提交法
replace
重定向:response.sendRedirect(“http://www.baidu.com”);
2.服務端跳轉
<jsp:forward page=”網址”/>
<jsp:forward page="header.jsp"></jsp:forward>
第五大動作:<Jsp:forward page=”*.*”></jsp:forward>
只能跳到當前文件裏面的文件,不能跳到www.baidu.com網.
response.sendRedirect(“http://www.baidu.com”);可以跳轉到所有的網站和jsp文件.
<jsp:forward page=”網址”>和response.sendRedirect(“網址”);的區別:
1. 地址欄的區別:跳轉的時候, response.sendRedirect(“”);的地址欄改變了,而<jsp:forward>的地址欄沒有改變