1. 如何在jsP網頁中生成動態圖表
JSP是一種廣泛應用的網頁設計技術 ,它是一種HTML和Java腳本混合的編程技術 ,它結合了HTML的靜態特性和Java語言的動態能力 ,因此用它進行動態網頁設計非常方便。在進行圖像處理時 ,一般處理靜態圖片非常容易 ,但是 ,在實際應用中常常需要動態地在網頁中生成二維的圖形.
基於JFreeChart開發的一個時序圖的繪制。代碼如下:
實例中createDataset()方法用於創建數據集合對象。時序圖的數據集合與其他數據集合不同,它需要添加一個時間段內的所有數據,通常採用TimeSeries類進行添加。該實例中通過Math類的random()方法進行隨機生成。
import java.awt.*;
import java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import
java.io.DataInputStream;
import java.io.FileOutputStream;
import
java.io.IOException;
import java.net.URL;
import
java.net.URLConnection;
import java.text.DateFormat;
import
java.text.ParseException;
import java.text.SimpleDateFormat;
import
java.util.Calendar;
import java.util.Date;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.Timer;
import org.jfree.chart.*;
import
org.jfree.chart.annotations.CategoryTextAnnotation;
import
org.jfree.chart.axis.CategoryAnchor;
import
org.jfree.chart.axis.CategoryAxis;
import
org.jfree.chart.axis.CategoryLabelPositions;
import
org.jfree.chart.axis.DateAxis;
import
org.jfree.chart.axis.DateTickUnit;
import
org.jfree.chart.axis.DateTickUnitType;
import
org.jfree.chart.axis.ValueAxis;
import
org.jfree.chart.labels.;
import
org.jfree.chart.plot.CategoryPlot;
import
org.jfree.chart.plot.PlotOrientation;
import
org.jfree.chart.plot.XYPlot;
import
org.jfree.chart.renderer.category.BarRenderer;
import
org.jfree.chart.title.TextTitle;
import
org.jfree.data.category.CategoryDataset;
import
org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.chart.axis.NumberAxis;
import
org.jfree.data.category.DefaultCategoryDataset;
import
org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import
org.jfree.data.gantt.TaskSeriesCollection;
import
org.jfree.data.time.Day;
import org.jfree.data.time.Second;
import
org.jfree.data.time.TimeSeries;
import
org.jfree.data.time.TimeSeriesCollection;
import
org.jfree.data.xy.XYDataset;
public class shixutu extends JApplet {
//PLOT_FONT是一靜態的字體常量對象,使用此對象可以避免反復用到的字體對象被多次創建
private static final Font PLOT_FONT = new Font("黑體", Font.ITALIC ,
18);
JFreeChart chart;
//創建數據動態更新的監聽
class DataGenerator extends Timer
implements ActionListener {
private static final long serialVersionUID =
3977867288743720504L;
String
equID;
//設備ID號
int
totalTask;
//任務數
String[][]
strTask;
//任務情況
public void
actionPerformed(ActionEvent actionevent) {
addTotalObservation();
} DataGenerator()
{
super(1000,
null);
addActionListener(this);
System.out.println("super");
}
}
//將更新的數據添加到chart中
private void addTotalObservation()
{
System.out.println("addTotalObservation");
//設置新的數據集
chart.getXYPlot().setDataset(createDataset());
//通知Jfreechart
數據發生了改變,重新繪制柱狀圖
if
(chart != null)
{
chart.fireChartChanged();
}
}
private static void
processChart(JFreeChart chart)
{
//設置標題字體
chart.getTitle().setFont(new Font("隸書", Font.BOLD,
26));
//設置背景色
chart.setBackgroundPaint(new
Color(252,175,134));
XYPlot plot = chart.getXYPlot();
//獲取圖表的繪制屬性
plot.setDomainGridlinesVisible(false);
//設置網格不顯示
//獲取時間軸對象
DateAxis dateAxis = (DateAxis)
plot.getDomainAxis();
dateAxis.setLabelFont(PLOT_FONT);
//設置時間軸字體
//設置時間軸標尺值字體
dateAxis.setTickLabelFont(new
Font("宋體",Font.PLAIN,12));
dateAxis.setLowerMargin(0.0);
//設置時間軸上顯示的最小值
//獲取數據軸對象
ValueAxis valueAxis =
plot.getRangeAxis();
valueAxis.setLabelFont(PLOT_FONT);
//設置數據字體
DateFormat format = new SimpleDateFormat("mm分ss秒");
//創建日期格式對象
//創建DateTickUnit對象
DateTickUnit dtu = new
DateTickUnit(DateTickUnitType.SECOND,30,format);
dateAxis.setTickUnit(dtu);
//設置日期軸的日期標簽 } //將結果輸出在文件中
private static
void writeChartAsImage(JFreeChart chart)
{
FileOutputStream fos_jpg =
null;
try
{
fos_jpg = new
FileOutputStream("D:\test\shixutu.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300,
null);
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
fos_jpg.close();
} catch (Exception e)
{
}
}
}
//創建數據集合對象
public static XYDataset createDataset()
{
//實例化TimeSeries對象
TimeSeries timeseries = new
TimeSeries("Data");
Second second = new Second();
//實例化Day
double d =
50D;
//添加一年365天的數據
for (int i = 0; i < 500; i++)
{
d = d + (Math.random() - 0.5) * 10;
//創建隨機數據
timeseries.second(day, d);
//向數據集合中添加數據
second = (Second)
second.next();
}
TimeSeriesCollection timeSeriesCollection =
new
TimeSeriesCollection(timeseries);
//返回數據集合對象
return timeSeriesCollection; }//Applet程序初始化
public void init()
{
// 1.
得到數據
XYDataset dataset =
createDataset();
// 2.
構造chart
chart =
ChartFactory.createTimeSeriesChart(
"時序圖示範", //
圖表標題
"時間", //
目錄軸的顯示標簽--橫軸
"數值", //
數值軸的顯示標簽--縱軸
dataset, //
數據集
false,
false, //
是否生成工具
false //
是否生成URL鏈接
);
// 3.
處理chart中文顯示問題
processChart(chart);
// 4.
chart輸出圖片
//writeChartAsImage(chart);
// 5. chart
以swing形式輸出
//6.使用applet輸出
ChartPanel chartPanel = new
ChartPanel(chart);
chartPanel.setPreferredSize(new
java.awt.Dimension(800,500));
getContentPane().add(chartPanel); (new
DataGenerator()).start();
}
public void
paint(Graphics g)
{
if
(chart != null)
{
chart.draw((Graphics2D) g,
getBounds());
}
}
public void destroy() {
}
}
2. 如何在JSP中發送一個動態圖像
要 為你的jsp頁面設置MIME類型,你需要設置頁面的contentType屬性: %@ page co 當一個web頁面帶有image/jpeg (或者其他的圖像格式)的MIME類型被發送時,你的瀏覽器將那個返回結果當作一個圖像,然後瀏覽器顯示圖像,作為頁面的一部分或者完全作為圖像自身。要 為畢仔悉你的jsp頁面設置MIME類型,你需要設置頁面的contentType屬性: <%@ page contentType=image/jpeg % 然後你需要創建一個BufferedImage繪制你的動態圖像: BufferedImage image = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB); 創建完一個BufferedImage後,你需要得到圖形環境進行繪制,一個Graphics或者Graphics2D對象: Graphics g = image.getGraphics(); // or Graphics2d g2d = image.createGraphics(); 從現在起你就可以繪制圖像內容了。對圖形環境繪制就會畫到BufferedImage.最開始這個圖像都是黑色的,因此用你希望的背景顏手乎色戚拆填充圖像是一個不錯的主意,然後,當你完成圖像的繪制,你需要dispose圖形環境: g.dispose(); // or g2d.dispose(); 一旦完成圖像的繪制,你在response中返回那個圖像。你可以使用非標準的com.sun.image.codec.jpeg包中的 JPEGImageEncoder類編碼圖像,或者如果你使用JDK1.4,你可以使用標準的ImageIO類。在使用JPEGImageEncoder 時有一個技巧,你必須從ServletResponse取來ServletOutputStream而不能使用隱含的JSP輸出變數out. ServletOutputStream sos = response.getOutputStream(); JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(sos); encoder.encode(image); // or ImageIO.write(image, JPEG, out); 這里有一個從所有的可能方案中(例如g.dispose();或者g2d.dispose();)選取的一個完整的範例。這個例子使用Graphics對 象繪制一個隨機的多邊形,圖像通過JPEGImageEncoder繪制,你可以自由設置多邊形的頂點數得到更復雜的形狀,換言之,有更多頂點和邊。
3. 怎麼用JSP製作動態網頁,需要安裝什麼軟體
一、什麼是ASP?
ASP是Active Server Pages的簡稱,它是一種在微軟公司的WEB伺服器IIS(Internet Infomation Server)上開發交互網頁的新技術。微軟公司最初在IIS3.0版上使用它以取代CGI。隨著Windows NT在WWW上的使用日益增多,ASP已經成為了開發動態網站、構築Internet和Intranet應用的最佳選擇。
二、在哪裡可以找到支持ASP的伺服器軟體?
如果你的計算機上裝的是Windows NT 4.0,那麼你可以通過安裝NT的可選包Windows NT Option Pack 4.0來安裝IIS4.0,然後你就可以在IIS4.0里使用ASP了。如果你的操作系統是Windows 98, 那麼你可以在Win98光碟里找到一個ADD-ONS目錄,下面的PWS目錄裡面有一個小型WWW伺服器軟體PWS(PersonalWeb Server),它也可以支持ASP。如果你想用一用Windows 2000的測試版,那麼你可以選裝Server版或者Advanced Server版,它們都已經自帶IIS5.0了。
三、如何編寫ASP?
你或許用過Javascript在網頁里彈出一個小窗口,你是這樣做的:
<html>
<head>
<title>New Page 1
</head>
<body>
<Script Language=〃JavaScript〃>
alert(〃hello!〃);
</Script>
</body>
</html>
編寫ASP就跟它差不多,同樣是在網頁文件里加些東西,不像CGI那樣你還得寫一個EXE文件。唯一應該注意的是,網頁文件應該以.asp作為後綴名,而不能是.htm,這樣WWW伺服器才能識別它是ASP文件並進行相應的處理。
注意,上面例子中使用了 <script>和</script> 來把腳本包括起來,以區別普通的Html標記。在ASP中,使用另外兩個符號來標記ASP代碼,它們是「<%」 和「%>」。WWW伺服器在處理ASP文件時,一看到$#@60;%就知道ASP的代碼開始了,而看到%>就知道代碼結束。
通常,我們可以用Notepad來編輯ASP文件,不過因為FrontPage98有強大的網頁管理功能,所以最好在Frontpage98里編寫ASP文件。當你要往一個網頁里插入ASP代碼時,只需選擇FrontPage Editor下部的「HTML」標簽頁就行了。
四、一個例子
最後讓我們來看一個例子,將它以a.asp存檔,它在瀏覽器里輸出三個「Hello ASP」,從這里我們可以體會ASP代碼是如何同HTML標記語言結合在一起的。
<html>
<head>
<title>New Page 1
</head>
<body>
<%For i=1 to 3%>
<font size=〃><%=i%>〃Hello ASP
<%Next%>
</body>
</html>
請注意,文件後綴一定要為.asp。
五、ASP的處理流程
當我們用瀏覽器查看一個ASP文件時,都發生了些什麼呢?
以上面那個a.asp為例,當我們在瀏覽器里輸入 http://localhost/a.asp(localhost為主機名),瀏覽器向WWW伺服器發出請求,要求返回a.asp的內容。WWW伺服器在接到請求後,發現它的後綴為.asp,於是就將這個文件交給專門的ASP處理程序,這個程序掃描a.asp,把其中用<%和%>括起來的代碼解釋並執行,最後把執行結果再傳回給WWW伺服器,WWW伺服器把結果通過HTTP協議傳回到瀏覽器。你可以用瀏覽器的查看源代碼功能查看一下,你並沒有發現<%和%>標記,因為它們已經在伺服器端被處理掉了,瀏覽器所獲得的僅僅是結果,是一些標準的HTML標記。整個過程如圖。
下一講中,我們將介紹一些Vbscript的基礎知識。它是在ASP中用得最多的腳本語言之一。
---------------
1.2 JSP及其特點
JavaServer Pages(JSP)是一種實現普通靜態HTML和動態HTML混合編碼的技術,有關JSP基礎概念的說明請參見《JSP技術簡介 》。
許多由CGI程序生成的頁面大部分仍舊是靜態HTML,動態內容只在頁面中有限的幾個部分出現。但是包括Servlet在內的大多數CGI技術及其變種,總是通過程序生成整個頁面。JSP使得我們可以分別創建這兩個部分。例如,下面就是一個簡單的JSP頁面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>歡迎訪問網上商店</TITLE></HEAD>
<BODY>
<H1>歡迎</H1>
<SMALL>歡迎,
<!-- 首次訪問的用戶名字為"New User" -->
<% out.println(Utils.getUserNameFromCookie(request)); %>
要設置帳號信息,請點擊
<A HREF="Account-Settings.html">這里</A></SMALL>
<P>
頁面的其餘內容。.
</BODY></HTML>
下面是JSP和其他類似或相關技術的一個簡單比較:
JSP和Active Server Pages(ASP)相比
Microsoft的ASP是一種和JSP類似的技術。JSP和ASP相比具有兩方面的優點。首先,動態部分用Java編寫,而不是VB Script或其他Microsoft語言,不僅功能更強大而且更易於使用。第二,JSP應用可以移植到其他操作系統和非Microsoft的Web伺服器上。
JSP和純Servlet相比
JSP並沒有增加任何本質上不能用Servlet實現的功能。但是,在JSP中編寫靜態HTML更加方便,不必再用 println語句來輸出每一行HTML代碼。更重要的是,藉助內容和外觀的分離,頁面製作中不同性質的任務可以方便地分開:比如,由頁面設計專家進行HTML設計,同時留出供Servlet程序員插入動態內容的空間。
JSP和伺服器端包含(Server-Side Include,SSI)相比
SSI是一種受到廣泛支持的在靜態HTML中引入外部代碼的技術。JSP在這方面的支持更為完善,因為它可以用Servlet而不是獨立的程序來生成動態內容。另外,SSI實際上只用於簡單的包含,而不是面向那些能夠處理表單數據、訪問資料庫的「真正的」程序。
JSP和javascript相比
javascript能夠在客戶端動態地生成HTML。雖然javascript很有用,但它只能處理以客戶端環境為基礎的動態信息。除了Cookie之外,HTTP狀態和表單提交數據對javascript來說都是不可用的。另外,由於是在客戶端運行,javascript不能訪問伺服器端資源,比如資料庫、目錄信息等等。
4. 如何在JSP頁面發送一個動態圖像
要為你的jsp頁面設置MIME類型,你需要設置頁面的contentType屬性:
<%@ page contentType="image/jpeg" ... %> 然後你需要創建一個BufferedImage繪制你的動態陵兄圖像: BufferedImage image = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB); 創建完一個BufferedImage後,你需要得到圖形環境進行繪制,一個Graphics或者Graphics2D對象: Graphics g = image.getGraphics(); // or Graphics2d g2d = image.createGraphics(); 從現在起你就可以繪制圖像內容了。對圖形環境繪制就會畫到BufferedImage。最開始這個圖像都是黑色的,因此用你希望的背景顏色填充圖像是一個不錯的主意,然後,當你完成圖像的繪制,你需要dispose圖形環境: g.dispose(); // or g2d.dispose();
一旦完成圖像的繪制,你在response中返回那個圖像。你可以使用非標準的com.sun.image.codec.jpeg包中的JPEGImageEncoder類編碼圖像,或者如果你使用JDK1.4,你可以使用標準的ImageIO類。在使用JPEGImageEncoder時有一個技巧,你必須從ServletResponse取來ServletOutputStream而不能使用隱含的JSP輸出變數out。
ServletOutputStream sos = response.getOutputStream(); JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(sos); encoder.encode(image); // or ImageIO.write(image, "JPEG", out);
這里有一個從所有的可能方案中(例緩好如g.dispose();或者g2d.dispose();)選取的一個完整的範例.這個例子使用Graphics對象繪制一個隨機的多邊形,圖像通過JPEGImageEncoder繪制,你可以自由設置多邊形的頂點數得到更復雜的形狀,換言尺哪襲之,有更多頂點和邊。
5. jsp怎樣實現了網頁動態效果的
我個人覺得你可以回答下jsp的原理:間接的回答了網頁動態效果,用jsp技術開發的網頁就具有動態效果,可以和資料庫進行交互.
用戶向伺服器發送請求,才會顯示完整的頁面
從瀏覽器發送請求打開index.jsp頁面
2.伺服器得到請求,會將index.jsp翻譯成index_jsp.java
3.伺服器將index_jsp.java文件編譯成index_jsp.class
4.伺服器運行index_jsp.class文件。
5.在瀏覽器上顯示jsp頁面中的內容.
面試官的問題不一定都需要回答正確完整,能回答80%就很不錯了!
6. 請問jsp頁面裡面如何動態載入圖片
用JS動態設置 <img 的 src
7. jsp中怎樣得到一個動態時序圖,向股票那樣的
創建柱狀圖
1 引入jFreechart的包
2 在web.xml中加入