伺服器為什麼可以用request方法
A. Request信號什麼意思
代理伺服器英文全稱是Proxy Server,其功能就是代理網路用戶去取得網路信息。形象的說:它是網路信息的中轉站。在一般情況下,我們使用網路瀏覽器直接去連接其他 Internet站點取得網路信息時,須送出Request信號來得到回答,然後對方再把信息以bit方式傳送回來。代理伺服器是介於瀏覽器和Web伺服器之間的一台伺服器,有了它之後,瀏覽器不是直接到Web伺服器去取回網頁而是向代理伺服器發出請求,Request信號會先送到代理伺服器,由代理伺服器來取回你所需要的信息並傳送給你的瀏覽器。而且,大部分代理伺服器都具有緩沖的功能,就好像一個大的緩沖池,它有很大的存儲空間,它不斷將新取得數據儲存到它本機的存儲器上,如果你的瀏覽器所請求的數據就在它本機的存儲器上而且是最新的,那麼它就不重新從Web伺服器取數據,而直接將存儲器上的數據傳送給用戶的瀏覽器。一般用戶的可用帶寬都較小,但是通過帶寬較大的代理伺服器與目標主機相連能大大提高瀏覽速度和效率。更重要的是它所提供的安全功能。通過代理伺服器訪問目標主機,可以將用戶本身的IP地址隱藏起來,目標主機能看到的只是代理伺服器的IP地址而已。很多網路黑客就是通過這種辦法隱藏自己的真實IP,從而逃過監視。
常用代理的類型可以按所採用協議類型分為http代理、socks4代理和socks5代理。不論採用哪種代理,都需要知道代理伺服器的一些基本信息:
① 代理伺服器的IP地址
② 代理服務所在的埠
③ 這個代理服務是否需要用戶認證?如果需要,您要向提供代理的網路管理員申請一個用戶和口令。
什麼是HTTP代理? 什麼是socks代理?
什麼是HTTP代理:www對於每一個上網的人都再熟悉不過了,www連接請求就是採用的http協議,所以我們在瀏覽網頁,下載數據(也可採用ftp協議)是就是用http代理。它通常綁定在代理伺服器的80、3128、8080等埠上。
什麼是socks代理:相應的,採用socks協議的代理伺服器就是SOCKS伺服器。是一種通用的代理伺服器。Socks是個電路級的底層網關,是 DavidKoblas在1990年開發的,此後就一直作為Internet RFC標準的開放標准。Socks 不要求應用程序遵循特定的操作系統平台,Socks 代理與應用層代理、 HTTP 層代理不同,Socks 代理只是簡單地傳遞數據包,而不必關心是何種應用協議(比如FTP、HTTP和NNTP請求)。所以,Socks代理比其他應用層代理要快得多。它通常綁定在代理伺服器的1080埠上。
如果您在企業網或校園網上,需要透過防火牆或通過代理伺服器訪問 Internet就可能需要使用SOCKS。一般情況下,對於撥號上網用戶都不需要使用它。注意,瀏覽網頁時常用的代理伺服器通常是專門的http代理,它和SOCKS是不同的。因此,您能瀏覽網頁不等於 您一定可以通過SOCKS訪問Internet。常用的防火牆,或代理軟體都支持SOCKS,但需要其管理員打開這一功能。如果您不確信您是否需要SOCKS或是否有SOCKS可用,請與您的網路管理員聯系。為了使用socks,您需要了解一下內容:
① SOCKS伺服器的IP地址
② SOCKS服務所在的埠
③ 這個SOCKS服務是否需要用戶認證?如果需要,您要向您的網路管理員申請一個用戶和口令
知道了上述信息,您就可以把這些信息填入「網路配置」中,或者在第一次登記時填入,您就可以使用socks代理了。
在實際應用中SOCKS代理可以用作為:電子郵件、新聞組軟體、網路傳呼ICQ、網路聊天MIRC和各種游戲應用軟體當中。
什麼是socks4和socks5代理?
socks4和socks5都屬於socks協議,只是由於所支持的具體應用不同而存在差異。socks4代理只支持TCP應用,而socks5代理則可以支持TCP和UDP兩種應用。不過由於socks5代理還支持各種身份驗證機制,伺服器端域名解析等,而socks4代理沒有,所以通常對外開放的 socks代理都是socks4代理,因此,UDP應用通常都不能被支持。也就是說,socks4能乾的socks5都可以干,反過來就不行了
B. servlet中什麼時候用request.getParameter
request.getParameter 方法的用途很明確的。
就是用來獲得提交的數據。提交的數據一般是指
GET方式或者POST方法提交上來的數據。
例如:
<form method="GET" >
...
<input name="aaa" value="111" >
...
</form>
那麼在提交時,servlet就能夠通過request.getParameter("aaa")得到提交的數據。
注意不要和 request.getAttribute() 方法搞混了。這個方法不能得到提交的數據。
只能用於相同服務下的servlet與servlet之間,servlet與jsp,jsp與servlet之間傳遞
數據。
C. java中request是個什麼東東,干什麼用的
request這個對象不用事先宣告,就可以在JSP網頁中使用,在轉譯為Servlet之後,它會轉換為javax.servlet.http.HttpServletRequest型態的對象,HttpServletRequest對象是有關於客戶端所發出的請求之對象,只要是有關於客戶端請求的信息,都可以藉由它來取得,例如請求標頭、請求方法、請求參數、使用者IP等等信息。
request的主要方法:
getParameterNames():取得客戶端所發出的請求參數名稱.
getParameter():可以讓您指定請求參數名稱,以取得對應的設定值.
getServerName():請求的伺服器.
getProtocol():使用協議.
getMethod():請求方法.
getServerPort():請求埠號.
getContextPath():Context路徑.
getServletPath(): Servlet路徑.
getRequestURI():URI路徑.
getQueryString():查詢字元串.
getRemoteAddr():使用者主機IP.
getRemotePort():使用者使用埠號.
簡單來說就是取值用的。
D. 什麼情況下頁面沒有參數值為什麼服務端可以用request.getParameter("參數名")來接收客戶端的參數值
而request.getparameter則是則是的用在servlet或者action中,它的作用是接受表單提交來的數據,比如你的jsp頁面中的表單提交的數據。所以兩者的區別大概如下:requestScope的用於展示頁面,從request對象中取出對象或者變數來顯示,而request中的對象或者變數也是程序員通過手動的方式request.setAttribute方法來放入request對象中的而request.getparameter則的應用於後台的方法中,它的參數不是程序員手動設置的,而是由表單來接受用戶輸入的值會隨著用戶的請求被放入request對象中。補充:另外${requestScope}這叫EL表達式,它和JSP頁面結合的更加緊密,使用這種方式可以讓JSP看起來整齊和美觀而<%=request.getparameter%這種方式則是腳本方式,也就是在jsp中嵌入java的代碼,jsp中過多的嵌入腳本使得頁面臃腫,還有顯示的html和java的邏輯代碼混在一起在後期維護的時候非常困哪
E. 為什麼用request.getRemoteAddr獲得的全是127.0.0.1
獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1或192.168.1.110,而並不是客戶端的真實IP。
經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭信息中,增加了X-FORWARDED-FOR信息。用以跟蹤原有的客戶端IP地址和原來客戶端請求的伺服器地址。當我們訪問index.jsp/時,其實並不是我們瀏覽器真正訪問到了伺服器上的index.jsp文件,而是先由代理伺服器去訪問index.jsp ,代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問index.jsp的,所以index.jsp中通過request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。
於是可得出獲得客戶端真實IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
獲得客戶端真實IP地址的方法二:
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
可是,如果通過了多級反向代理的話,X-Forwarded-For的值並不止一個,而是一串IP值,究竟哪個才是真正的用戶端的真實IP呢?
答案是取X-Forwarded-For中第一個非unknown的有效IP字元串。如:
X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用戶真實IP為: 192.168.1.110
F. 在JSP中,可以通過request.getParameter方式獲得客戶端傳遞給伺服器的數據
<%request.getParameter("a");%>
我不建議寫到JSP中,一般不會這么寫。
應該寫在後台的java程序里。
G. 可以使用request對象訪問任何http請求傳遞的信息,它有多個對象集合,以下不是re
1、Application 對象
可以使用 Application 對象使給定應用程序的所有用戶共享信息。
2、Request 對象
可以使用 Request 對象訪問任何用 HTTP 請求傳遞的信息,包括從 HTML 表格用 POST 方法或 GET 方法傳遞的參數、cookie 和用戶認證。Request 對象使您能 夠訪問發送給伺服器的二進制數據,如上載的文件。
3、Request對象的五個集合:
1)、QueryString:在發送一個請求是,客戶機可在URL內,文件名包含信息的名/值對。此集合存儲URL中提供的任何值。
2)、Form:如果客戶機發送一個FROM請求,且設置method屬性為post,則表單元素的值被存儲在此集合中。
3)、ServerVariables:Web伺服器自身存儲了大量有關此請求的信息,包含在HTTP伺服器變數中。這些信息可作為一個集合使用。
4)、Cookies:如果客戶機正從伺服器接收cookie,它發送信息到伺服器,而伺服器將其存放在Cookies集合中。
5)、ClientCertificate:客戶機證書是一種在客戶機與伺服器間交換的數字證書,它驗證試圖與伺服器聯絡的用戶的身份。
4、Response 對象
可以使用 Response 對象控制發送給用戶的信息。包括直接發送信息給瀏覽器、 重定向瀏覽器到另一個 URL 或設置 cookie 的值。
5、Server 對象
Server 對象提供對伺服器上的方法和屬性進行的訪問。最常用的方法是創建 Ac tiveX 組件的實例 (Server.CreateObject)。其他方法用於將 URL 或 HTML 編碼 成字元串,將虛擬路徑映射到物理路徑以及設置腳本的超時期限。
6、Session 對象
可以使用 Session 對象存儲特定的用戶會話所需的信息。當用戶在應用程序的頁 之間跳轉時,存儲在 Session 對象中的變數不會清除;而用戶在應用程序中訪問 頁時,這些變數始終存在。也可以使用 Session 方法顯式地結束一個會話和設置 空閑會話的超時期限。
7、ObjectContext 對象
可以使用 ObjectContext 對象提交或撤消由 ASP 腳本初始化的事務
H. 簡述在客戶端/伺服器端模式下, Request對象和Response對象的聯系和區別
request對象代表和請求所有相關的信息。當你請求處理結束了,request對象也就銷毀掉。
response表示響應給客戶端的內容,比如客戶端頁面是否緩存、Cookie內容、客戶端是否要跳轉別頁面等。也就是response就是伺服器 響應 給客戶端信息的對象。
I. Ajax的setRequestHeader有什麼用參數可以寫什麼
在Ajax應用程序中,XmlHttpRequest對象負責將用戶信息以非同步通信地發送到伺服器端,並接收伺服器返回的響應信息和數據。
XMLHttpRequest簡介
XMLHttpRequest可以提供不重新載入頁面的情況下更新網頁,在頁面載入後在客戶端向伺服器請求數據,在頁面載入後在伺服器端接受數據,在後台向客戶端發送數據。XMLHttpRequest 對象提供了對 HTTP 協議的完全的訪問,包括做出 POST 和 HEAD 請求以及普通的 GET 請求的能力。XMLHttpRequest 可以同步或非同步返回 Web 伺服器的響應,並且能以文本或者一個 DOM 文檔形式返回內容。盡管名為 XMLHttpRequest,它並不限於和 XML 文檔一起使用:它可以接收任何形式的文本文檔。XMLHttpRequest 對象是名為 AJAX 的 Web 應用程序架構的一項關鍵功能。
XMLHttpRequest和Javascript
Javascript本身並未具備向伺服器發送請求的能力,要麼使用window.open()方法重新打開一個頁面向伺服器提交請求,要麼使用XMLHttpRequest對象發送請求。不同的是,前者是普通的即同步交互模式,而後者是非同步交互方式。
XMLHttpRequest提供了一系列的屬性和方法,來向伺服器發送非同步的http請求;在伺服器處理用戶請求的過程中,XMLHttpRequest通過屬性的狀態值來實時反映http請求所處的狀態,並根據這些狀態指示Javascript做相應的處理;當伺服器順利完成響應用戶行為的動作、並將響應數據返回時,XMLHttpRequest提供的response系列方法,可以將這些響應數據以文本、XML Document對象、Ado Stream對象或者unsigned byte數組的方式組裝起來,提供給Javascript處理。
XMLHttpRequest的五步使用法:
1、 建立XMLHttpRequest對象
2、 注冊回調函數
3、 使用open方法社會自和伺服器端交互的基本信息
4、 設置發送的數據,開始和伺服器端交互
5、 在回調函數中判斷交互是否結束,響應是否正確,並根據需要過去伺服器端返回的數據,更新頁面內容
下面我們以用戶名確認來實現XMLHttpRequest的五步使用法:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
var xmlhttp;
function submit(){
//1.創建XHLHttpRequest對象
if(window.XMLHttpRequest){
//alert("IE7,IE8 ,FireFox。Mozillar、Safari,Opera");
//IE7,IE8 ,FireFox。Mozillar、Safari,Opera
xmlhttp=new XMLHttpRequest();
if(xmlhttp.overrideMimeType){
xmlhttp.overrideMimeType("text/xml");
}
}else if(window.ActiveXObject){
//IE6,IE6.5 IE5
alert("IE6,IE6.5 IE5");
var activexName= ['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0','msxml2.xmlhttp.3.0','MSXML2.XMLHTTP.2.0',
'MSXML2.XMLHTTP.1.0'];
for(var i=0; i<activexName.length;i++){
try{
xmlhttp=new ActiveXObject(activexName[i]);
break;
}catch(e){
}
}
}
if(xmlhttp==undefined||xmlhttp==null){
alert("當前瀏覽器不支持穿件XMLHttpRequest對象,請更換瀏覽器");
return;
}
//alert(xmlhttp);
//2.注冊回調方法
xmlhttp.onreadystatechange=callback;
//錯誤的寫法callback();
//記憶一個固定用法,獲取文本框中用戶輸入的內容
var userName=document.getElementById("UserName").value;
//POST方式交互
//3.設置和伺服器端交互的相應參數
xmlhttp.open("POST","AjaxServer",true);
//POST方式交互所需要增加的代碼
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//4.設置向伺服器端發送的數據,啟動和伺服器端的交互
xmlhttp.send("name="+userName);
}
function callback(){
//5.判斷和伺服器端的交互是否完成,還有判斷伺服器端是否正確返回了數據
if(xmlhttp.readyState==4){
//表示和伺服器端的交互已經完成
//伺服器返回的http狀態碼
//200表示「成功」,404表示「未找到」。500表示「伺服器內容部錯誤」
//alert(xmlhttp.status);
if(xmlhttp.status==200){
//表示伺服器端的響應代碼是200,正確的返回了數據
//純文本數據的接受方法
var message=xmlhttp.responseText;
//XML數據對應的DOM對象的接受方法
//使用前提是,伺服器端需要設置content-type為text/xml
//var domXml=xmlhttp.responseXML;
alert("bb");
//記憶想div標簽填充文本內容的方法
var div=document.getElementById("message");
div.innerHTML=message;
}
}
}
</script>
</head>
<body>
<input type="text" id="UserName"/>
<input type="button" value="校驗用戶名" onclick="submit()"/>
<br/>
<div id="message"></div>
</body>
</html>
J. HttpServletRequest是借口怎麼可以實例化呢又為什麼可以調用裡面的方法呢如request.getParameter()
給你寫個示例吧,道理是一樣的。介面不能實例化,實例化的是介面的實現類,用的方法也是介面實現類的方法,不是介面的方法。
publicclassDemo{
publicstaticvoidmain(String[]args){
Animalanimal=newDog();//介面引用指向實現類的對象
animal.howl();//調用的是實現類的方法
Animalanimal2=newCat();
animal2.howl();
Animalanimal3=newAnimal(){//匿名內部類,也是對介面Animal的實現
@Override
publicvoidhowl(){
System.out.println("這是匿名內部類");
}
};
animal3.howl();
}
}
//狗
classDogimplementsAnimal{
@Override
publicvoidhowl(){
System.out.println("汪汪");
}
}
classCatimplementsAnimal{
@Override
publicvoidhowl(){
System.out.println("喵喵");
}
}
//動物介面
interfaceAnimal{
voidhowl();//叫聲
}