天天看點

Javaweb、javaEE學習筆記基礎知識

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!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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):文檔對象模型

繼續閱讀