實(shí)現(xiàn)輸出從控制臺(tái)到GUI并不復(fù)雜 只需要將標(biāo)準(zhǔn)輸出重定向
創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,先為魯?shù)榈确?wù)建站,魯?shù)榈鹊仄髽I(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為魯?shù)槠髽I(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
重定向標(biāo)準(zhǔn)輸出很easy System 類(lèi)里有兩個(gè)靜態(tài)方法setErr(PrintStream err) 和 setOut(PrintStream out) 分別用于重定位 標(biāo)準(zhǔn) 錯(cuò)誤輸出流和 標(biāo)準(zhǔn) 輸出流 只需要在程序初始時(shí)設(shè)置即可
// GUIPrintStream guiPrintStream = new GUIPrintStream(System out jTextArea);
System setErr(guiPrintStream);
System setOut(guiPrintStream);
在上面的代碼中 我們發(fā)現(xiàn)一個(gè)新的類(lèi) GUIPrintStream 這是我們?yōu)?PrintStream 所做的包裝 因?yàn)槲覀兊妮敵瞿繕?biāo)位置是GUI 所以需要在 PrintStream 上做些文章 大家請(qǐng)看下面 GUIPrintStream 的代碼
Java代碼
/**//*
* To change this template choose Tools | Templates
* and open the template in the editor
*/
import java io OutputStream;
import java io PrintStream;
import javax swing SwingUtilities;
import javax swing text JTextComponent;
/** *//**
* 輸出到文本組件的流
*
* @author Chen Wei
* @website chenwei mobi
* @email chenw
*/
public class GUIPrintStream extends PrintStream {
private JTextComponent ponent;
private StringBuffer *** = new StringBuffer();
public GUIPrintStream(OutputStream out JTextComponent ponent) {
super(out);
ponent = ponent;
}
/** *//**
* 重寫(xiě)write()方法 將輸出信息填充到GUI組件
* @param buf
* @param off
* @param len
*/
@Override
public void write(byte[] buf int off int len) {
final String message = new String(buf off len);
SwingUtilities invokeLater(new Runnable() {
public void run() {
*** append(message);
ponent setText( *** toString());
}
});
}
}
/**//*
* To change this template choose Tools | Templates
* and open the template in the editor
*/
import java io OutputStream;
import java io PrintStream;
import javax swing SwingUtilities;
import javax swing text JTextComponent;
/** *//**
* 輸出到文本組件的流
*
* @author Chen Wei
* @website chenwei mobi
* @email chenw
*/
public class GUIPrintStream extends PrintStream {
private JTextComponent ponent;
private StringBuffer *** = new StringBuffer();
public GUIPrintStream(OutputStream out JTextComponent ponent) {
super(out);
ponent = ponent;
}
/** *//**
* 重寫(xiě)write()方法 將輸出信息填充到GUI組件
* @param buf
* @param off
* @param len
*/
@Override
public void write(byte[] buf int off int len) {
final String message = new String(buf off len);
SwingUtilities invokeLater(new Runnable() {
public void run() {
*** append(message);
ponent setText( *** toString());
}
});
}
}
類(lèi) GUIPrintStream 繼承自 PrintStream 并且對(duì)它進(jìn)行了一些修改
GUIPrintStream 在構(gòu)造函數(shù)中增加了一個(gè) JTextComponent 變量 它就是我們的目標(biāo)輸出 GUI 組件 它規(guī)定了目標(biāo)輸出組件是一個(gè)文本組件 接下來(lái)覆寫(xiě)了 write(byte[] buf int off int len)方法 這個(gè)方法原來(lái)的作用是將 len 字節(jié)從指定的初始偏移量為 off 的 byte 數(shù)組寫(xiě)入此流 現(xiàn)在經(jīng)過(guò)我們的修改 變成了將 byte 數(shù)組包裝成 String 寫(xiě)入目標(biāo) GUI 組件
簡(jiǎn)單的代碼完成了將標(biāo)準(zhǔn)輸出重定向到 GUI 的全過(guò)程 由此延伸 還可以將標(biāo)準(zhǔn)輸出重定向到文本文件 從GUI獲取標(biāo)準(zhǔn)輸入等 就不一一介紹
測(cè)試
Java代碼
public class MainFrame extends javax swing JFrame {
public MainFrame() {
initComponents();
// 重定向到通過(guò)文本組件構(gòu)建的組件輸出流中
System setOut(new GUIPrintStream(System out textArea));
}
private void initComponents() {
scrollPane = new javax swing JScrollPane();
textArea = new javax swing JTextArea();
btnOut = new javax swing JButton();
setDefaultCloseOperation(javax swing WindowConstants EXIT_ON_CLOSE);
setTitle( 標(biāo)準(zhǔn)輸出重定向到GUI chenwei mobi );
textArea setColumns( );
textArea setRows( );
scrollPane setViewportView(textArea);
getContentPane() add(scrollPane java awt BorderLayout CENTER);
btnOut setText( System out println(System getProperties()); );
btnOut addActionListener(new java awt event ActionListener() {
public void actionPerformed(java awt event ActionEvent evt) {
btnOutActionPerformed(evt);
}
});
getContentPane() add(btnOut java awt BorderLayout PAGE_END);
pack();
}
private void btnOutActionPerformed(java awt event ActionEvent evt) {
System out println(System getProperties());
}
/**
* @param args the mand line arguments
*/
public static void main(String args[]) {
java awt EventQueue invokeLater(new Runnable() {
public void run() {
new MainFrame() setVisible(true);
}
});
}
private javax swing JButton btnOut;
private javax swing JScrollPane scrollPane;
private javax swing JTextArea textArea;
lishixinzhi/Article/program/Java/hx/201311/25870
可以通過(guò)pageContext頁(yè)面上下文對(duì)象來(lái)取得:
pageContext.getAttribute("變量名",pageContext.RESPONSE_SCOPE);至于重定向使用如下語(yǔ)句: response.sendRedirect(URL);
重定向和轉(zhuǎn)發(fā)有一個(gè)重要的不同:當(dāng)使用轉(zhuǎn)發(fā)時(shí),JSP容器將使用一個(gè)內(nèi)部的方法來(lái)調(diào)用目標(biāo)頁(yè)面,新的頁(yè)面繼續(xù)處理同一個(gè)請(qǐng)求,而瀏覽器將不會(huì)知道這個(gè)過(guò)程。與之相反,重定向方式的含義是第一個(gè)頁(yè)面通知瀏覽器發(fā)送一個(gè)新的頁(yè)面請(qǐng)求。因?yàn)椋?dāng)你使用重定向時(shí),瀏覽器中所顯示的URL會(huì)變成新頁(yè)面的URL 而當(dāng)使用轉(zhuǎn)發(fā)時(shí),該URL會(huì)保持不變。重定向的速度比轉(zhuǎn)發(fā)慢,因?yàn)闉g覽仆飯得發(fā)出一個(gè)新的請(qǐng)求。同時(shí),由于重定向方式產(chǎn)生了一個(gè)新的請(qǐng)求,所以經(jīng)過(guò)一次重定向后,request內(nèi)的對(duì)象將無(wú)法使用。 轉(zhuǎn)發(fā)和重定向的區(qū)別 不要僅僅為了把變量傳到下一個(gè)頁(yè)面而使用session作用域,那會(huì)無(wú)故增大變量的作用域,轉(zhuǎn)發(fā)也許可以幫助你解決這個(gè)問(wèn)題。 重定向:以前的request中存放的變量全部失效,并進(jìn)入一個(gè)新的request作用域。 轉(zhuǎn)發(fā):以前的request中存放的變量不會(huì)失效,就像把兩個(gè)頁(yè)面拼到了一起。 正文開(kāi)始:先是看上去不同,他們的調(diào)用分別如下: request.getRequestDispatcher("apage.jsp").forward(request response);//轉(zhuǎn)發(fā)到apage.jsp response.sendRedirect("apage.jsp");//重定向到apage.jsp 在jsp頁(yè)面中你也會(huì)看到通過(guò)下面的方式實(shí)現(xiàn)轉(zhuǎn)發(fā): 提到轉(zhuǎn)發(fā)和重定向就不得不提到request作用域。很多初學(xué)者都知道當(dāng)我們提交一個(gè)表單時(shí),就創(chuàng)建了一個(gè)新的請(qǐng)求。實(shí)際上,當(dāng)我們點(diǎn)擊一個(gè)鏈接時(shí),也創(chuàng)建了一個(gè)新的請(qǐng)求。那么一個(gè)請(qǐng)求的作用于到底有多大呢?例如:在頁(yè)面a.jsp中有一個(gè)鏈接這是指向b的一個(gè)鏈接,而且還帶了一個(gè)參數(shù)。當(dāng)我們點(diǎn)擊這個(gè)連接的時(shí)候,就產(chǎn)生了一個(gè)請(qǐng)求,為了明確起見(jiàn),我們把它叫做requestA-B。現(xiàn)在,在b.jsp頁(yè)面中我們就可以從這個(gè)請(qǐng)求中獲取信息了。在b.jsp中你可以寫(xiě)入out.println(request.getParameter("id"))進(jìn)行測(cè)試。下面更復(fù)雜一點(diǎn),我們?cè)赽.jsp頁(yè)面中增加下面的語(yǔ)句: request.setAttribute("name""funcreal"); out.println(request.getAttriblute("name"));//成功顯示了name變量的值。 現(xiàn)在在b.jsp中再增加一個(gè)鏈接:這是指向c的一個(gè)鏈接,而且還帶了一個(gè)參數(shù)當(dāng)我們點(diǎn)擊這個(gè)連接的時(shí)候,將產(chǎn)生一個(gè)新的請(qǐng)求,這時(shí)requestA-B也就安息了,新的請(qǐng)求叫做requestB-C。同樣的道理,在c.jsp中,我們可以訪問(wèn)到的變量只有age,因?yàn)閕d,name這兩個(gè)變量都屬于requestA-B,此時(shí)他已經(jīng)不存在了。下面是源代碼: a.jsp 指向b.jsp,而且還帶了一個(gè)參數(shù)id=1。requestA-B現(xiàn)在誕生了 b.jsp requestA-B已經(jīng)結(jié)束了。指向c.jsp,而且還帶了一個(gè)參數(shù)age=23 c.jsp d.jsp requestB-C的魔爪已經(jīng)伸到了d.jsp頁(yè)面 運(yùn)行程序,你會(huì)發(fā)現(xiàn)c頁(yè)面中的內(nèi)容沒(méi)有顯示出來(lái),因?yàn)閒orward是自動(dòng)執(zhí)行的,地址欄中雖然是c.jsp但實(shí)際上,但瀏覽器中顯示的已經(jīng)是d.jsp的內(nèi)容了,而且看到了從b.jsp傳過(guò)來(lái)的參數(shù)。你可以簡(jiǎn)單得這樣理解:轉(zhuǎn)發(fā),就是延長(zhǎng)了requestB-C的作用域,,這一句話實(shí)際上是把c.jsp和d.jsp粘到了一起,他們就像是在一個(gè)頁(yè)面中。
jsp實(shí)現(xiàn)頁(yè)面的重定向,使用的是response.sendRedirect("a.jsp");實(shí)現(xiàn)頁(yè)面重定向到a.jsp這個(gè)頁(yè)面。\x0d\x0a分為兩種寫(xiě)法:\x0d\x0a\x0d\x0a1、如果實(shí)在jsp頁(yè)面中寫(xiě)代碼的話,將response.sendRedirect("a.jsp");放在里面就行了,即:\x0d\x0a2、如果是在java文件(如servlet)中寫(xiě)代碼的話,只需寫(xiě)response.sendRedirect("a.jsp");就行了。\x0d\x0a接下來(lái)簡(jiǎn)單說(shuō)說(shuō)頁(yè)面的轉(zhuǎn)發(fā)(forward)與重定向(sendRedirect)的區(qū)別:\x0d\x0a重定向:以前的request中存放的變量全部失效,并進(jìn)入一個(gè)新的request作用域。\x0d\x0a轉(zhuǎn)發(fā):以前的request中存放的變量不會(huì)失效,就像把兩個(gè)頁(yè)面拼到了一起。
當(dāng)前名稱(chēng):頁(yè)面重定向Java代碼 java web中的轉(zhuǎn)發(fā)和重定向
網(wǎng)址分享:http://jinyejixie.com/article38/hpccsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、微信小程序、服務(wù)器托管、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)