第一篇:總結(jié)JSP與servlet之間的傳值[小編推薦]
總結(jié)JSP與servlet之間的傳值
JSP與 servlet之間的傳值有兩種情況:JSP-> servlet,servlet-> JSP。通過(guò)對(duì)象 request和 session(不考慮 application)完成傳值。
一、JSP-> servlet JSP頁(yè)面有3種方法向 servlet傳值: form表單、URL、其他
...<%......session.setAttribute(“testSession”,“Hello session”);
reqeust.setAttribute(“testRequest”,“Hello request”);%> click me
...1、對(duì)于該JSP頁(yè)面 form表單的內(nèi)容,如 標(biāo)簽,在 servlet可用 request.getParameter(“username”);獲取。2、URL:比如這里的 標(biāo)簽的 href屬性與
3、java片段代碼,servlet只能接到 session.setAttribute(“testSession”,“Hello session”)的內(nèi)容,而接不到 request的內(nèi)容。在 servlet里用 request.getSession().getAttribute(“testSession”)獲取 session內(nèi)容。
二、Servlet
1、關(guān)于 servlet,首先要提到它在 web.xml里的注冊(cè)內(nèi)容,如
假如 project name 是 jsp2servlet,則該 project根目錄的 Context是 /jsp2servlet,在地址欄里顯示是 http://localhost:8080/jsp2servlet/;
在 project 根目錄下有 admin目錄,對(duì)應(yīng)的 Context是/admin/jsp2servlet,在地址欄里顯示是 http://localhost:8080/jsp2servlet/admin,在這兩個(gè)目錄下的 jsp 都想轉(zhuǎn)到 com.demo.JspServletDemo類(lèi)做處理,這時(shí)的 url需要在 web.xml注冊(cè)兩次。
1)在 http://localhost:8080/jsp2servlet/ 目錄下的 jsp 頁(yè)面 JspServlet1,url應(yīng)寫(xiě)為 “JspServlet”
2)在 http://localhost:8080/jsp2servlet/admin/ 目錄下的 jsp 頁(yè)面訪問(wèn) JspServlet2,url應(yīng)寫(xiě)為 “admin/JspServlet”
2、在 servlet直接用 request對(duì)象,得到發(fā)送來(lái)的請(qǐng)求內(nèi)容;用 request.getSession(),得到 session對(duì)象,從而得到會(huì)話內(nèi)容。
這里的 request.getSession()的參數(shù)為 boolean 類(lèi)型,該方法意思可理解為:
session可以認(rèn)為是每一個(gè)IE進(jìn)程對(duì)應(yīng)一個(gè)會(huì)話(新開(kāi)一個(gè)IE進(jìn)程就可以對(duì)應(yīng)兩個(gè)會(huì)話的),getSession都是返回當(dāng)前用戶(hù)的會(huì)話對(duì)象,參數(shù)的區(qū)別在于:
參數(shù)為true(默認(rèn)),則如果“當(dāng)前用戶(hù)的會(huì)話對(duì)象”為空(第一次訪問(wèn)時(shí))則創(chuàng)建一個(gè)新的會(huì)話對(duì)象返回;
參數(shù)為false,則如果“當(dāng)前用戶(hù)的會(huì)話對(duì)象”為空,則返回 null(即不自動(dòng)創(chuàng)建會(huì)話對(duì)象)。
利用這個(gè)方法可以判斷 session是否過(guò)期,如下:
if(request.getSession(false)==null)
System.out.println(“Session has been invalidated!”);else
System.out.println(“Session is active!”);
三、Servlet-> JSP 從 servlet轉(zhuǎn)到 jsp不外乎兩種方法,重定向 和 url轉(zhuǎn)發(fā)
1、重定向(Redirect):是路徑的跳轉(zhuǎn),內(nèi)容和 url都改變。不允許帶 request參數(shù)(session參數(shù)可以),即不允許在 servlet里給 request對(duì)象使用setAttribute方法傳給下一頁(yè)面。在 servlet里使用 response.sendRedirect(url)方法。注意這里的 url前不帶斜線 /,如 response.sendRedirect(”test.jsp“)
2、url轉(zhuǎn)發(fā)(Forward):是頁(yè)面的跳轉(zhuǎn),頁(yè)面內(nèi)容發(fā)生改變,url不變。可以帶 request和 session參數(shù)。在 servlet里使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而這里的 url前需要帶斜線 /,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)
servlet使用RequestDispatcher到j(luò)sp頁(yè)面
String url=“/EShop.jsp”;
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);rd.forward(req, res);
servlet重定向jsp,并將數(shù)據(jù)發(fā)送到別一個(gè)JSP中: request.setAttubute(“messages”,aaa);
RequestDispatcher requestDispatcher=request.getRequestDispatcher(“/jsp/testbean.jsp”);requestDispatcher.forward(request,response);
3.7、Servlet跳轉(zhuǎn)
從JSP跳轉(zhuǎn)到Servlet可以實(shí)現(xiàn),通過(guò)表單提交或超鏈接可以做到,但是現(xiàn)在如果從一個(gè)Servlet跳轉(zhuǎn)到JSP呢?
? HttpServletResponse對(duì)象,此對(duì)象可以完成跳轉(zhuǎn):public void sendRedirect();JumpServlet.java: package org.lxh.demo;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class JumpServlet extends HttpServlet{ public void init()throws ServletException{
} public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,java.io.IOException{ resp.sendRedirect(“jump.jsp”);} public void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,java.io.IOException{ this.doGet(req,resp);} public void destroy(){ } };web.xml:
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,java.io.IOException{ request.getSession().setAttribute(“name”,“hello”);resp.sendRedirect(“jump.jsp”);} jump.jsp:
<%=session.getAttribute(“name”)%>
此時(shí),發(fā)現(xiàn)可以通過(guò)session屬性范圍傳遞內(nèi)容,但是如果現(xiàn)在傳遞的內(nèi)容很多,而程序中使用session范圍的話則肯定會(huì)帶來(lái)額外的性能降低,但是此時(shí),這些值只使用一次顯示,那肯定沒(méi)有必要使用session對(duì)象,最好使用request范圍。如果request屬性范圍也有一個(gè)限制,必須是服務(wù)器端跳轉(zhuǎn),在JSP中使用public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,java.io.IOException{ req.setAttribute(“name”,“hello”);// 準(zhǔn)備跳轉(zhuǎn)到此頁(yè)面
RequestDispatcher rd = req.getRequestDispatcher(“jump.jsp”);// 把所有的請(qǐng)求向下繼續(xù)傳遞
rd.forward(req,resp);} 注意:
當(dāng)需要傳遞request屬性范圍的時(shí)候才使用服務(wù)器端跳轉(zhuǎn)。如果不需要傳遞,則可以選擇任意的跳轉(zhuǎn)方式。
但是一般情況下都使用RequestDispatcher進(jìn)行跳轉(zhuǎn),而且一定要記住的時(shí)候,跳轉(zhuǎn)之后頁(yè)面地址不會(huì)有任何的變化。
第二篇:Tomcat開(kāi)發(fā)jsp與servlet總結(jié)
一,添加虛擬目錄: 1.在tomcat安裝目錄下webapps建一目錄,例如:myweb.2.在此目錄下建目錄WEB-INF(全部為大寫(xiě)),3.在WEB-INF目錄下建立文件web.xml,在此文件中添加如下內(nèi)容:
第三篇:Servlet和JSP經(jīng)驗(yàn)總結(jié)
Servlet和JSP經(jīng)驗(yàn)總結(jié)
這里介紹Servlet和JSP經(jīng)驗(yàn)總結(jié),包括在servlet的init()方法中緩存數(shù)據(jù)、禁止Servlet和JSP自動(dòng)重載、將頁(yè)面輸出進(jìn)行壓縮和正確地確定javabean的生命周期等七種實(shí)用的方法。
在servlet的init()方法中緩存數(shù)據(jù)
當(dāng)應(yīng)用服務(wù)器初始化Servlet和JSP實(shí)例之后,為客戶(hù)端請(qǐng)求提供服務(wù)之前,它會(huì)調(diào)用這個(gè)servlet的init()方法。在一個(gè)servlet的生命周期中,init()方法只會(huì)被調(diào)用一次。通過(guò)在init()方法中緩存一些靜態(tài)的數(shù)據(jù)或完成一些只需要執(zhí)行一次的、耗時(shí)的操作,就可大大地提高系統(tǒng)性能。
例如,通過(guò)在init()方法中建立一個(gè)JDBC連接池是一個(gè)最佳例子,假設(shè)我們是用jdbc2.0的DataSource接口來(lái)取得數(shù)據(jù)庫(kù)連接,在通常的情況下,我們需要通過(guò)JNDI來(lái)取得具體的數(shù)據(jù)源。我們可以想象在一個(gè)具體的應(yīng)用中,如果每次SQL請(qǐng)求都要執(zhí)行一次JNDI查詢(xún)的話,那系統(tǒng)性能將會(huì)急劇下降。解決方法是如下代碼,它通過(guò)緩存DataSource,使得下一次SQL調(diào)用時(shí)仍然可以繼續(xù)利用它
1.2.3.publicclassControllerServletextendsHttpServlet{privatejavax.sql.DataSourcetestDS=null;publicvoidinit(ServletConfigconfig)throwsServletExcep
tion{
4.super.init(config);
5.Contextctx=null;
6.try{ctx=newInitialContext();
7.testDS=(javax.sql.DataSource)ctx.lookup(“jdbc/testDS”);
8.}
9.catch(NamingExceptionne){
10.ne.printStackTrace();
11.}
12.catch(Exceptione){
13.e.printStackTrace();
14.}
15.}
16.publicjavax.sql.DataSourcegetTestDS(){
17.returntestDS;
18.}
19.......20.}
禁止Servlet和JSP自動(dòng)重載(auto-reloading)
Servlet和JSP提供了一個(gè)實(shí)用的技術(shù),即自動(dòng)重載技術(shù),它為開(kāi)發(fā)人員提供了一個(gè)好的開(kāi)發(fā)環(huán)境,當(dāng)你改變servlet和JSP頁(yè)面后而不必重啟應(yīng)用服務(wù)器。然而,這種技術(shù)在產(chǎn)品運(yùn)行階段對(duì)系統(tǒng)的資源是一個(gè)極大的損耗,因?yàn)樗鼤?huì)給JSP引擎的類(lèi)裝載器(classloader)帶來(lái)極大的負(fù)擔(dān)。因此關(guān)閉自動(dòng)重載功能對(duì)系統(tǒng)性能的提升是一個(gè)極大的幫助。
不要濫用HttpSession
在很多應(yīng)用中,我們的程序需要保持客戶(hù)端的狀態(tài),以便頁(yè)面之間可以相互聯(lián)系。但不幸的是由于HTTP具有天生無(wú)狀態(tài)性,從而無(wú)法保存客戶(hù)端的狀態(tài)。因此一般的應(yīng)用服務(wù)器都提供了session來(lái)保存客戶(hù)的狀態(tài)。在JSP應(yīng)用服務(wù)器中,是通過(guò)HttpSession對(duì)像來(lái)實(shí)現(xiàn)session的功能的,但在方便的同時(shí),它也給系統(tǒng)帶來(lái)了不小的負(fù)擔(dān)。因?yàn)槊慨?dāng)你獲得或更新session時(shí),系統(tǒng)者要對(duì)它進(jìn)行費(fèi)時(shí)的序列化操作。你可以通過(guò)對(duì) HttpSession的以下幾種處理方式來(lái)提升系統(tǒng)的性能:
如果沒(méi)有必要,就應(yīng)該關(guān)閉JSP頁(yè)面中對(duì)HttpSession的缺省設(shè)置:如果你沒(méi)有明確指定的話,每個(gè)JSP頁(yè)面都會(huì)缺省地創(chuàng)建一個(gè)HttpSession。如果你的JSP中不需要使用session的話,那可以通過(guò)如下的JSP頁(yè)面指示符來(lái)禁止它:
21.<%@ page session=“false”%>
不要在HttpSession中存放大的數(shù)據(jù)對(duì)像:如果你在HttpSession中存放大的數(shù)據(jù)對(duì)像的話,每當(dāng)對(duì)它進(jìn)行讀寫(xiě)時(shí),應(yīng)用服務(wù)器都將對(duì)其進(jìn)行序列化,從而增加了系統(tǒng)的額外負(fù)擔(dān)。你在HttpSession中存放的數(shù)據(jù)對(duì)像越大,那系統(tǒng)的性能就下降得越快。
當(dāng)你不需要HttpSession時(shí),盡快地釋放它:當(dāng)你不再需要session時(shí),你可以通過(guò)調(diào)用HttpSession.invalidate()方法來(lái)釋放它。
盡量將session的超時(shí)時(shí)間設(shè)得短一點(diǎn):在JSP應(yīng)用服務(wù)器中,有一個(gè)缺省的session的超時(shí)時(shí)間。當(dāng)客戶(hù)在這個(gè)時(shí)間之后沒(méi)有進(jìn)行任何操作的話,系統(tǒng)會(huì)將相關(guān)的session自動(dòng)從內(nèi)存中釋放。超時(shí)時(shí)間設(shè)得越大,系統(tǒng)的性能就會(huì)越低,因此最好的方法就是盡量使得它的值保持在一個(gè)較低的水平。
將頁(yè)面輸出進(jìn)行壓縮
壓縮是解決數(shù)據(jù)冗余的一個(gè)好的方法,特別是在網(wǎng)絡(luò)帶寬不夠發(fā)達(dá)的今天。有的瀏覽器支持gzip(GNU zip)進(jìn)行來(lái)對(duì)HTML文件進(jìn)行壓縮,這種方法可以戲劇性地減少HTML文件的下載時(shí)間。因此,如果你將servlet或JSP頁(yè)面生成的HTML頁(yè)面進(jìn)行壓縮的話,那用戶(hù)就會(huì)覺(jué)得頁(yè)面瀏覽速度會(huì)非常快。但不幸的是,不是所有的瀏覽器都支持gzip壓縮,但你可以通過(guò)在你的程序中檢查客戶(hù)的瀏覽器是否支持它。下面就是關(guān)于這種方法實(shí)現(xiàn)的一個(gè)代碼片段:
22.publicvoiddoGet(HttpServletRequestrequest,HttpServlet
Responseresponse)
throwsIOException,ServletException{
23.OutputStreamout=null
24.Stringencoding=request.getHeader(“Accept-Encoding”);
25.if(encoding!=null&&encoding.indexOf(“gzip”)!=-1){
26.request.setHeader(“Content-Encoding”,“gzip”);
27.out=newGZIPOutputStream(request.getOutputStream());
28.}
29.elseif(encoding!=null&&encoding.indexOf(“compress”)!=
-1){
30.request.setHeader(“Content-Encoding”,“compress”);
31.32.33.34.35.36.37.out=newZIPOutputStream(request.getOutputStream());}else{out=request.getOutputStream();}......}
使用線程池
應(yīng)用服務(wù)器缺省地為每個(gè)不同的客戶(hù)端請(qǐng)求創(chuàng)建一個(gè)線程進(jìn)行處理,并為它們分派service()方法,當(dāng)service()方法調(diào)用完成后,與之相應(yīng)的線程也隨之撤消。由于創(chuàng)建和撤消線程會(huì)耗費(fèi)一定的系統(tǒng)資源,這種缺省模式降低了系統(tǒng)的性能。但所幸的是我們可以通過(guò)創(chuàng)建一個(gè)線程池來(lái)改變這種狀況。另外,我們還要為這個(gè)線程池設(shè)置一個(gè)最小線程數(shù)和一個(gè)最大線程數(shù)。在應(yīng)用服務(wù)器啟動(dòng)時(shí),它會(huì)創(chuàng)建數(shù)量等于最小線程數(shù)的一個(gè)線程池,當(dāng)客戶(hù)有請(qǐng)求時(shí),相應(yīng)地從池從取出一個(gè)線程來(lái)進(jìn)行處理,當(dāng)處理完成后,再將線程重新放入到池中。如果池中的線程不夠地話,系統(tǒng)會(huì)自動(dòng)地增加池中線程的數(shù)量,但總量不能超過(guò)最大線程數(shù)。通過(guò)使用線程池,當(dāng)客戶(hù)端請(qǐng)求急劇增加時(shí),系統(tǒng)的負(fù)載就會(huì)呈現(xiàn)的平滑的上升曲線,從而提高的系統(tǒng)的可伸縮性。
選擇正確的頁(yè)面包含機(jī)制
在JSP中有兩種方法可以用來(lái)包含另一個(gè)頁(yè)面
1、使用include指示符(< %@ includee file=”test.jsp” %>)。
2、使用jsp指示符(< jsp:includee
page=”test.jsp” flush=”true”/>)。在實(shí)際中我發(fā)現(xiàn),如果使用第一種方法的話,可以使得系統(tǒng)性能更高。
正確地確定javabean的生命周期
Servlet和JSP一個(gè)強(qiáng)大的地方就是對(duì)javabean的支持。通過(guò)在JSP頁(yè)面中使用<jsp:useBean>標(biāo)簽,可以將javabean直接插入到一個(gè)JSP頁(yè)面中。它的使用方法如下:
38.<
jsp:useBean id=“name” scope=“page|request|session|application”
class= “package.className” type=“typeName”>
39.</jsp:useBean>
其中scope屬性指出了這個(gè)bean的生命周期。缺省的生命周期為page。如果你沒(méi)有正確地選擇bean的生命周期的話,它將影響系統(tǒng)的性能。
舉例來(lái)說(shuō),如果你只想在一次請(qǐng)求中使用某個(gè)bean,但你卻將這個(gè)bean的生命周期設(shè)置成了session,那當(dāng)這次請(qǐng)求結(jié)束后,這個(gè)bean將仍然保留在內(nèi)存中,除非session超時(shí)或用戶(hù)關(guān)閉瀏覽器。這樣會(huì)耗費(fèi)一定的內(nèi)存,并無(wú)謂的增加了JVM垃圾收集器的工作量。因此為bean設(shè)置正確的生命周期,并在bean的使命結(jié)束后盡快地清理它們,會(huì)使用系統(tǒng)性能有一個(gè)提高。
需要注意:
1.在字符串連接操作中盡量不使用“+”操作符:在java編程中,我們常常使用“+”操作符來(lái)將幾個(gè)字符串連接起來(lái),但你或許從來(lái)沒(méi)有想到過(guò)它居然會(huì)對(duì)系統(tǒng)性能造成影響吧?由于字符串是常量,因此JVM會(huì)產(chǎn)生一些臨時(shí)的對(duì)像。你使用的“+”越多,生成的臨時(shí)對(duì)像就越多,這樣也會(huì)給系統(tǒng)性能帶來(lái)一些影響。解決的方法是用StringBuffer對(duì)像來(lái)代替“+”操作符。
2.避免使用System.out.println()方法:由于System.out.println()是一種同步調(diào)用,即在調(diào)用它時(shí),磁盤(pán)I/O操作必須等待它的完成,因此我們要盡量避免對(duì)它的調(diào)用。但我們?cè)谡{(diào)試程序時(shí)它又是一個(gè)必不可少的方便工具,為了解決這個(gè)矛盾,我建議你最好使用Log4j工具,它既可以方便調(diào)試,而不會(huì)產(chǎn)生System.out.println()這樣的方法。
3.ServletOutputStream 與 PrintWriter的權(quán)衡:使用PrintWriter可能會(huì)帶來(lái)一些小的開(kāi)銷(xiāo),因?yàn)樗鼘⑺械脑驾敵龆嫁D(zhuǎn)換為字符流來(lái)輸出,因此如果使用它來(lái)作為頁(yè)面輸出的話,系統(tǒng)要負(fù)擔(dān)一個(gè)轉(zhuǎn)換過(guò)程。而使用ServletOutputStream作為頁(yè)面輸出的話就不存在一個(gè)問(wèn)題,但它是以二進(jìn)制進(jìn)行輸出的。
第四篇:學(xué)習(xí)JSP和servlet程序設(shè)計(jì)心得體會(huì)
學(xué)習(xí)JSP程序設(shè)計(jì)和Servlet心得體會(huì)
JSP這門(mén)課是教我們?cè)趺醋鼍W(wǎng)站的,學(xué)習(xí)了許多枯燥的語(yǔ)言知識(shí),總算是可以自己做網(wǎng)站了 記得在第一節(jié)課上,我就跟學(xué)生們講了“為什么學(xué)JSP?”,“JSP學(xué)什么?”,“學(xué)JSP有什么用?”還有“如何學(xué)JSP?”從我對(duì)這些問(wèn)題的講解中同學(xué)們確實(shí)體會(huì)到了學(xué)習(xí)JSP的重要性和如何去學(xué)。在課上還了解了這門(mén)課程我要講述的主要內(nèi)容以及需要具備的相關(guān)知識(shí)。
學(xué)生們?cè)贘AVA上是最欠缺的,之前也只是跟著老師學(xué),自己在課下并沒(méi)有下很多功夫。
在前階段的學(xué)習(xí)中都感覺(jué)很輕松,因?yàn)槲抑v到的HTML學(xué)生已經(jīng)在上個(gè)學(xué)期的差不多了,所以做一個(gè)靜態(tài)的頁(yè)面還是沒(méi)有多大問(wèn)題,但是后來(lái)學(xué)到后面要用到JAVA做一些動(dòng)態(tài)的網(wǎng)頁(yè)就感覺(jué)越來(lái)越吃力了,之前學(xué)過(guò)的很多JAVA知識(shí)也有很多都已經(jīng)忘了。所以在第一次上課后完成任務(wù)時(shí)就用到了比較長(zhǎng)的時(shí)間,最后才能勉強(qiáng)做到符合我的要求。還出現(xiàn)了很多小錯(cuò)誤,有了第一次視頻教學(xué)的教訓(xùn),我在后面趕緊復(fù)習(xí)之前學(xué)習(xí)的JAVA知識(shí),但是畢竟過(guò)了挺久了,有些東西需要重頭再教,而且我也是以做項(xiàng)目的形式來(lái)完成教學(xué),項(xiàng)目里包括了JSP呀Servlet等技術(shù),所以學(xué)生們大概花了一個(gè)多月才將這學(xué)期JSP和Servlet課程中所掌握的一些關(guān)于JAVA的東西搞清楚。后來(lái)也就順利的完成了我們要做的項(xiàng)目。
我想簡(jiǎn)單的談?wù)勎以贘SP程序設(shè)計(jì)這門(mén)課中都學(xué)到了什么,JSP的全稱(chēng)是 Java Server Pages,它是一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)。我們需要配置的壞境有JDK,Tomcat,還要用到Dreamweaver。最開(kāi)始我們學(xué)習(xí)了HTML這種文本標(biāo)記語(yǔ)言,用HTML可以做一些靜態(tài)網(wǎng)站,看的出在學(xué)生第一次用HTML做出第一個(gè)網(wǎng)頁(yè)時(shí)的興奮,都覺(jué)得好神奇!后面我們學(xué)到做動(dòng)態(tài)網(wǎng)站,其中就涉及到JSP內(nèi)部對(duì)象及內(nèi)部對(duì)象所對(duì)應(yīng)的一些方法。再就是JSP與數(shù)據(jù)庫(kù)的聯(lián)系,怎么樣引用數(shù)據(jù)庫(kù)。通過(guò)以上所學(xué)到的知識(shí)我們可以基本上上做出一個(gè)比較實(shí)用的小網(wǎng)站,比如一個(gè)班級(jí)網(wǎng)站,在上面可以上傳下載一些學(xué)習(xí)資料,以及存儲(chǔ)班上同學(xué)的一些基本信息,給班上同學(xué)提供一個(gè)交流平臺(tái)等等。
那 在以后的學(xué)習(xí)中學(xué)生該如何學(xué)呢?從這一次JSP程序設(shè)計(jì)課程的學(xué)習(xí)中我總結(jié)了以后學(xué)習(xí)的方法。首先要把基礎(chǔ)打牢,不要只是注重技術(shù)開(kāi)發(fā),對(duì)于一些基本概念也要掌握;其次要多一些專(zhuān)業(yè)方面的書(shū),多了解我們專(zhuān)業(yè)動(dòng)向;再者就是要多上機(jī)實(shí)踐,學(xué)到什么知識(shí)點(diǎn)要趕緊把它應(yīng)用到實(shí)踐當(dāng)中;最后就是要加強(qiáng)自己團(tuán)隊(duì)協(xié)作的能力,爭(zhēng)取在以后的學(xué)習(xí)中能夠跟同學(xué)通過(guò)一些項(xiàng)目實(shí)戰(zhàn)提高自己團(tuán)隊(duì)協(xié)作能力。
第五篇:showModalDialog兩個(gè)窗體之間傳值發(fā)布
Javascript showModalDialog兩個(gè)窗體之間傳值發(fā)布
前一篇文章Javascript怎么在兩個(gè)窗體之間傳值中講到了如何利用window.open()方法打開(kāi)新窗體,并在兩個(gè)窗體之間傳值的方法。
Javascript 兩個(gè)窗體之間傳值實(shí)現(xiàn)代碼
javascript中還有一個(gè)函數(shù)window.showModalDialog也可以打開(kāi)一個(gè)新窗體,不過(guò)他打開(kāi)的是一個(gè)模態(tài)窗口,那么如何在父窗體和子窗體之間傳值呢?我們先看該函數(shù)的定義:vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])
參數(shù)說(shuō)明:
sURL--必選參數(shù),類(lèi)型:字符串。用來(lái)指定對(duì)話框要顯示的文檔的URL。
vArguments--可選參數(shù),類(lèi)型:變體。用來(lái)向?qū)υ捒騻鬟f參數(shù)。傳遞的參數(shù)類(lèi)型不限,包括數(shù)組等。對(duì)話框通過(guò)window.dialogArguments來(lái)取得傳遞進(jìn)來(lái)的參數(shù)。
sFeatures--可選參數(shù),類(lèi)型:字符串。用來(lái)描述對(duì)話框的外觀等信息,可以使用以下的一個(gè)或幾個(gè),用分號(hào)“;”隔開(kāi)。
dialogHeight :對(duì)話框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默認(rèn)的單位是em,而IE5中是px,為方便其見(jiàn),在定義modal方式的對(duì)話框時(shí),用px做單位。dialogWidth: 對(duì)話框?qū)挾取?/p>
dialogLeft: 離屏幕左的距離。
dialogTop: 離屏幕上的距離。
center: {yes | no | 1 | 0 }:窗口是否居中,默認(rèn)yes,但仍可以指定高度和寬度。
help: {yes | no | 1 | 0 }:是否顯示幫助按鈕,默認(rèn)yes。
resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改變大小。默認(rèn)no。
status: {yes | no | 1 | 0 } [IE5+]:是否顯示狀態(tài)欄。默認(rèn)為yes[ Modeless]或no[Modal]。scroll:{ yes | no | 1 | 0 | on | off }:指明對(duì)話框是否顯示滾動(dòng)條。默認(rèn)為yes。
如:“dialogWidth=200px;dialogHeight=100px”
因此我們可以通過(guò)window.dialogArguments參數(shù)來(lái)在兩個(gè)窗體之間傳值
如下面兩個(gè)頁(yè)面:FatherPage.htm:
復(fù)制代碼 代碼如下:
function OpenChildWindow()
{
window.showModalDialog('ChildPage.htm',document.getElementById('txtInput').value);}
ChildPage.htm:
復(fù)制代碼 代碼如下:
function Load()
{
document.getElementById('txtInput').value=window.dialogArguments;
}
上面只是傳遞簡(jiǎn)單的字符串,我們還可以傳遞數(shù)組,如:FatherPage.htm:
XML-Code:
復(fù)制代碼 代碼如下:
function OpenChildWindow()
{
var args = new Array();
args[0] = document.getElementById('txtInput').value;
window.showModalDialog('ChildPage.htm',args);
}
ChildPage.htm:XML-Code:
function Load()
{
document.getElementById('txtInput').value=window.dialogArguments[0];
}
同樣我們還可以傳遞對(duì)象,如:FatherPage.htm:
XML-Code:
復(fù)制代碼 代碼如下:
function OpenChildWindow()
{
var obj = new Object();
obj.name = document.getElementById('txtInput').value;
window.showModalDialog('ChildPage.htm',obj);
}
ChildPage.html:
XML-Code:
復(fù)制代碼 代碼如下:
function Load()
var obj = window.dialogArguments;
document.getElementById('txtInput').value=obj.name;
}
以上都是從父窗體向子窗體傳值,那么如何從子窗體向父窗體傳值呢 ?其實(shí)通過(guò)window.returnValue就可以獲取子窗體的值,window.returnValue與window.dialogArguments一樣,可以是任意變量,包括字符串,數(shù)組,對(duì)象等。如:FatherPage.html:
XML-Code:
復(fù)制代碼 代碼如下:
function OpenChildWindow()
{
var obj = new Object();
obj.name = document.getElementById('txtInput').value;
var result = window.showModalDialog('ChildPage.htm',obj);
document.getElementById('txtInput').value = result.name;
}
ChildPage.html:
XML-Code:
復(fù)制代碼 代碼如下:
function Load()
{
var obj = window.dialogArguments;
document.getElementById('txtInput').value=obj.name;
}
function SetValue()
{
var obj = new Object();
obj.name = document.getElementById('txtInput').value;
window.returnValue = obj;
window.close();
}
詳細(xì)出處參考:http:///article/20141.htm