1. 程式人生 > >JSP中四種傳遞引數的方法

JSP中四種傳遞引數的方法

今天老師講了jsp中四種傳遞引數的方法,我覺得總結一下,挺好的,以備後用!

1、form表單

2、request.setAttribute();和request.getAttribute();

3、超連結:<a herf="index.jsp"?a=a&b=b&c=c>name</a>

4、<jsp:param>

下面一一舉例說明:

1、form表單

form.jsp:

<%@page contentType="text/html; charset=GB2312"%>
<html>
	<head>
		<title>
			form.jsp file
		</title>
	</head>

	<body style="background-color:lightblue">

		<h2 style="font-family:arial;color:red;font-size:25px;text-align:center">登入頁面</h2>

		<form action="result.jsp" method="get" align="center">
			姓名:<input type="text" name="name" size="20" value="" maxlength="20"><br/>
	
			密碼:<input type="password" name="password" size="20" value="" maxlength="20"><br/>

			 <!--在愛好前空一個空格,是為了排版好看些-->

			&nbsp;愛好:<input type="checkbox" name="hobby" value="唱歌">唱歌
				  <input type="checkbox" name="hobby" value="足球">足球
				  <input type="checkbox" name="hobby" value="籃球">籃球<br/><br/>
			
			<input type="submit" name="submit" value="登入">
			<input type="reset" name="reset" value="重置"><br/>
		</form>

	</body>
</html>

result.jsp:

<%@page language="java" import="java.util.*" pageEncoding="GB2312"%>
<html>
	<head>
		<title>
			result.jsp file
		</title>
	</head>

	<body bgcolor="ffffff">
		<%
		  request.setCharacterEncoding("GB2312");

		  String name=request.getParameter("name");
		  name=new String(name.getBytes("iso-8859-1"),"GB2312");

		  String pwd=request.getParameter("password");
		  String[] hobby=request.getParameterValues("hobby");//注意這裡的函式是getParameterValues()接受一個數組的資料

		%>
		  
		<%
			if(!name.equals("") && !pwd.equals(""))
			{
		%>
				
				您好!登入成功!<br/>
				姓名:<%=name%><br/>
				密碼:<%=pwd%><br/>
				愛好:<%
						 for(String ho: hobby)
						 {
							ho=new String(ho.getBytes("iso-8859-1"),"GB2312");
							out.print(ho+" ");
						 }
				       %>
		<%
			}
			else
			{
		%>
			        請輸入姓名或密碼!
		<%
			}
		%>
	</body>
</html>
注意:form表單的提交方式為get,在引數傳遞時會遇到中文亂碼的問題,一個簡單的解決方法是,將接受到的字串先轉換成一個byte陣列,再用String構造一個新的編碼格式的String,如:
 String name=request.getParameter("name");
 name=new String(name.getBytes("iso-8859-1"),"GB2312");
如果form表單的提交方式為post,解決亂碼問題的簡單辦法是,使用 request.setCharacterEncoding("GB2312");設定request的編碼方式。

為什麼會出現中文亂碼問題呢?因為Tomcat伺服器預設的系統編碼方式為iso-8859-1,你傳遞引數給伺服器時,使用的是預設的iso-8859-1的編碼方式,但是伺服器向你返回資訊時,是按page指令中設定的編碼方式,如:<%@page language="java" import="java.util.*" pageEncoding="GB2312"%>,這樣就混合了兩種編碼方式,所以會出現亂碼,所以解決之道就是統一傳遞和接收的編碼方式。

2、request.setAttribute()和request.getAttribute()

set.jsp:

<%@page contentType="text/html; charset=GB2312"%>
<html>
	<head>
		<title>
			set.jsp file
		</title>
	</head>

	<body style="background-color:lightblue">
		<%
			request.setAttribute("name","心雨");
		%>
		<jsp:forward page="get.jsp"/>
	</body>
</html>

get.jsp:
<%@page contentType="text/html; charset=GB2312"%>
<html>
	<head>
		<title>
			get.jsp file
		</title>
	</head>

	<body style="background-color:lightblue">
		<%
			out.println("傳遞過來的引數是:"+request.getAttribute("name"));
		%>
	</body>
</html>

request.setAttribute()和request.getAttribute()是配合<jsp:forward>或是include指令來實現的。

3、超連結:<a herf="index.jsp?a=a&b=b&c=c">name</a>

href.jsp:

<%@page contentType="text/html; charset=GB2312"%>
<html>
	<head>
		<title>
			href.jsp file
		</title>
	</head>

	<body style="background-color:lightblue">
		<a href="getHerf.jsp?name=心雨&password=123">傳遞引數</a>
	</body>
</html>

getHref.jsp:
<%@page contentType="text/html; charset=GB2312"%>
<html>
	<head>
		<title>
			getHref.jsp file
		</title>
	</head>

	<body style="background-color:lightblue">
		<%
			String name=request.getParameter("name");
			name=new String(name.getBytes("iso-8859-1"),"gb2312");

			out.print("name:"+name);
		%>
		<br/>
		<%
			out.print("password:"+request.getParameter("password"));
		%>
	</body>
</html>

這種傳遞引數的方法和form表單的get方式類似,是通過位址列傳遞的引數,其亂碼解決方法也和form 的get方式一樣。

4、<jsp:param>

param.jsp:

<%@page contentType="text/html; charset=GB2312"%>
<html>
	<head>
		<title>
			param.jsp file
		</title>
	</head>

	<body style="background-color:lightblue">

		<%request.setCharacterEncoding("GB2312");%>

		<jsp:forward page="getParam.jsp">
			<jsp:param name="name" value="心雨"/>
			<jsp:param name="password" value="123"/>
		</jsp:forward>

	</body>
</html>

getParam.jsp:
<%@page contentType="text/html; charset=GB2312"%>
<html>
	<head>
		<title>
			getParam.jsp file
		</title>
	</head>

	<body style="background-color:lightblue">
		<%
			String name=request.getParameter("name");
			out.print("name:"+name);
		%>
		<br/>
		<%
			out.print("password:"+request.getParameter("password"));
		%>
	</body>
</html>

這裡發現了一個奇怪的問題,還是在中文亂碼的問題上,在form表單的例子中,如果傳遞方式為post,則只需要在接收引數的頁面設定request的編碼方式就可以了,即request.setCharacterEncoding("GB2312");,注意是在接收引數的頁面,如果將該句放到form表單裡,那麼不起作用,仍然是亂碼。而在本例中,為了使傳遞的引數不出現亂碼,卻是將request.setCharacterEncoding("GB2312");放在傳送引數的頁面中,才會正常顯示中文,放在接收引數的頁面中,不起作用。也許這就是<jsp:param>和form表單傳遞引數不同的地方。為什麼會有這個不同呢?可能是因為form表單中的引數是由客戶端傳送到服務端上的,需要經過一個request的打包過程,但是<jsp:param>傳遞的引數本身就是在伺服器端的,不需要經歷由客戶端到服務端這麼一個過程,但是伺服器裡的引數傳遞是這麼回事呢?這個問題,我不知道了!真是知識是一個擴大的圓圈,你知道的越多,那麼不知道的就越多!努力吧!

相關推薦

JSP傳遞引數方法

今天老師講了jsp中四種傳遞引數的方法,我覺得總結一下,挺好的,以備後用! 1、form表單 2、request.setAttribute();和request.getAttribute(); 3、超連結:<a herf="index.jsp"?a=a&b=b

傳遞引數方法

主程式在呼叫子程式時,往往要向子程式傳遞一些引數;同樣,子程式執行後也經常要把一些結果引數傳回給主程式。主程式與子程式之間的這種資訊傳遞稱為引數傳遞。  引數傳遞有四種方法:暫存器引數傳遞,約定儲存單元引數傳遞,利用CALL後續區進行引數傳遞,利用堆疊進行引數傳遞。 一、

JSP傳值方法

url字尾追加引數Form表單設定cookies設定session1.url追加引數<a href="next.jsp?paramA=A¶mB=B...">URL 後面追加引數</a

HTTP協議交互方法學習

-s 方法學 tps style 數字 get 放置 服務 冪等 一、Get Get用於獲取信息,註意,他只是獲取、查詢數據,也就是說它不會修改服務器上的數據。而根據HTTP規範, 獲取信息的過程是安全和冪等的。GET請求的數據會附在URL之後,以“?”分割URL和傳輸數據

jsp範圍變數

jsp頁面中有四種範圍變數:request,session,application,pageContext。 這四種區別還是很好區分的,以我的思路方法: 有3個jsp頁面: p1.jsp T

SpringMVC 學習 十一 springMVC控制器向jsp或者別的控制器傳遞引數方法

以後的開發,大部分是傳送ajax,因此這四種傳遞引數的方法,並不太常用。作為了解吧 第一種:使用原生 Servlet 在控制器的響應的方法中新增Servlet中的一些作用域:HttpRequestServlet,或者HttpSession。 【注意】在方法中,ServletContext的物件是不能作為

向scrapy的spider傳遞引數的幾方法

有時需要根據專案的實際需求向spider傳遞引數以控制spider的行為,比如說,根據使用者提交的url來控制spider爬取的網站。在這種情況下,可以使用兩種方法向spider傳遞引數。 第一種方法

JavaScript呼叫函式的方法

理解函式的四種呼叫方式對理解this有很大的幫助 1.函式呼叫 即直接呼叫,比如fn(),this指向函式當時的context,在瀏覽器中是window,在node中是global 2.方法呼叫 比如Obj.fn() this指向Obj. 如a.b.c.d.f()那t

unity讀取txt檔案的方法和一寫入txt方法

//注意:要讀取的檔案的編碼型別要為utf-8,不然會出現中文亂碼或者直接不顯示,如果是其它編碼方式可以把檔案 //另儲存為utf-8的格式 using UnityEngine; using System.Collections; using System.IO;//用法三的

iOS常用的資料持久化方法簡介

OS中的資料持久化方式,基本上有以下四種:屬性列表、物件歸檔、SQLite3和Core Data NSUserDefaults,用於儲存配置資訊 SQLite,用於儲存查詢需求較多的資料 CoreData,用於規劃應用中的物件 使用基本物件型別定製的個性化快取方案1.屬性列表 涉及到的主要類:NSUs

PHOTOSHOP常用的摳圖方法

最近不斷有人問怎樣換照片背景的問題,實際上是關於摳圖的問題,把你需要的內容從照片中摳出來了,換背景就輕而易舉了。現介紹四種最常用的摳圖和換背景的方法,供參考: 一、如果照片的主體與背景反差較大,邊沿較清楚,如下圖所示,用“抽出”工具摳圖最簡單。 操作方法如下:

分享phpwebservice實現的簡單架構方法及例項

本人所瞭解的webservice有以下幾種:PHP本身的SOAP,開源的NUSOAP,商業版的PHPRPC,以及使用二進位制傳輸資料流的HessianPHP,那麼一下就簡單的介紹下這幾種webservice在php中的使用,雖然網上也有很多這方面的資料,但是這是我個人實踐所得,當然也是從網上找的資料

java許可權修飾符,靜態程式碼塊,構造程式碼塊,構造方法執行順序。

一、java中類有四種許可權 1、要想僅能在本類中訪問使用private修飾。 2、要想本包中的類都可以訪問不加修飾符即可。 3、要想本包中的類與其他包中的子類可以訪問使用protected修飾。(不在同一包中時,只能在子類裡面可以呼叫,其他測試類建物件都不行,只給不同包中的子

JAVA常見建立物件方法

一、使用new關鍵字 這是我們最常見的也是最簡單的建立物件的方式,通過這種方式我們還可以呼叫任意的夠贊函式(無參的和有參的)。 比如:Student student = new Student(); 二、呼叫物件的clone的方法 無論何時我們呼叫一

C++執行緒同步的方法

現在流行的程序執行緒同步互斥的控制機制,其實是由最原始最基本的4種方法實現的。由這4種方法組合優化就有了.Net和Java下靈活多變的,程式設計簡便的執行緒程序控制手段。     這4種方法具體定義如下 在《作業系統教程》ISBN 7-5053-6193-7 一書中能夠找到

UDP不同的NAT型別及檢測方法【轉發與點評】

UDP中四種不同的NAT型別及檢測方法 考慮到UDP的無狀態特性,目前針對其的NAT實現大致可分為Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四種。 值得指出的是,對於TCP協議而言,一般來說,目

ionic專案跨頁面傳遞引數的幾方式

1、使用angularjs自帶的$cacheFactory服務 $cacheFactory 從字面直譯即為快取工廠,可以用它來生成快取物件,快取物件以key-value的方式進行資料的儲存,在整個應用

oracle不同方法迴圈輸出1-10

set serveroutput ondeclare   i int:=10;  j int:=0;  begin   loop      j:=j+1;       if j<11 then         dbms_output.put_line(j);      elsif j>11 th

C++進程或線程同步互斥的控制方法

實現 適合 begin 執行 als 零基礎 time 並發 多少 分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net 現在流行的進程線程同步互斥的控制機

關於springmvc不用model直接返回jsp參數傳遞的兩情況

宋體 返回 name param gmv 分享圖片 請求 技術 con 1.springmvc中controller一開始參數是一個實體類,不加model默認轉發到jsp,jsp裏要通過${實體類(首字母小寫).屬性名}來獲取實體類裏的屬性值: controller中