Html
1、屬性
align:對齊方式
bgcolor:背景顔色
target:
_blank在新視窗打開 _self預設,在相同的架構打開
_parent在父架構集中打開 _top在整個視窗打開
framename在指定的視窗打開
2、注釋
<!-- 注釋 -->
3、檔案路徑
同一目錄下:檔案名
上級目錄:../
下級目錄: 從目标檔案開始的檔案目錄
4、表格
tr行、td列、th表頭
<table align="center" width="80%" bordercolor="green" cellspacing="0" cellpadding="10pt"><!—cellpadding代表文字和行之間的距離-->
<caption>學生成績表</caption>
<tr><th>姓名</th><th>年齡</th><th>成績</th></tr>
<tr><td>張三</td><td rowspan="2">21</td><td>34</td></tr>
<tr><td>李四</td><td>56</td></tr>
<tr><td colspan="3">王五</td></tr><!—colspan代表列合并,rowspan代表行合并 -->
</table>
5、表單form
表單域input
type:text文本框、password密碼、radio單選按鈕、checkbox:複選框
是否需要在本書再版時立即通知您:
<input type="radio" checked="true">是
<input type="radio">否
submit送出按鈕、reset重置按鈕、button普通按鈕
<input type="submit" value="送出">
hidden隐藏域(用來傳送資料,不安全)
file:檔案上傳(兩個條件:method=”post”、enctype=”multipart/form-data”)
name:表單域的名字
value:表單域的初始值
size:表單元素的長度,隻适用于text、password
maxlength:表單元素中可以輸入的最大字元數,隻适用于text、password
checked:boolean屬性,指定按鈕是否是被選中的,隻适用于radio、checkbox
readonly:隻讀的,隻适用于text,資料能送出到背景
disabled:表示表單域不能用,資料不能送出到背景
多行文本textarea
<textarea cols=”20” rows=”5”></textarea>//表示可以輸入5行20列
下拉清單框select
<select name=”city” multiple>//可以選中多項
<option value=”beijing”>北京</option>
<option value=”shanghai”>上海</option>
<option value=”qingdao” selected=”true”>青島</option>//預設選中
</select>
域容器fieldset
<fieldset style=”width:200”>
<legend align=”left”>小标題</legend>
使用者名:<input type=”text”>
密碼:<input type=”password”>
</fieldset>
6、架構frame
frameset:分割視窗
rows分割行cols分割列
frameborder:是否顯示架構,0不顯示、1顯示,預設為1
framespacing:架構間的間距
frame:架構
src:指定架構顯示的HTML檔案的位置
noresize:設定不可以調整視窗的大小
bordercolor:架構邊框的顔色
<frameset rows=”10%,80%,*”>
<frame src=”header.html” noresize>
<frameset cols=”20%,*”>
<frame src=”left.html” noresize>
<frame src=”table.html” noresize name=”right”>
</frameset>
<frame src=”footer.html” noresize>
</frameset>
<noframes>
<body>浏覽器版本較低,請更新後通路</body>
</noframes>
marginwidth:視窗内的内容與視窗左右邊緣的距離
marginheigth:視窗内的内容與視窗上下邊緣的距離
scrolling:是否顯示滾動條,no-不顯示、yes-顯示、auto-預設 自動設定
noframes不支援架構的浏覽器
注意:<body></body>标簽與<frameset></frameset>标簽不能同時使用,不過,如果添加包含一段文本的
<noframes>标簽,就必須将這一段文字嵌套于<body></body>标簽内
JavaScript
1、增強代碼可讀性
<-- JavaScript代碼 //-->
2、文法結構
1)大小寫敏感
2)一句話結束最好加;
3)注釋 //
4)弱類型
3、變量命名
1)以字母、下劃線_或美元符号$開頭
2)餘下的字元可以是字母、下劃線_或美元符号$、數字
3)最長為255個字元
4)不能有空格、大小寫敏感
5)不能使用JavaScript中的關鍵字或者保留字命名
4、JS變量類型
Undefined:未定義的類型、String、Boolean、Null、Number五種
可以使用typeof(object)來擷取變量類型
5、聲明 var 變量名[=初始值]
var i = 10;
var j;
alert(typeof(i));//判斷i的類型 number
docement.write(123);
6、類型轉換
字元串>數值>布爾值 低級與進階相加,強制轉換成進階的
字元串數值
parseInt()、parseFloat()、Number()
7、運算符
算術運算符 +、-、*、/、%、++、--(前置先自增再運算、後置先運算後自增)
比較運算符 ==、>、>=、<、<=、!=
邏輯運算符 &&、||、!非
指派運算符 =、+=、-=、*=、/=
8、try{}catch(){}
try{var a=c}catch(e){alert(e);}
9、Array數組
var arr = new Array();//大小不固定
var arr1 = new Array(5);//大小固定
var arr2 = new Array(“abc”,12,23,”aaa”);//直接指派
//數組周遊for循環
for(var i=0;i<arr2.length;i++){
document.write(arr2[i]);
}
//數組周遊for each循環(注意:i代表的是索引,不是數值)
for(var i in arr2){
document.write(arr2[i]);
}
數組方法:
1) concat()拼接數組
2) reverse()反轉數組
3) join(間隔符) 傳回字元串,由間隔符将所有元素連接配接到一起
4) pop()移除數組中的最後一個元素,并傳回這個最後元素
5) shift()移除數組中的第一個元素,并傳回這個元素
6) push()給數組添加新元素,并傳回數組的新長度
7) slice()截取數組,傳回一個新數組
8) sort()傳回一個排序後的新數組//先排數組再排字母,先排十位再排個位
9) toString()傳回逗号分隔的字元串
代碼示例:
document.write(arr3.join(":"));// 56:32:10:4:bbb:aaa:3
document.write(arr3.push("zzz"));//8
document.write(arr3.sort().toString());//10,3,32,4,56,aaa,bbb,zzz
10、Date日期,月份是0-11
var date = new Date();//建立目前日期對象
var date = new Date(1970,6,12);//1970年7月12日
var date = new Date(1970,6,12,15,3,23);//1970年7月12日15時3分23秒
var date = new Date(‘1970/6/12’);//1970年6月12日
日期方法:
1) toLocaleString()//将時間格式轉換成字元串Monday, March 13, 2017 14:28:35
2) toLocaleDateString()//将時間格式轉換成字元串,傳回日期Monday, March 13, 2017
3) toLocaleTimeString()//将時間格式轉換成字元串,傳回時間14:28:35
4) toGMTString()//使用GMT标準時間将Date轉換成字元串Mon, 13 Mar 2017 06:28:35 GMT
5) getTime()//傳回毫秒數
6) getMonth()//傳回當月号數,比實際小1
7) getDate()//傳回當日号數
8) getDay()//傳回星期幾
9) getHours()、getMinutes()、getSeconds()//傳回小時、分鐘、秒數
10)setYear()、setMonth()...//設定時間
11) Date.parse("2014/12/12")//用日期字元串表示自1970年1月1日以來的毫秒數
12)Date.UTC(1995,11,12,11,23,24)//傳回自1970年1月1日以來的毫秒數
11、Math
1)Math.round()//四舍五入
2)Math.ceil()//向上取整
3)Math.floor()//向下取整
4)Math.sqrt()//取平方根
5)Math.random()//[0,1)之間的随機小數
6)with(Math){document.write(round(2.5))};//在with語句體内,任何對變量的引用
12、String字元串
var sname = “string of text”;
var sname = new String(“stirng of text”);
字元串方法:
1) length;//傳回字元串長度,不是length()和java不一樣
2) charAt(i);//傳回指定索引處的字元
3) concat(str);//連接配接字元串
4) indexOf(str);//傳回String對象内第一次出現字元串的字元位置lastIndexOf();
5) replace(str1,str2);//将str1替換成str2
6) slice(start,end);//傳回字元串中起始位置為start,結束位置為end(不包括end)的字元串
7) split(separator,limit);//将字元串以separator作為分隔符切割,傳回一個數組,有limit參數,則傳回數組的limit個元素
8) substr(start,length);//傳回一個從指定位置開始的指定長度的字元串
9) substring(start,end);//傳回一個指定位置之間的字元串,不包括end
10) toUpperCase();//轉換成大寫字母
13、window對象
window.moveBy(20,20);//将視窗向右向下移動20像素
window.moveTo(0,0);//将視窗移動到左上角
window.resizeBy(15,20);//将視窗相對增大15,20
window.resizeTo(450,350);//将視窗大小改為450*350
window.open(url,新視窗名字,特性字元串);//打開新視窗
特性字元串:height、width、location=no沒有位址欄、status=no狀态欄
var winObj = open(“house,jpg”,”house_1”,”width=500,height=300,scrollbars=no”);
14、彈出對話框
1) confirm(“确認删除嗎?”);确認對話框,傳回布爾值
2) alert();提示框
3) prompt(“請輸入您的名字”,“admin初始值”);輸入資訊對話框,傳回值為輸入的字元串
15、定時執行
1)setTimeout(函數名,時間間隔,重複次數),多用于遞歸調用
var timeld = setTimeout(“hello()”,2000);
clearTimeout(timeld);//清除設定的setTimeout函數
2)setInterval(函數名,時間間隔)
var timeld = setInterval(“hello()”,2000);
clearInterval(timeld);
16、history對象
1)history.go(-3);//向後傳回三個通路過的頁面
2)back();//與history.go(-1)功能相同
3)forward();//與history.go(1)功能相同
17、location對象
location.href = “about:blank”;//清空頁面
18、navigator對象
提供使用者使用的浏覽器及作業系統等資訊
navigator.mimeTypes[n].type
19、screen對象擷取使用者螢幕資訊
width、availWidth可用寬度、colorDepth目前顔色設定所用的位數
20、document對象
forms頁面中所有表單的集合
document.forms[0].name.value;//擷取值
images頁面中所有圖像的集合
links頁面中所有連結的集合
anchors頁面中所有錨的集合
document.getElementById(Id)//獲得指定Id對象
document.getElementsByName(Name)//獲得指定Name對象的集合
21、事件處理
onBlur 目前元素失去焦點時觸發
onFouse 當某個元素獲得焦點時觸發
onClick 滑鼠點選時觸發
onDbClick 滑鼠輕按兩下時觸發
onMouseDown 按下滑鼠時觸發
onMouseMove 滑鼠移動時觸發
onMouseOut 滑鼠離開某對象範圍時觸發
onMouseOver 滑鼠移到某對象範圍的上方時觸發
onKeyPress 鍵盤上的某個鍵被按下并且釋放時觸發
<input type="button" οnclick="myfunction('Hello')" value="Call function">
<script language="javascript">
function myfunction(txt){
alert(txt);
}
</script>
22、表單元素
通用屬性:
– form屬性----擷取該表單域所屬的表單
– name屬性----擷取或設定表單域的名稱
– type屬性----擷取表單域的類型
– value屬性----擷取和設定表單域的值
通用方法:
– focus方法----讓表單域獲得焦點
– blur方法----讓表單域失去焦點
通用事件:
onfocus,onblur,onclick,onkeydown,onkeyup,onkeypress,onmouseover,onmouseout,onmousedown,onmouseup,onchange
23、表單元素checkbox應用
<input type="checkbox" name="che1" οnclick="checkall(this)">全選
<input type="checkbox" name="che2" οnclick="unckeck()">反選</br>
<input type="checkbox" name="hobby">看書
<input type="checkbox" name="hobby">運動
<input type="checkbox" name="hobby">旅遊
<input type="checkbox" name="hobby">發呆
function checkall(cha){
var hobby = document.getElementsByName("hobby");
for(var i=0;i<hobby.length;i++){
hobby[i].checked = cha.checked;
}
}
function unckeck(){
var hobby = document.getElementsByName("hobby");
for(var i=0;i<hobby.length;i++){
if(hobby[i].checked==true){
hobby[i].checked = false;
}else{
hobby[i].checked = true;
}
}
}
24、表單驗證
<form name="form1" action="for.html" method="post" οnsubmit="return ckeckForm()">
密碼:<input type="password" name="password" οnblur="password()"/><span id="p"></span><br/>
</form>
function password()
{
var password=document.forms[0].password.value;
var p=document.getElementById("p");
if(password==""|| password.length==0){
p.innerHTML="<font color=red>密碼不能為空</font>";
return false;
}
if(password.length<6 || password.length>12){
p.innerHTML="<font color=red>密碼必須在6---12位之間</font>";
document.forms[0].password.value="";
return false;
}
p.innerHTML="";
return true;
}
25、正規表達式/^ $/
*:0次或者多次
?:0次或者1次
+:1次或者多次
{}:集合[a-z]
|:或者
\d:數字
\w:字母加數字
舉例:
驗證電子郵箱位址:/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
驗證固定電話:/^\d{3}-\d{8}|d{4}-\d{7}$/
驗證身份證号碼:/^\d{15}$|^\d{18}$|^\d{17}[xX]$/
驗證方式:
search():若找不到傳回-1.如果能找到,傳回下标索引
email.search(正規表達式)
test():傳回布爾值
正規表達式.test(email)
if(/^\d{15}$|^\d{18}$|^\d{17}[xX]$/.test(email)==false){
alert("身份證号碼格式不正确,請重新輸入");
document.forms[0].email.value="";
return false;
}
servlet在伺服器端運作的java程式
1、servlet的生命周期(工作原理)
單執行個體多線程
1) new :當頁面第一次被請求,調用構造方法,産生本Servlet唯一的執行個體
2) init():初始化Servlet的資料,隻調用一次
3) servicer():處理請求并響應,每次請求每次調用,在生命周期調用多次
4) destroy():伺服器關機重新開機,或者項目重新釋出,隻調用一次
2、Servlet步驟:
1)編寫一個Servlet
<servlet>
<servlet-name>helloservlet1</servlet-name>
<servlet-class>servletTest.helloservlet1</servlet-class>//通過servlet找到位元組碼檔案位置
</servlet>
<servlet-mapping>
<servlet-name>helloservlet1</servlet-name>//伺服器端通過使用者通路路徑得到servlet的名字
<url-pattern>/helloservlet1</url-pattern>//使用者的通路路徑,可以任意寫如/aaa
</servlet-mapping>
2)釋出到Tomcat伺服器
右擊servers—Add and Remove—将工程添加
3)使用者通路
通路Servlet的URL:http://ip:port/web工程名字/<url-pattern>的值
通路HTML或者JSP頁面的URL:http://ip:port/web工程名字/WebContent下的子目錄的路徑
3、Servlet和CGI的差別:
Servlet:多線程,資料不安全,程序間切換比較快,效率比較高
CGI:多程序,資料安全,程序間切換比較慢,效率比較低
4、HttpServletRequest:
1)擷取表單參數
getParameter(表單域的名字),傳回表單中value值,String
PrintWriter out=response.getWriter();
String name=request.getParameter("username");
out.println("Welcome "+name);
getParameterValues(表單域的名字)String[]
當表單參數資料不完整:非空判斷
String[] hobby=request.getParameterValues("hobby");
if(hobby==null){
out.println("NO HOBBY");
}else{
for(String h:hobby){
out.println(h+"<br/>");
}
2)擷取報頭Header資訊(了解)
Enumeration getHeaderNames()
String getHeader(報頭名字)
int getIntHeader(報頭名字)
long getDateHeader(報頭名字)
Enumeration getHeaders(報頭名字)
5、HttpServletResponse(用位元組流)
1)浏覽器讀取檔案
response.setContentType(“application/pdf;charset=utf-8”);//浏覽器打開檔案的方式在tomcat-conf-web.xml中找
FileInputStream fin = new FileInputStream(“C:\\Web\\HTML.pdf”);//浏覽器讀取檔案的路徑
ServletOutputStream sos = response.getOutputStream();
byte[] bt = new byte[1024];
int len = 0;
while((len = fin.read(bt))!=-1){
sos.write(bs,0,count);
sos.flush();
}
fin.close();
sos.close();
2)中英文亂碼問題
中文格式:
UTF-8(推薦)、GB2312、GBK、GB18030
post方式送出:
request.setCharacterEncoding(“UTF-8”);//寫在輸出流之前,請求時
response.setContentType(“text/html;charset=utf-8”);//響應時
get方式送出:
//第一種方法:重新構造字元串(推薦)
name = new String(name.getBytes(“ISO-8859-1”),”UTF-8”);
//第二種方法:修改Tomcat-conf-server.xml檔案,查找8080
<Connector port=”8888” protocol=”HTTP/1.1” connectionTimeout=”20000”
redirectPort=”8443” URIEncoding=”utf-8”/>
3)設定報頭資訊
setIntHeader();
response.setIntHeader("Refresh", 2);//頁面每2秒鐘重新整理一次
setHeader();
response.setHeader("Refresh", "2;url=http://www.baidu.com");//頁面兩秒鐘後跳轉到百度首頁
setDataHeader();
頁面無緩存:
response.setHeader("Pragma", "No-cache");//http1.0
response.setHeader("Cache-Control", "no-cache");//http1.1
response.setDateHeader("Expires", 0);//ie
4)頁面跳轉(重定向和轉發的差別)
重定向:多次不同請求,位址欄發生變化,可以跳轉到任意web應用下
response.sendRedirect("http://www.baidu.com");//跳轉到百度首頁
response.sendRedirect("Img");//跳轉到相對路徑下的Servlet頁面
轉發:同一請求,位址欄不發生變化,隻能在本web應用下跳轉
//方式一
RequestDispatcher rd=request.getRequestDispatcher("Img");
rd.forward(request, response);
//方式二,相對于java工程的路徑
this.getServletContext().getRequestDispatcher("/Img").forward(request,response);
//方式三
this.getServletContext().getNamedDispatcher("Img").forward(request, response);
6、格式良好的web應用:
WEB-INF:用戶端禁止通路,伺服器端可以通路,禁止通過URL通路
class目錄:位元組碼檔案
lib目錄:第三方的jar包
web.xml檔案:配置資訊
可以轉發通路放在WEB-INF下的檔案,不可以重定向通路,因為重定向通路經過位址欄,相當于用戶端的通路,放在
WEB-INF下的檔案隻能通過伺服器端通路,不能通過用戶端通路
RequestDispatcher rd = request.getRequestDispatcher(“WEB-INF/hello.html”);
rd.forward(request,response);
7、配置檔案web.xml
<servlet></servlet>中的語句
<load-on-startup>10</load-on-startup>//servlet加載的順序,數值越小越先加載
舉例:
<servlet>
<servlet-name>HelloWordservlet1</servlet-name>
<servlet-class>servletTest.helloservlet1</servlet-class>//通過servlet找到位元組碼檔案位置
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Helloservlet1</servlet-name>
<servlet-class>servletTest.helloservlet1</servlet-class>//通過servlet找到位元組碼檔案位置
<load-on-startup>2</load-on-startup>
</servlet>
servlet-name:Servlet名字
servlet-class:Servlet的完整路徑名
url-pattern:使用者通路路徑
<url-pattern>*.do</url-pattern>//通路路徑可以自己設定,說明任意路徑+.do及可以通路頁面
init-param:初始化參數(了解寫在一個<servlet></servlet>中),隻能在本Servlet中使用,隻能在init方法中調用,通過ServletConfig的getInitParameter()方法擷取參數的值
context-param(了解與<servlet></servlet>并列):所有的Servlet均可以使用,任何方法中都可以調用,通過ServletContext的getInitParameter()方法擷取參數的值,一般放資料庫的參數;
<context-param>
<param-name>driver</param-name>
<param-value>oracle.jdbc.driver.OracleDriver</param-value>
</context-param>
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String driver=this.getServletContext().getInitParameter("driver");
System.out.println("driver:"+driver);
}
錯誤資訊友好頁面的處理
<error-page>
<error-code>404</error-code>//錯誤碼404路徑錯誤、500空指針錯誤
<location>/404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>//錯誤資訊的處理
<location>/exception.jsp</location>
</error-page>
exception.jsp檔案中寫
<body>
<h1>
Error!
</h1>
</body>
8、打包 .war包
jar –cvf 包名.war*
9、過濾器Filter
過濾器的生命周期
1) new Tomcat伺服器一啟動的時候産生過濾器對象
2) init()初始化參數資料,隻調用一次
3) doFilter()每次請求每次調用
4) destroy()隻調用一次,伺服器關機重新開機等之前
過濾器的實作步驟(與在web.xml中的書寫順序有關,請求時123,響應時321)
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>WebXml.Servlet.MyFilter</filter-class>//過濾器路徑
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>//過濾的檔案類型,過濾所有檔案,*.html過濾所有html檔案
</filter-mapping>
chain方法必須在doFilter方法中實作
System.out.println("doFilter2...");//請求時執行
chain.doFilter(request, response);//調用下一個過濾器或者資源
System.out.println(2);//響應時執行
過濾器的應用(中英文亂碼問題)
在doFilter方法中寫下方代碼即可
HttpServletRequest request=(HttpServletRequest)req;//轉換格式
HttpServletResponse response=(HttpServletResponse)res;
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);
Servlet要是安全的,實作SingleThreadModel接口,該接口已過時,面試時會問
10、Servlet狀态管理:
http協定:無狀态
用戶端狀态管理:資料不安全,減輕了伺服器的負擔
Cookie:最多4kb
永久性cookie:setMaxAge(int seconds)
暫時性cookie(預設):浏覽器關閉就消失
隐藏域hidden
查詢字元串:get方式送出 ? &
PrintWriter out = response.getWriter();
Cookie[] cooks = request.getCookies();
if(cooks==null){
for(int i=0;i<5;i++){
Cookie cookie = new Cookie("cookieName:"+i,"cookieValue"+i);
cookie.setMaxAge(24*3600);
response.addCookie(cookie);
}
out.println("<h1>Set Cookies OK</h1>");
}else{
out.println("<table 1\" align=\"center\" width=\"80%\" cellspacing=\"0\">");
out.println("<tr><th>cookieName</th><th>cookieValue</th></tr>");
for(int i=0;i<5;i++){ out.println("<tr><td>"+cooks[i].getName()+"</td><td>"+cooks[i].getValue()+"</td></tr>");
}
out.println("</table>");
伺服器端狀态管理:資料安全,加重了伺服器的負擔
HttpServletRequest:同一請求範圍内有效,轉發可以讀取,重定向不可以,因為重定向不是同一個request對象
setAttribute(String name,Object obj);//存儲資料
getAttribute(String name);//讀取資料
removeAttribute(String name);//删除資料
getAttributeNames(String name);
代碼舉例:
request.setAttribute("username", "admin");//<==>String username="admin" ;
request.getRequestDispatcher("ShowRequestAttribute").forward(request, response);
ShowRequestAttribute檔案代碼
PrintWriter out = response.getWriter();
String username = (String) request.getAttribute("username");
out.println("<font color=\"pink\">username:"+username+"</font>");
HttpSession同一會話範圍内有效
Session工作原理:
用戶端發送請求,伺服器端為客戶建立一個session對象,伺服器通過cookie傳回一個sessionId給用戶端,以後用戶端再次發送請求帶着sessionId,伺服器端根據發送過來的sessionId傳回session對象
getSession()與getSession(boolean)的差別:
1)getSession();與getSession(true)相同,如果現在已有session對象,使用已有的session對象,如果沒有session對象,則建立一個
2)getSession(boolean); getSession(false) 如果現在已有session對象,使用已有的session對象,如果沒有session對象,則傳回null
一般通過暫時性cookie将sessionId送到用戶端,但是用戶端浏覽器禁止cookie,則需要通過URL重寫
Servlet線程安全:實作SingleThreadModel接口
encodeURL(String url);
encodeRedirectURL(String url);//重定向的重寫
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
out.println("<h1>Session Info</h1>");
out.println("isNew:"+session.isNew()+"<br/>");
out.println("SessionId:"+session.getId()+"<br/>");
out.println("CreateTime:"+session.getCreationTime()+"<br/>");
out.println("CreateTime:"+new Date(session.getCreationTime())+"<br/>");
out.println("LastAccessedTime:"+new Date(session.getLastAccessedTime())+"<br/>");
out.println("<br/>");
out.println("<h1>Request Sessioninfo</h1>");
out.println("SessionId:"+request.getRequestedSessionId()+"<br/>");
out.println("FromCookie:"+request.isRequestedSessionIdFromCookie()+"<br/>");
out.println("FromURL:"+request.isRequestedSessionIdFromURL()+"<br/>");
out.println("isValid:"+request.isRequestedSessionIdValid()+"<br/>");
out.println("<a href="+request.getRequestURI()+" target="_blank" rel="external nofollow" >test</a><br/>");
out.println("<a href="+response.encodeURL(request.getRequestURI())+" target="_blank" rel="external nofollow" >URL</a><br/>");
session的會話時長:
1) setMaxInactiveInterval(int interval)//秒
2) tomcat伺服器的web.xml
<session-config>
<session-timeout>30</session-timeout>//分鐘
</session-config>
session對象的銷毀
1) 會話自然過期
2) invalidate()立即銷毀session對象;登出時能用到
3) 關閉浏覽器,sessionId馬上銷毀,但是session對象仍然會在伺服器端存活一段時間
session中存儲的資料:同一個會話範圍内有效
SetAttribute(String name,Object obj);存儲資料
getAttribute(String name);讀取資料
removeAttribute(String name);删除資料
getAttributeNames();
ServletContext:所有使用者共享,并且與web應用有相同的生命周期,做線上人數統計
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
ServletContext application=this.getServletContext();
Integer count=(Integer)application.getAttribute("count");
if(count==null){
application.setAttribute("count", 1);
}else{
count++;
application.setAttribute("count", count);
}
out.println("線上人數為:"+application.getAttribute("count"));
JSP(java Server page)Java伺服器頁面
1、 Servlet:看做是嵌入HTML标簽的類(資料的控制)
JSP:看做是嵌入Java代碼的HTML(資料的顯示)
2、 JSP的工作原理:
當頁面第一次被請求時,把Java代碼轉換成Servlet,然後響應回去,之後請求,如果頁面沒有變化,直接響應就可以,如果Servlet發生變化,再請求時,重新轉換成Servlet,然後再響應
3、 JSP轉換将檔案放在Tomcat的work檔案下
4、 JSP的經典文法:
注釋:<%-- --%>浏覽器不可見
<!-- -->檢視源檔案,浏覽器可見
聲明:<%! %>聲明方法和成員變量
腳本段:<% %>句子和局部變量,如if循環語句
表達式:<%= score %>輸出到浏覽器,等價于<%out.println();%>
指令:<%@ %>
疊代語句:跨腳本段 遇到Java代碼跳入腳本段,遇到HTML标簽跳出腳本段
普通語句
<%
int score=12;
if(score==100){
out.println("<h1><font color=\"red\">去公園玩</font></h1>");
}else{
out.println("<h1><font color=\"blue\">在家檢討</font></h1>");
}
%>
疊代語句
<%
int score=100;
if(score==100){
%>
<h1><font color="red">去公園玩</font></h1>
<%
}
else{
%>
<h1><font color="blue">在家檢討</font></h1>
<%} %>
5、page指令 設定目前頁面的資訊
language:語言
contentType:設定目前頁面的編碼格式,預設為ISO-8859-1
pageEncoding:設定目前頁面的編碼格式,預設為ISO-8859-1
import:導包 可以出現多次,如果寫在一個import中,中間用逗号間隔
session:目前頁面是否有session對象,預設為true
extends:JSP頁面生成的Servlet類的父類
buffer:表示緩沖器大小,預設8kb
autoFlush:預設為true是否自動重新整理緩沖區
isThreadSafe:是否是線程安全的,預設為true
isELIgnored:預設為false不忽略,是否忽略EL表達式
isErrorPage:預設為false,頁面是否為錯誤頁面
errorPage:後面跟錯誤頁面的URL路徑
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" buffer="1kb" import="java.sql.Connection" autoFlush="false" isELIgnored="false"%>
6、include指令
include指令(靜态包含)與include動作(動态包含)的差別
include指令:隻轉換成一個Servlet,轉換成Servlet時就包含進來,不可以使用表達式
<%@include file=”header.jsp”%>
include動作:轉換成多個Servlet,響應時包含進來,可以使用表達式
<jsp:include page=”<%=header.jsp%>”></jsp:include>
7、taglib指令JSP三個指令:page、include、taglib
8、JNDI:資料庫連接配接池
在web應用下的META-INF下建立context.xml配置檔案
<?xml version=”1.0” encoding=”UTF-8”?>//告訴我們是一個xml檔案
<Context>
<Resourse name=”jdbc/mysourse”
auth=”Container”
type=”javax.sql.DataSourse”
driverClassName=”oracle.jdbc.driver.OracleDriver”
url=” jdbc:oracle:thin:@YLMF123-3131857:1521:orcl”
username=”scott”
password=”tiger”
maxActive=”30”
maxIdle=”5”
maxWait=”10000”
/>
</Context>
//name表示Resourse資源的JNDI的名字
//auth表示這個資源的管理者Application(web應用建立和管理Resourse)、Container(容器建立和管理Resourse)
//type表示Resourse所屬的Java類
//maxActive資料庫在此伺服器上打開的最大連接配接數
//maxIdle資料庫在此伺服器上打開的最小連接配接數
//maxWait最大的等待時間,毫秒
使用:
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/mysource");
conn=ds.getConnection();
9、jsp下的轉發
<jsp:forword></ jsp:forword>
10、jsp的9個内置對象
1)request HttpServletRequest
request.getAttribute(“”);
request.getParameter(“”);
2)response HttpServletResponse
response.sendRedirect(“”);
response.encodeURL(“”);
response.getWriter();
3)session HttpSession
session.setAttribute(“”);
4)application ServletContext
application.setAttribute(“”,””);
application.getAttribute(“”);
5)config ServletConfig
config.getInitParameter(“”);
6)out 預設值為null JspWriter
7)page 預設值為this,指的是目前Servlet Object
8)exception Throwable是一個類,與exception是繼承關系
9)pageContext PageContext
pageContext:
1) 産生其他内置對象
2) 存儲page作用域範圍内的資料,以及其他作用域(request、session、application)範圍内的資料
10、JSP四個領域範圍(作用域範圍)
1)page:目前頁面有效
2)request:同一請求範圍内有效
3)session:同一會話範圍内有效
4)application:web應用範圍内有效
11、JavaBean:是一種規範,是一種可移植的元件
12、成為JavaBean的規範
1)必須是公開類
2)必須是無參的構造方法
3)屬性xxx必須是getXxx或者SetXxx命名
4)實作Serializable接口
5)該bean放在某個包中(前三個條件必須滿足)
程式如下:
public class Users implements Serializable{
private int id;
private String username123;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username123;
}
public void setUsername(String username) {
this.username123 = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
13、用jsp對bean進行指派和輸出
<jsp:useBean>相當于new一個對象
<jsp:setProperty>指派
<jsp:getProperty>取值
程式如下:
<body>
<jsp:useBean id="u" class="com.neusoft.bean.Users" scope="session"></jsp:useBean>
<jsp:setProperty property="*" name="u" />
//屬性的名字應與表單域中的name相同,可以用*通配符
//否則用以下代碼
<jsp:setProperty property="id" name="u" param="id"/>//相當于u.setId(12);
<jsp:setProperty property="username" name="u" param="name"/>
<jsp:setProperty property="password" name="u" param="pwd"/>
Id:<jsp:getProperty property="id" name="u"/><br/><!-- u.getId() -->
Name:<jsp:getProperty property="username" name="u"/><br>
Password:<jsp:getProperty property="password" name="u"/>
</body>
14、EL表達式:通常與JSTL一起使用
1)文法:${} 花括号裡面可以使用.或者[]
如:${requestScope.user.id }
2)有些情況必須使用[]:數組、List集合、Map集合、變量中有特殊字元(如na$me需要用[“na$me”])
數組:${requestScope.arr[1] }<br>
List集合:${requestScope.list[0].username }<br>
Map集合:${requestScope.map["m2"].password}
3)el的隐含文法:
<%=request.getParameter("name") %>//取表單域的值
${param.name }//取表單域的值
${header.host }//獲得報頭資訊,主機名字
${cookie }//獲得cookie
4)運算符:+、-、*、/(div)、%(mod)
${18 div 10} //輸出1
${2==4} //false
${2<4 && 5>3} //true
15、JSTL(JSP Standard Tag Library)标簽庫
1)導包:
在WEB-INF的lib導入standard-1.1.2.jar包(現成的)
在jar包下的META-INF的c.tld找到uid路徑,複制粘貼到
<%@taglib uri=”複制” prefix=”c”%>
2)out 标簽 輸出
<body>
<jsp:useBean id="user" class="com.neusoft.el.User" scope="request"></jsp:useBean>
<jsp:setProperty property="id" name="user" value="12"/>
<jsp:setProperty property="username" name="user" value="abc"/>
<jsp:setProperty property="password" name="user" value="123"/>
<!-- out标簽 -->
<c:out value="admin"></c:out>
EL表達式:${requestScope.user.password }
out标簽:<c:out value="${requestScope.user.password }"></c:out>
default屬性:<c:out value="${name}" default="qqq"></c:out>
//value對象存在,即輸出,不存在即傳回default設定的預設值
<%
String str="<address>";//xml标簽
request.setAttribute("str", str);
%>
//是否屏蔽xml标簽,預設值為true,即屏蔽
escapeXml标簽:<c:out value="${str }" escapeXml="false"></c:out>
</body>
3)set标簽 聲明變量
<c:set var=”u” value=”guest” scope=”session”></c:set>
Set标簽:${sessionScope.u}//輸出guest
//針對JavaBean的屬性,target指的是JavaBean的id
<c:set target=”${user}” property=”username” value=”John”></c:set>
${user.username}
4)remove标簽 删除
<c:remove var=”u”>
5)if标簽 判斷,隻能放一條if語句
<c:set var=”age” value=”2300” scope=”request”></c:set>
<c:if test=”{${age<0 || age>200}”>年齡不合法</c:if>
6)choose标簽 多條件判斷
<c:choose>
<c:when test=”${age<0 || age>250}”>年齡不合法</c:when>
<c:when test=”${age<50 || age>250}”>中年人</c:when>
<c:otherwise>老年人</c:otherwise>
</c:choose>
7)forEach标簽 周遊數組、集合
//item:集合的名字
//var:周遊集合是所周遊到的元素的名字
//begin=“1” end=“4”部分周遊
//step 步長值 預設為1
//varStatus 狀态值變量 index下标 count第幾個元素
<!—周遊數組 -->
<c:forEach items=”${arr}” var=”item” varStatus=”aa”>
${item}||${aa.index}||${aa.count}||${aa.first}||${aa.last}
</c:forEach>
<!-- 周遊List集合 -->
<c:forEach items=”${list}” var=”item”>
${item.id}||${item.username}//list集合裡面是user對象
</c:forEach>
<!-- 周遊Map集合 -->
<c:forEach>
${item.key}||${item.value.username}//value是user對象
</c:forEach>
16、MVC架構模式(可重用性、可維護性)
發送請求,Servlet(屬于控制層)負責處理請求,jsp隻負責顯示(屬于View視圖層),JavaBean負責邏輯部分
M(JavaBean):資料的邏輯,與資料庫的互動邏輯(dao層和service層)
V(jsp):資料的顯示
C(Servlet):資料的控制
a. 處理請求
b. 根據請求,找到某個業務邏輯處理
c. 根據業務邏輯的結果,找到某個視圖響應回去
Ajax(Asynchronous JavaScript And XML)
1、步驟
var xmlhttp;
function val{
1)擷取表單資料
var username = document.getElementsByName(“username”)[0];//得到一個數組
2)建立XMLHttpRequest對象
if(window.XMLHttpRequest){//除了ie7以下版本,浏覽器中都有XMLHttpRequest對象,如火狐、搜狗等
xmlhttp = new XMLHeepRequest();
}else if(window.ActiveXObject){//ie6,ie6.5
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}
3)建立與伺服器的連接配接
if(xmlhttp){//判斷是否建立成功
xmlhttp.onreadystatechange = callback;//注意後面不加括号,設定狀态變化時調用callback方法
xmlhttp.open(“GET”,”GetServlet?,true);
//method:送出方式,URL:送出到的目标頁面,async:是否異步(true表示異步)
//POST方式送出
xmlhttp.open(“POST”,”POSTServlet”,true);
xmlhttp.setRequestHeader(“Content-Type”);
xmlhttp.send(“username=”+username.value);
4)發送請求
xmlhttp.send(null);
}
}
5)編寫回調函數,用于存儲伺服器響應回來的資料
function callback(){
if(xmlhttp.readystate==4){
if(xmlhttp.status==200){
var text = xmlhttp.responseText;//擷取伺服器的資料
var s = document.getElementById(“s”);
s.innerHTML = “<font color=red>”+text+”</font>”;
}
}
}
2、XML可擴充的标記性語言
格式良好的XML檔案
1) 大小寫敏感
2) 标簽要求正确嵌套
3) 屬性值必須被“”修飾
4) 标簽必須成對出現
5) 必須要有根元素<?xml version=”1.0”?>
3、DOM(Document Object Model):文檔對象模型