亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

java web學習筆記-jsp篇

2019-11-14 23:20:44
字體:
來源:轉載
供稿:網友
java web學習筆記-jsp篇1.java web簡介  1.1靜態頁面與動態頁面
表現形式所需技術
靜態網頁網頁內容固定,不會更新html,CSS
動態網頁網頁內容由程序動態顯示,自動更新html,css,DB,java/c#/php,javascript,xml,主流的動態網頁腳本(jsp,asp.net,php)

  1.2搭建java web開發環境

    jdk1.7+tomcat7.0+MyEclipse10。關于MyEclipse的安裝和配置請參見http://blog.sina.com.cn/s/blog_907043b301016jtp.html。Tomcat服務器是Apache Jakarta的開源項目,是Jsp/Servlet容器。安裝Tomcat只需要解壓zip包到指定目錄即可。新建一個環境變量CATALINA_HOME,變量的值是Tomcat的根目錄D:/PRogram Files (x86)/apache-tomcat-7.0.57。全部的環境變量如下:

變量名變量值
JAVA_HOMED:/Program Files (x86)/Java/jdk1.7.0_40
PathC:/Program Files/Microsoft SQL Server/100/DTS/Binn/;%JAVA_HOME%/bin;D:/Program Files/Sublime Text 3;D:/Program Files/MySQL/MySQL Utilities 1.3.6/
classpath.;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar;
CATALINA_HOMED:/Program Files (x86)/apache-tomcat-7.0.57

之后我們測試一下Tomcat的首頁:

  進入Tomcat服務器根目錄下面的bin目錄,以管理員方式運行startup.bat,如果運行結果如下就表示Tomcat服務器啟動成功。

  注意:不要關閉這個窗口(關閉窗口就意味著關閉了Tomcat服務器,將其最小化)。

在瀏覽器地址欄輸入http://localhost:8080/回車得到如下頁面:

  

1.3Tomcat目錄結構

  1.4手工編寫第一個web應用程序

  在項目文件夾中創建一個index.jsp:

 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4     <meta charset="UTF-8"> 5     <title>手工編寫的第一個java web項目</title> 6 </head> 7 <body> 8     <h1>這是手工編寫的第一個java web項目——jsp</h1> 9     <hr />10 </body>11 </html>

  在項目目錄中創建一個WEB-INF目錄拷貝/webapps/examples/WEB-INFO/web.xm到自己項目的/myJspProject/WEB-INFO中,在/myJspProject/WEB-INFO中創建兩個文件夾:classes和lib。最后的項目目錄應該是這樣:

  測試:瀏覽器輸入:http://localhost:8080/myJspProject/index.jsp回車,運行結果如下:

解決方法:更改瀏覽器編碼為指定編碼:

  1.5WEB-INF目錄詳解

      該目錄是java web應用的安全目錄。所謂安全目錄就是客戶端無法訪問只有服務端可以訪問的目錄。其中web.xml是項目部署文件,classes目錄:存放*.class文件,lib目錄存放需要的jar包。例如:我們在WEB-INF中創建一個test.html,下面我們通過瀏覽器訪問:

  web.xml配置文件可以配置歡迎頁面默認的歡迎頁面是項目下面的index.jsp,加入我們需要將項目下的haha.jsp,在/WEB-INF/web.xml的web-app標記中添加以下代碼:

1 <welcome-file-list>2             <welcome-file>/haha.jsp</welcome-file>3</welcome-file-list>    

  運行結果:

  1.6實用Eclipse編寫第一個web應用程序

      注意:如果要使用Eclipse編寫java web應用應該使用Eclipse的J2EE版本。并在Eclipse中配置Tomcat服務器Window-Preference-Server-Runtime Environment-Add,然后在WebContent目錄下新建jsp文件,按下Ctrl+F11(或者在項目中右鍵-Run On Server)就可以使用內置瀏覽器訪問建立的網站。

  1.7用MyEclipse編寫第一個web應用程序

  在新建項目之前首先在MyEclipse中配置jre和tomcat。步驟Window-Preference-Java-Install JREs-Add;Window-MyEclipse-Servers-Tomcat(注意設置tomcat的jre并將服務器設置為Enabled)。

  接下來在MyEclipse中啟動Tomcat服務器:

  

  測試首頁http://localhost:8080/證明Tomcat正常啟動,我們就可以在MyEclipse中啟動和發布Web應用程序了。

  New一個WebProject會生成以下的目錄結構(默認在WebRoot目錄下有一個index.jsp)。

  發布該WebApp。

  1.8理解項目的虛擬路徑

  

    該虛擬路徑是可以修改的項目上右鍵屬性-MyEclipse-Web?!?/p>

    重新部署,瀏覽器需要使用使用http://localhost:8080/hello/index.jsp訪問了。

  1.7修改Tomcat默認端口

    修改conf目錄下的server.xml的以下標記:

 <Connector connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443"/>
2.jsp語法基礎  2.1jsp簡介

    jsp的全名是Java Server Page,是一個簡化的Servlet設計,它實現了在java當中使用html標記。jsp是一種動態網頁技術,符合J2EE標準。jsp和Servlet一樣也是在服務器端執行的。

  2.2常見動態網站開發技術對比
平臺特點
jsp跨平臺,安全性高,適合開發大型的、企業級的Web應用、分布式應用(Hadoop)。例如:12306、10086.cn、網上銀行
asp.net簡單易學,安全性和跨平臺性差
php簡單、高效、成本低、開發周期短,適合中小型企業的Web應用開發(LAMP)

  2.3jsp頁面元素簡介以及page指令

    

    

    page指令語法:

<%@ page 屬性1="屬性值" 屬性2="屬性值1,屬性值2" 屬性n="屬性值n"%>
屬性描述默認值
languagejsp頁面所使用的腳本語言java
import引用腳本語言中所要使用的類文件
contentType指定jsp頁面的編碼text/html,ISO-8859-1

  新建一個java web工程默認的jsp頁面開頭有一個page指令:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

  默認的編碼是ISO-8859-1,不支持中文,這里建議使用另一個屬性contentType。將第一行改為如下:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

  這樣就支持中文了。

  page指令的全部屬性如下:

 1 <%@page 2     [language="Java"] 3     [extends="package.class"] // 指定JSP頁面編譯所產生的Java類所繼承的父類,或所實現的接口。 4     [import="package.class│package.*,…"] 5     [session="true│false"] 6     [buffer="none│8kb│size kb"] 7     [autoFlush="true│false"] 8     [isThreadSafe="true│false"] 9     [info="text"]10     [errorPage="relativeURL"] // 指定錯誤處理頁面。因為JSP內建了異常機制支持,所以JSP可以不處理異常。11     [contentType="mimeType[;charset=characterSet]"│"text/html;charSet=ISO8859-1"]12     [isErrorPage="true│false"] // 設置本JSP頁面是否為錯誤處理程序。13 %>

    注意:除page指令中的import屬性之外,其他屬性均只能設置一次。

  2.4jsp注釋

  分為3種:html注釋,jsp注釋,jsp腳本注釋。語法:

1 <!-- html注釋 -->2 <%-- jsp注釋 --%>3 <%4         /*這里是jsp腳本注釋 有兩種*/5        6         //單行注釋7 8          /*多行注釋*/9 %>

  例如:

 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9   <head>10     <base href="<%=basePath%>">11     12     <title>My JSP 'index.jsp' starting page</title>13     <meta http-equiv="pragma" content="no-cache">14     <meta http-equiv="cache-control" content="no-cache">15     <meta http-equiv="expires" content="0">    16     <meta http-equiv="keyWords" content="keyword1,keyword2,keyword3">17     <meta http-equiv="description" content="This is my page">18     <!--19     <link rel="stylesheet" type="text/css" href="styles.css">20     -->21   </head>22   23   <body>24     <h1>歡迎你</h1>25     <!-- 這是html注釋,客戶端可可見 -->26     <%-- 這是jsp注釋,客戶端不可見 --%>27     <%28         /*這里是jsp腳本注釋29         有兩種*/30         //單行注釋31         /*多行注釋*/32      %>33   </body>34 </html>

  將項目部署到Tomcat,客戶端用瀏覽器查看源代碼:

  2.5jsp腳本

    在jsp頁面中執行的java代碼。語法:

<% java代碼 %>
 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9   <head>10     <base href="<%=basePath%>">11     12     <title>My JSP 'index.jsp' starting page</title>13     <meta http-equiv="pragma" content="no-cache">14     <meta http-equiv="cache-control" content="no-cache">15     <meta http-equiv="expires" content="0">    16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">17     <meta http-equiv="description" content="This is my page">18     <!--19     <link rel="stylesheet" type="text/css" href="styles.css">20     -->21   </head>22   23   <body>24     <h1>歡迎你</h1>25     <hr>26     <%27         out.println("通過jsp內置對象out對象打印輸出");28      %>29   </body>30 </html>
    2.6jsp聲明

      jsp頁面中定義變量或者方法。語法:

<%! java代碼 %>

  例如:

1  <%!2         String s = "張三";    //聲明一個String類型的變量3         int add(int x,int y){    //聲明一個返回值為int類型的方法4             return x+y;5         }6   %>
  2.7jsp表達式

    jsp頁面中執行的表達式。語法(注意=緊挨著百分號,表達式末尾沒有分號):

<%=表達式 %>
 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9   <head>10     <base href="<%=basePath%>">11     12     <title>My JSP 'index.jsp' starting page</title>13     <meta http-equiv="pragma" content="no-cache">14     <meta http-equiv="cache-control" content="no-cache">15     <meta http-equiv="expires" content="0">    16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">17     <meta http-equiv="description" content="This is my page">18     <!--19     <link rel="stylesheet" type="text/css" href="styles.css">20     -->21   </head>22   23   <body>24     <h1>歡迎你</h1>25     <hr>26     <!-- 這是html注釋,客戶端可可見 -->27     <%!28         String s = "張三";    //聲明一個String類型的變量29         int add(int x,int y){    //聲明一個返回值為int類型的方法30             return x+y;31         }32      %>33      你好:<%=s %><br>34      令x=10,y=5,則x+y = <%=add(10, 5) %>35   </body>36 </html>

  運行結果:

  2.8jsp頁面生命周期

    

    jspService()方法被調用來處理客戶端的請求。對每一個請求,JSP引擎創建一個新的線程來處理該請求。如果有多個客戶端同時請求你該jsp文件,則jsp引擎會創建多個線程(每一個客戶端請求對應一個線程)。以多線程的方式執行可以大大降低對系統的資源需求,提高系統的并發量以及縮短服務器的響應時間——但是同時要注意多線程的同步問題。由于該Servlet常駐內存,所以響應是非??斓摹?/p>

    當頁面沒有被訪問的時候work目錄下沒有相關的Servlet。如果頁面被訪問之后就會在work目錄的對應目錄生成響應的Servlet。如圖:

  打開index_jsp.java會看到以下的初始化方法:

  然后該Servlet常駐內存,創建線程處理每一個客戶端的請求。由每一個線程調用_jspService()方法來處理請求。

  如果jsp頁面內容發生了改變,jsp引擎就需要重新編譯jsp頁面。我們修改index.jsp,用瀏覽器重新訪問,則:

 2.9階段項目(九九乘法表)
 1 <%@page import="java.io.IOException"%> 2 <%@ page language="java" import="java.util.*" 3     contentType="text/html; charset=utf-8"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 7 %> 8  9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">10 <html>11 <head>12 <base href="<%=basePath%>">13 14 <title>My JSP 'multiplicationTable.jsp' starting page</title>15 16 <meta http-equiv="pragma" content="no-cache">17 <meta http-equiv="cache-control" content="no-cache">18 <meta http-equiv="expires" content="0">19 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">20 <meta http-equiv="description" content="This is my page">21 22 23 </head>24 25 <body>26     <h1>九九乘法表</h1>27     <h2>表達式的方式打印乘法表</h2>28     <%!29         //聲明表達式30         String printMultiTable(){31             StringBuilder s = new StringBuilder();32             for(int i=1;i<=9;i++){33                 for(int j=1;j<=i;j++){34                     s.append(i+" * "+j+" = "+i*j+"/t");35                 }36                 s.append("<br />");//追加換行標記,注意不能使用/n37             }38             return s.toString();39         }40      %>41     <%=printMultiTable() //調用表達式42      %>43 44     <h2>使用腳本的方式打印九九乘法表</h2>45     <%!46         //jsp小腳本47         void printMultiTable2(JspWriter out) throws IOException{48             StringBuilder s = new StringBuilder();49             for(int i=1;i<=9;i++){50                 for(int j =1;j<=i;j++){51                     s.append(i+" * "+j+" = "+i*j+"/t");52                 }53                 s.append("<br />");54             }55             out.println(s.toString());56         }57      %>58 59     <%60          //調用腳本61      printMultiTable2(out);62       %>63 </body>64 </html>

  運行結果:

3.jsp內置對象

  3.1jsp內置對象簡介

      JSP內置對象是Web容器創建的一組對象,不需要使用new關鍵字,JSP規范將它們完成了默認初始化(由JSP頁面對應Servlet的_jspService()方法來創建這些實例)。例如打印九九乘法表的jsp小腳本中使用的out對象就是jsp內置對象。

 1 <%! 2         //jsp小腳本 3         void printMultiTable2(JspWriter out) throws IOException{ 4             StringBuilder s = new StringBuilder(); 5             for(int i=1;i<=9;i++){ 6                 for(int j =1;j<=i;j++){ 7                     s.append(i+" * "+j+" = "+i*j+"/t"); 8                 } 9                 s.append("<br />");10             }11             out.println(s.toString());//這里的out就是jsp內置對象12         }13 %>

    JSP一共有9個內置對象,其中常用的內置對象有5個,如圖所示:

  3.3out對象

    緩沖區(Buffer)就是內存中用來保存臨時數據的一塊區域。關于緩沖區有一個很形象的例子:比如我們煮好了飯放在鍋里,如果我們一粒一粒地來吃米飯就不知道吃到猴年馬月,拿來一個碗來一碗一碗吃,豈不快哉!這里的碗就充當了緩沖區的概念。其實IO的本質就是直接操作字節,但是效率太慢所以引入了緩沖區。

    out對象是JspWriter類的一個實例——是向客戶端輸出內容的常用對象,該對象的常用方法:

1 void println(String message);   // 向客戶端打印字符串2 void clear();                   // 清除緩沖區內容,如果在flush之后調用會拋出異常3 void clearBuffer();             // 清除緩沖區內容,如果在flush之后調用不會拋出異常4 void flush();                   // 將緩沖區的內容輸出到客戶端5 int getBufferSize();            // 返回緩沖區的大?。ㄗ止潱?,默認是06 int getRemaining();             // 返回緩沖區可用容量7 boolean isAutoFlush();          // 返回緩沖區滿的時候是自動清空還是拋出異常8 void close();                   // 關閉輸出流

    下面是一個簡單的示例:

 1 <h1>JSP的out內置對象</h1> 2     <% 3         //jsp腳本 4         out.println("<h2>靜夜思</h2>"); 5         out.println("李白<br /><br />"); 6         out.println("窗前明月光,<br />"); 7         out.println("疑是地上霜。<br />"); 8         out.println("舉頭望明月,<br />"); 9         out.println("低頭思故鄉。<hr />");10      %>11      <!-- JSP表達式 -->12      緩沖區大小:<%=out.getBufferSize() %>字節。<br />13     剩余緩沖區(可用緩沖區):<%=out.getRemaining() %>字節。<br /> 14     是否自動清空緩沖區:<%=out.isAutoFlush() %><br />

  運行結果:

 1 <h1>JSP的out內置對象</h1> 2     <% 3         //jsp腳本 4         out.println("<h2>靜夜思</h2>"); 5         out.println("李白<br /><br />"); 6         out.println("窗前明月光,<br />"); 7         out.flush();//將緩沖區中的內容輸出到客戶端 8         out.println("疑是地上霜。<br />"); 9         out.println("舉頭望明月,<br />");10         out.println("低頭思故鄉。<hr />");11      %>12      <!-- JSP表達式 -->13      緩沖區大?。?lt;%=out.getBufferSize() %>字節。<br />14     剩余緩沖區(可用緩沖區):<%=out.getRemaining() %>字節。<br /> 15     是否自動清空緩沖區:<%=out.isAutoFlush() %><br />  

  如果在第7行強制刷新緩沖區,則輸出的頁面不會有任何變化,僅僅是可用緩沖區的數量變多了而已【因為flush清空了緩沖區】

 1 <% 2         //jsp腳本 3         out.println("<h2>靜夜思</h2>"); 4         out.println("李白<br /><br />"); 5         out.println("窗前明月光,<br />"); 6          7     out.flush();//將緩沖區中的內容輸出到客戶端 8     out.clear();//在flush之后調用clear,將會拋出異常 9     10         out.println("疑是地上霜。<br />");11         out.println("舉頭望明月,<br />");12         out.println("低頭思故鄉。<hr />");13 %>

  運行結果:

 1  <% 2         //jsp腳本 3         out.println("<h2>靜夜思</h2>"); 4         out.println("李白<br /><br />"); 5         out.println("窗前明月光,<br />"); 6          7     out.flush();//將緩沖區中的內容輸出到客戶端 8     out.clearBuffer();//在flush之后調用clearBuffer不會拋出異常 9     10         out.println("疑是地上霜。<br />");11         out.println("舉頭望明月,<br />");12         out.println("低頭思故鄉。<hr />");13 %>

  運行結果:

  3.4post和get提交方式的區別
<form name="regForm" action="處理腳本"  method="提交方式[post|get]"></form>
  • get:以明文的方式通過URL提交數據,提交的數據最大不超過2K。適合提交數據量小,安全性不高的數據【例如:搜索和查詢】
  • post:將用戶提交的數據封裝在URL HEADER內。適合提交數據量大,安全性高的數據【例如:注冊、修改、上傳】 
  • 下面以用戶登錄的例子比較兩者的區別:
    login.jsp頁面
1    請輸入用戶名和密碼:2     <form  name = "loginForm" action = "dologin.jsp" method = "get">3     用戶名:<input type="text" name="username" value="" maxlength = "15" /><br />4     密碼:<input type="password" name="password" maxlength="16" value="" /><br />5     <input type="submit" value="提交" />6     </form>

  處理登錄的動作腳本dologin.jsp僅僅是顯示一句話"登錄成功"。

  運行結果:

  將用戶登錄表單的get方式改為post。

  3.5request對象

    客戶端的請求被封裝在request對象中,通過它才能了解到客戶端的需求,然后做出響應。它是HttpServletRequest對象的實例。request對象具有請求域,即:完成客戶端的請求之前,該對象一直有效。常用方法如下:

/* 兩個比較常用的方法 */ 1 String getParameter(String name);            // 返回name指定參數的參數值 2 String[] getParameterValues(String name);    // 返回包含name的所有值的數組 3 void setAttribute(String,Object);            // 存儲此請求中的屬性 4 String getContentType();                     // 返回請求體的MIME類型 5 Stirng getProtocol();                        // 返回請求所用的協議和版本號 6 String getServerName();                      // 返回接受請求的服務器的主機名 7 int getServerPort();                         // 返回服務器接受此請求所用的端口號 8 String getCharacterEncoding();               // 返回字符編碼方式【只能解決post方式的亂碼問題】 9 void setCharacterEncoding();                 // 設置請求的字符編碼方式10 int getContentLength();                      // 返回請求體的長度(字節)11 String getRemoteAddr();                      // 返回發送此請求的客戶端IP12 String getRealPath(String path);             // 返回虛擬路徑的真實路徑13 String request.getContextPath();             // 返回上下文路徑 

  以用戶注冊頁面為例(用戶在注冊頁reg.jsp完善信息后提交給request.jsp來處理):

  用戶注冊頁reg.jsp

 1    請輸入相關信息完成注冊<br /> 2     <form action="request.jsp" name="regForm" method="post"> 3             用戶名:<input type="text" name = "username" /><br /> 4             密碼:<input type="password" name = "password" /><br /> 5             愛好: 6         <input type="checkbox" name = "favorite" value="read"/>讀書 7         <input type="checkbox" name = "favorite" value="music"/>音樂 8         <input type="checkbox" name = "favorite" value="movie"/>電影 9         <input type="checkbox" name = "favorite" value="internet"/>上網<br />10         <input type="submit" value="提交" />  11     </form>

   處理用戶注冊頁的request.jsp

 1  <h1>request內置對象</h1><br  /> 2    3     用戶名:<%=request.getParameter("username") %><br /> 4     密碼:<%=request.getParameter("password") %><hr /> 5     愛好:<br /> 6     <% 7         String[]favorites = request.getParameterValues("favorite"); 8         for(String str:favorites){ 9             out.print(str+"&nbsp;&nbsp;");10         }11     %>

    運行結果:

  但是以上頁面存在一個問題:假如我們在用戶名中輸入中文:

  這時只要再request.jsp中設置字符集和reg.jsp一樣即可:

 1 <h1>request內置對象</h1><br  /> 2     <!-- 設置字符集,防止出現中文亂碼 --> 3     <% request.setCharacterEncoding("utf-8"); %> 4     用戶名:<%=request.getParameter("username") %><br /> 5     密碼:<%=request.getParameter("password") %><hr /> 6     愛好:<br /> 7     <% 8         String[]favorites = request.getParameterValues("favorite"); 9         for(String str:favorites){10             out.print(str+"&nbsp;&nbsp;");11         }12     %>

  除了可以使用表單的方式傳遞數據給request對象,也可以使用URL傳參的方式傳遞數據給request對象:

  reg.jsp

<a href="request.jsp?username=root&password=toor&favorite=read&favorite=internet">測試URL傳參</a>

  request.jsp(不變)

 1 <h1>request內置對象</h1><br  /> 2     <!-- 設置字符集,防止出現中文亂碼 --> 3     <% request.setCharacterEncoding("utf-8"); %> 4     用戶名:<%=request.getParameter("username") %><br /> 5     密碼:<%=request.getParameter("password") %><hr /> 6     愛好:<br /> 7     <% 8     String[]favorites; 9     if((favorites=request.getParameterValues("favorite"))!=null){10         for(String str:favorites){11             out.print(str+"&nbsp;&nbsp;");12         }13     }14    %>

  運行結果:

  如果我們在URL傳參中傳入了中文數據,同樣會出現亂碼問題:

<a href="request.jsp?username=你好&password=toor&favorite=read&favorite=internet">測試URL傳參</a>

  此時通過request.setCharacterEncoding()方法就無法解決亂碼問題了【一個良好的解決方案是修改tomcat的配置文件server.xml】

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

向request對象中添加鍵值對:

reg.jsp:

 1   請輸入相關信息完成注冊<br /> 2     <form action="request.jsp" name="regForm" method="post"> 3             用戶名:<input type="text" name = "username" /><br /> 4            密碼:<input type="password" name = "password" /><br /> 5             愛好: 6         <input type="checkbox" name = "favorite" value="read"/>讀書 7         <input type="checkbox" name = "favorite" value="music"/>音樂 8         <input type="checkbox" name = "favorite" value="movie"/>電影 9         <input type="checkbox" name = "favorite" value="internet"/>上網<br />10         <input type="submit" value="提交" />  11     </form>

  request.jsp

 1 <h1>request內置對象</h1><br  /> 2     <!-- 設置字符集,防止出現中文亂碼 --> 3     <% request.setCharacterEncoding("utf-8"); %> 4     <% 5      //在request對象中保存一個email屬性 6     request.setAttribute("email","io@Gmail.com"); 7     8      %> 9     用戶名:<%=request.getParameter("username") %><br />10     密碼:<%=request.getParameter("password") %><hr />11     愛好:<br />12     <%13     String[]favorites;14     if((favorites=request.getParameterValues("favorite"))!=null){15         for(String str:favorites){16             out.print(str+"&nbsp;&nbsp;");17         }18     }19      %>20   <br />郵箱:<%=request.getAttribute("email") %>  

  運行結果:

 1  <h1>request內置對象</h1><br  /> 2     <!-- 設置字符集,防止出現中文亂碼 --> 3     <% request.setCharacterEncoding("utf-8"); %> 4     <% 5      //在request對象中保存一個email屬性 6     request.setAttribute("email","io@gmail.com"); 7     8      %> 9     用戶名:<%=request.getParameter("username") %><br />10     密碼:<%=request.getParameter("password") %><hr />11     愛好:<br />12     <%13     String[]favorites;14     if((favorites=request.getParameterValues("favorite"))!=null){15         for(String str:favorites){16             out.print(str+"&nbsp;&nbsp;");17         }18     }19      %>20   <br />郵箱:<%=request.getAttribute("email") %>  <hr />21   請求體的MIME類型:<%=request.getContentType() %><br />22   請求體的協議及版本號:<%=request.getProtocol() %><br />23   服務器主機名:<%=request.getServerName() %><br />24   服務器端口號:<%=request.getServerPort() %><br />25   請求的字符編碼:<%=request.getCharacterEncoding() %><br />26   請求的文件長度:<%=request.getContentLength() %>字節<br />27   請求的客戶端的IP:<%=request.getRemoteAddr() %><br />28   請求的真實路徑:<%=request.getRealPath("request.jsp") %><br />29   請求的上下文路徑:<%=request.getContextPath() %>

  運行結果:

  3.6response對象

    response對象包含了響應客戶請求的相關信息,但是在JSP中很少直接使用到它。它是HttpServletResponse類的實例。response對象具有頁面作用域——即:訪問一個頁面時,該頁面的response只對本次訪問有效,其他頁面的response對象對當前頁面無效。常用方法如下:

1 String getCharacterEncoding();     // 返回響應所用的編碼2 void setContentType();             // 設置響應的MIME類型3 PrintWriter getPrintWriter();      // 返回一個可以向客戶端輸出字符的對象【注意區別于out內置對象】4 sendRedirect(String location);     // 重定向客戶端的請求

  response.jsp

 1 <%@page import="java.io.PrintWriter"%> 2 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 3 <% 4     response.setContentType("text/html;charset=utf-8");//設置響應的MIME類型 5      6     out.println("<h1>response內置對象</h1><hr />"); 7      8     PrintWriter outer = response.getWriter();//獲得輸出流對象 9     outer.println("我是response對象生成的outter對象,在頁面中總是在前面輸出");10 %>

  運行結果:

  運行結果很是奇怪:明明out對象的輸出在代碼中位于前面。但是結果卻是PrintWriter的打印結果在前面,根本原因就是:PrintWriter的對象的輸出總是在最前面。如果我們需要讓標題先輸出,可以使用內置對象out的flush()方法強制刷新緩沖,向頁面輸出——保證標題出現在最前面。

  請求重定向——當用戶請求response.jsp的時候馬上跳轉到login.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%><%    response.sendRedirect("login.jsp"); // 請求重定向%>

  3.7請求重定向與請求轉發的區別

  • 請求重定向:客戶端行為response.sendResponse(),從本質上講相當于兩次請求,前一次的請求對象不會保存,瀏覽器的URL欄會改變。
  • 請求轉發:服務器行為request.getRequestDipatcher().forword(req,resp);是一次請求,轉發后請求對象會被保存,瀏覽器的URL不會改變。
  • 例如還是用原來的例子:我們在reg.jsp中指定處理頁面的腳本是response.jsp而在response.jsp中我們重定向到request.jsp。觀察request.jsp的輸出:

  如果我們在response.jsp中使用請求轉發:

1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>2 <%3     //請求轉發4     request.getRequestDispatcher("request.jsp").forward(request, response);5 %>

  運行結果:

  3.8session對象

    Session客戶端與服務器的一次會話。Web中的Session表示用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間——也就是用戶瀏覽這個網站所花費的時間。在服務器的內存中保存著不同用戶的Session。

  session對象的常用方法:

1 long getCreationTime();                          // 返回session的創建時間2 String getId();                                  // 返回session創建時JSP引擎為它設定的唯一ID號3 Object setAttribute(String name,Object value);   // 使用指定名稱將對象綁定到此會話4 Object getAttribute(String name);                // 返回此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下則返回null5 String[] getValueNames();                        // 返回一個包含此Session所有可用屬性的數組6 int getMaxInactiveInterval();                    // 返回兩次請求間隔多長時間此session被取消【單位:秒】

  sesseion_page1.jsp

 1    <h1>session內置對象</h1> 2     <h2>session_page1.jsp</h2> 3     <% 4         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 5         String date = sdf.format(new Date(session.getCreationTime())); 6         out.print("session的創建時間:" + date); 7         session.setAttribute("username", "admin"); // 向session中設置屬性 8      %> 9    <br />Session的ID號:<%=session.getId() %><br />10    從session中獲取用戶名:<%=session.getAttribute("username") %>11    12    <a href="session_page2.jsp" target="_blank">以新窗口的方式打開session_page2.jsp</a>

  session_page2.jsp

1     <h2>session_page2.jsp</h2>2     <% 3         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 4         String date = sdf.format(new Date(session.getCreationTime())); 5         out.print("session的創建時間:" + date); 6      %>7    <br />Session的ID號:<%=session.getId() %><br />8    從session中獲取用戶名:<%=session.getAttribute("username") %>

  運行結果:

  可以獲取session中保存的屬性集合以及設置session的有效期:

 1  <%       2         session.setMaxInactiveInterval(5);//設置session的有效期為5s 3          4         session.setAttribute("username", "admin"); // 向session中設置屬性 5         session.setAttribute("password", "123456"); 6         session.setAttribute("age", 16); 7   %> 8  9  <%10   //獲取session中保存的屬性11   String[]names=session.getValueNames();12       if(names!=null){13           for(String str:names){14               out.print(str+"/t");15           }16       }17    %>
  Session的生命周期:

  • 創建:當客戶端第一次訪問某個jsp頁面或者Servlet的時候,服務器會為當前會話創建一個SessionId。每次客戶端向服務器發送請求的時候都會攜帶此SessionId,服務端會對此SessionId進行檢驗——判斷是否屬于同一次會話。
  • 活動階段:某次會話中通過超鏈接打開新的頁面;只要當前頁面沒有全部關閉,打開新的瀏覽器窗口訪問同一項目資源也屬于同一會話。注意:原有的會話仍然存在,只不過再也沒有客戶端會攜帶此sessionId交給服務器檢驗。——創建一個新的會話并不意味著原有會話消失,除非超時。
  • 銷毀。
  Tomcat如何進入后臺管理系統?

   修改/conf/tomcat-user.xml為以下:

1 <?xml version="1.0" encoding="UTF-8"?>2 <tomcat-users>3   <role rolename="admin-gui"/>4   <role rolename="manager-gui"/>5   <user username="admin" password="admin" roles="admin-gui,manager-gui"></user>6 </tomcat-users>

  在瀏覽器中打開session_page1.jsp然后通過session_page1.jsp的超鏈接打開session_page2.jsp在后臺管理系統中查看:

  如果我們在session創建之后調用session.invalidate()方法,例如:我們在session_page1.jsp中這樣寫:

 1  <h1>session內置對象</h1> 2     <h2>session_page1.jsp</h2> 3     <% 4         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 5         String date = sdf.format(new Date(session.getCreationTime())); 6         out.print("session的創建時間:" + date); 7         10         session.setAttribute("username", "admin"); // 向session中設置屬性11         session.setAttribute("password", "123456");12         session.setAttribute("age", 16);13      %>14    <br />Session的ID號:<%=session.getId() %><hr />15   session中保存的屬性有:<br />16   <%17   //獲取session中保存的屬性18   String[]names=session.getValueNames();19       if(names!=null){20           for(String str:names){21               out.print(str+"/t");22           }23       }24       session.invalidate();//銷毀session25    %>26    <a href = "session_page2.jsp" target = "_blank">點擊在新標簽頁中打開session_page2.jsp</a>

  運行結果(不斷刷新瀏覽器):

  Session默認session超時是30min設置session對象的超時有兩種方式:

  • session.setMaxInactiveInterval(5);單位是秒
  • 在web.xml中配置(單位是分鐘):
  • <session-config>        &
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线|亚洲| 欧美特黄级在线| 亚洲国产精品va在线看黑人动漫| 青青青国产精品一区二区| 久久久久久香蕉网| 久久久视频精品| 欧美精品国产精品日韩精品| 亚洲色无码播放| 久久久久一本一区二区青青蜜月| 亚洲激情在线视频| 亚洲黄色片网站| 精品magnet| 亚洲免费av电影| 中文字幕在线看视频国产欧美| 日本国产欧美一区二区三区| 欧美高清在线视频观看不卡| 91精品国产一区| 国产一区二区在线播放| 色哟哟网站入口亚洲精品| 日韩欧美在线第一页| 欧美精品videosex极品1| 久久人人爽亚洲精品天堂| 亚洲精品国产福利| 久久精品国产亚洲一区二区| 国产在线拍偷自揄拍精品| 国产精品久久久久久超碰| 国产美女久久精品香蕉69| 日韩欧美在线一区| 精品亚洲永久免费精品| 日韩视频免费大全中文字幕| 日韩视频免费在线观看| 欧美性xxxx极品hd满灌| 亚洲欧洲国产伦综合| 97久久精品视频| 国产综合香蕉五月婷在线| 97视频人免费观看| 亚洲一区二区三区视频播放| 97久久久免费福利网址| 久久不射热爱视频精品| 国产精品日韩av| 97在线视频一区| 欧美日韩国产综合新一区| 91中文字幕一区| 国产成人免费av电影| 亚洲字幕在线观看| 亚洲精品少妇网址| 97人洗澡人人免费公开视频碰碰碰| 亚洲精品国产精品久久清纯直播| 热99精品里视频精品| 国产精品久久久久久av下载红粉| 欧美激情中文字幕在线| 国产精品夜间视频香蕉| 亚洲三级免费看| 亚洲精品乱码久久久久久金桔影视| 欧美精品国产精品日韩精品| 国产精品91一区| 成人在线视频福利| 国产成人综合一区二区三区| 色噜噜狠狠狠综合曰曰曰88av| 成人中文字幕+乱码+中文字幕| 欧美成人亚洲成人日韩成人| 国产又爽又黄的激情精品视频| 俺也去精品视频在线观看| 成人a在线视频| 久久中文字幕视频| 亚洲护士老师的毛茸茸最新章节| 久久久久久久一区二区| 精品国产老师黑色丝袜高跟鞋| 少妇精69xxtheporn| 久久影院在线观看| 91成人在线观看国产| 亚洲电影在线观看| 久久久www成人免费精品张筱雨| 精品毛片三在线观看| 亚洲免费影视第一页| 国产91九色视频| 国产欧美日韩精品在线观看| 欧美日韩国产丝袜美女| 91精品综合视频| 国产精品嫩草影院久久久| 51精品国产黑色丝袜高跟鞋| 欧美日韩国产一区中文午夜| 国产97在线视频| 国产精品高潮呻吟久久av黑人| 国产丝袜一区二区三区免费视频| 久热精品视频在线免费观看| 国产精品视频最多的网站| 国产精品激情av电影在线观看| 久久精品电影网| 亚洲国产成人av在线| 欧美极品xxxx| 国产69精品久久久久久| 国产精品第二页| 亚洲精品美女久久久久| 中文字幕日韩综合av| 日韩一区二区三区国产| 国产精欧美一区二区三区| 日韩久久免费电影| 精品国产一区二区三区久久久| 亚洲第一区中文99精品| 亚洲影院色无极综合| 97视频在线观看播放| 日本精品久久电影| 日本高清+成人网在线观看| 自拍视频国产精品| 亚洲最大的免费| 日日骚久久av| 亚洲福利在线看| 亚洲国模精品一区| 久久精品国产欧美亚洲人人爽| 亚洲人a成www在线影院| 国产精品日韩在线| 中文字幕欧美日韩精品| 精品成人国产在线观看男人呻吟| 欧美精品久久久久久久免费观看| 2019亚洲日韩新视频| 91精品国产高清久久久久久久久| 91精品啪aⅴ在线观看国产| 国产91在线高潮白浆在线观看| 日韩有码片在线观看| 久久这里只有精品99| 日韩精品丝袜在线| 大伊人狠狠躁夜夜躁av一区| 亚洲精品国产综合区久久久久久久| 国产精品777| 亚洲精品乱码久久久久久金桔影视| 亚洲午夜精品久久久久久久久久久久| 精品久久久香蕉免费精品视频| 亚洲a在线播放| 成人激情视频免费在线| 日韩精品亚洲精品| 欧美午夜视频一区二区| 午夜精品在线视频| 亚洲欧美一区二区三区在线| 国产一区av在线| 最近2019年日本中文免费字幕| 日韩在线视频二区| 91久久精品国产91久久| 97婷婷大伊香蕉精品视频| 欧美成人高清视频| 欧美电影免费观看电视剧大全| 日本久久久久久久久久久| 欧美大片在线免费观看| 欧美午夜美女看片| 欧美成人中文字幕在线| 日韩av片永久免费网站| 久久九九免费视频| 国产一区欧美二区三区| 国模精品视频一区二区| 26uuu久久噜噜噜噜| 九九热这里只有精品6| 久久久久久美女| 麻豆国产精品va在线观看不卡| 国产精品免费电影| 久久香蕉国产线看观看网| 久久99久久99精品免观看粉嫩| 亚洲国产成人精品女人久久久| 欧美激情2020午夜免费观看| 一本大道久久加勒比香蕉| 国内精品400部情侣激情| 久久亚洲欧美日韩精品专区| 日韩高清电影好看的电视剧电影| 亚洲一区二区自拍| 欧美午夜宅男影院在线观看|