2000年3月30日星期四
Java Mail編
◆SMTPとは?
SMTPはSimple Mail Transfer Protocolの略です。メールを送信するときに使われるプロトコルです。下のJavaMailのAPIを使えばこのプロトコルを知らなくてもメールを簡単に送れます。
◆POPとは?
POPはPost Office Protocolの略です。メールを受信するときに使われるプロトコルです。JavaMailのAPIを使用するとこのプロトコルを詳しく知らなくても簡単にメールを受信するプログラムを作ることができます。
◆JavaMailとは?
JavaMailとはJavaのプログラムから、メールの送受信を行うためのAPIです。JavaMailのAPIを使用してJavaでメールを送受信するプログラムを作成することができます。
JavaMail 参照:http://www.hellohiro.com/javamail.htm (SMTP)送信編
JavaMail 参照:http://www.hellohiro.com/javamailpop.htm (POP)受信編
日時に関する情報を取得する
| 値 | 説明 |
| AM_PM | HOUR が正午より前であるか後であるかを示します。 |
| DATE | 月の日を示します。 |
| DAY_OF_MONTH | 月の日を示します。 |
| DAY_OF_WEEK | 曜日を示します。 |
| DAY_OF_WEEK_IN_MONTH | 現在の月の何度目の曜日かを示します。 |
| DAY_OF_YEAR | 現在の年の何日目かを示します。 |
| DST_OFFSET | 夏時間のオフセットをミリ秒単位で示します。 |
| ERA | ユリウス暦の AD または BC などの年代を示します。 |
| HOUR | 午前または午後の何時かを示します。 |
| HOUR_OF_DAY | 時刻を示します。 |
| MILLISECOND | ミリ秒を示します。 |
| MINUTE | 分を示します。 |
| MONTH | 月を示すフィールド値です。 |
| SECOND | 秒を示します。 |
| WEEK_OF_MONTH | 現在の月の何週目かを示します。 |
| WEEK_OF_YEAR | 現在の年の何週目かを示します。 |
| YEAR | 年を示すフィールド値です。 |
| ZONE_OFFSET | GMT から直接計算したオフセットをミリ秒単位で示します。 |
MONTHの値は0から11で、JANUARY(0), FEBRUARY(1), MARCH(2), APRIL(3), MAY(4), JUNE(5), JULY(6), AUGUST(7), SEPTEMBER(8), OCTOBER(9), NOVEMBER(10), DECEMBER(11)になります。
HOURは12 時間制 (0 ~ 11) です。正午および真夜中は、12 ではなく 0 で表されます。
DAY_OF_WEEKの値は1から7で、SUNDAY(1)、MONDAY(2)、TUESDAY(3)、WEDNESDAY(4)、THURSDAY(5)、FRIDAY(6)、および SATURDAY(7) になります。
AM_PMの値は0か1で、AM(0)、PMY(1) になります。
import java.util.Calendar;
class testCalendar1{
public static void main(String args[]){
String[] week_name = {"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"};
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int day_of_year = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("現在の日時は");
System.out.println(year + "年" + month + "月" + day + "日");
System.out.println("(" + week_name[week] + ")");
System.out.println(hour + "時" + minute + "分" + second + "秒");
System.out.println("今日は今年の" + day_of_year + "日目です");
}
}
現在の日付は
2006年5月5日
(金曜日)
6時3分13秒
今日は今年の125日目です
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class SimpleDateFormatSample {
public static void main(String args[]) {
//現在日時を取得する
Calendar c = Calendar.getInstance();
//フォーマットパターンを指定して表示する
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E曜日");
System.out.println(sdf.format(c.getTime()));
//フォーマットパターン変更して表示する
sdf.applyPattern("a hh:mm:ss SSS");
System.out.println(sdf.format(c.getTime()));
}
}
2011年08月30日 火曜日
午後 01:51:52 651
SimpleDateFormatクラス 主要コンストラクタ
| SimpleDateFormat() | デフォルトパターンにて生成する(yy/MM/dd H:mm) |
| SimpleDateFormat(String p) | パターンを指定して生成する |
主要メソッド
| void applyPattern(String pattern) | パターンを指定する |
| String toPattern() | フォーマットパターンを返す |
| String format(Date d) | 引数の日付をフォーマットする |
日付パターン
| 文字 | 意味 | 例 |
| yy | 西暦年(2桁) | 2012年→2012 |
| yyyy | 西暦年(4桁) | 2012年→12 |
| M | 月 | 8月→8 |
| MM | 月(ゼロ埋め) | 8月→08 |
| D | 年に対する日 | 1月9日→9 |
| DDD | 年に対する日(ゼロ埋め) | 1月9日→009 |
| d | 月に対する日 | 3日→3 |
| dd | 月に対する日(ゼロ埋め) | 3日→03 |
| w | 年に対する週 | 2011年8月30日→36(2011年の36週目) |
| W | 月に対する週 | 2011年8月30日→5(2011年8月の5週目) |
| E | 曜日 | 2011年8月30日→火 |
| F | 月に対する曜日番号 | 2011年8月30日(火) |
| →5(2011年8月の5回目の火曜日) | ||
| a | 午前午後 | 13:00→午後 |
| h | 時(12時間制) | 13時→1 |
| hh | 時(12時間制ゼロ埋め) | 13時→01 |
| H | 時(24時間制) | 3時→3 |
| HH | 時(24時間制ゼロ埋め) | 3時→03 |
| m | 分 | 3分→3 |
| mm | 分(ゼロ埋め) | 3分→03 |
| s | 秒 | 3秒→3 |
| ss | 秒(ゼロ埋め) | 3秒→03 |
| S | ミリ秒 | 3ミリ秒→3 |
| SSS | ミリ秒(ゼロ埋め) | 3ミリ秒→003 |
日付パターンと出力例のサンプル
(パターン)"yyyy/MM/dd" → (出力例)2011/08/31 (パターン)"HH:mm:ss" → (出力例)14:53:02 (パターン)"HH:mm:ss S" → (出力例)15:52:30 280 (パターン)"E曜日" → (出力例)水曜日 (パターン)"ah時m分" → (出力例)午後2時55分
JFreeChart中文使用文档
void setAntiAlias(boolean flag) 字体模糊边界
void setBackgroundImage(Image image) 背景图片
void setBackgroundImageAlignment(int alignment) 背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)
void setBackgroundImageAlpha(float alpha) 背景图片透明度(0.0~1.0)
void setBackgroundPaint(Paint paint) 背景色
void setBorderPaint(Paint paint) 边界线条颜色
void setBorderStroke(Stroke stroke) 边界线条笔触
void setBorderVisible(boolean visible) 边界线条是否可见
-----------------------------------------------------------------------------------------------------------
TextTitle类:
void setFont(Font font) 标题字体
void setPaint(Paint paint) 标题字体颜色
void setText(String text) 标题内容
-----------------------------------------------------------------------------------------------------------
StandardLegend(Legend)类:
void setBackgroundPaint(Paint paint) 图示背景色
void setTitle(String title) 图示标题内容
void setTitleFont(Font font) 图示标题字体
void setBoundingBoxArcWidth(int arcWidth) 图示边界圆角宽
void setBoundingBoxArcHeight(int arcHeight) 图示边界圆角高
void setOutlinePaint(Paint paint) 图示边界线条颜色
void setOutlineStroke(Stroke stroke) 图示边界线条笔触
void setDisplaySeriesLines(boolean flag) 图示项是否显示横线(折线图有效)
void setDisplaySeriesShapes(boolean flag) 图示项是否显示形状(折线图有效)
void setItemFont(Font font) 图示项字体
void setItemPaint(Paint paint) 图示项字体颜色
void setAnchor(int anchor) 图示在图表中的显示位置(参数常量在Legend类中定义)
-----------------------------------------------------------------------------------------------------------
Axis类:
void setVisible(boolean flag) 坐标轴是否可见
void setAxisLinePaint(Paint paint) 坐标轴线条颜色(3D轴无效)
void setAxisLineStroke(Stroke stroke) 坐标轴线条笔触(3D轴无效)
void setAxisLineVisible(boolean visible) 坐标轴线条是否可见(3D轴无效)
void setFixedDimension(double dimension) (用于复合表中对多坐标轴的设置)
void setLabel(String label) 坐标轴标题
void setLabelFont(Font font) 坐标轴标题字体
void setLabelPaint(Paint paint) 坐标轴标题颜色
void setLabelAngle(double angle)` 坐标轴标题旋转角度(纵坐标可以旋转)
void setTickLabelFont(Font font) 坐标轴标尺值字体
void setTickLabelPaint(Paint paint) 坐标轴标尺值颜色
void setTickLabelsVisible(boolean flag) 坐标轴标尺值是否显示
void setTickMarkPaint(Paint paint) 坐标轴标尺颜色
void setTickMarkStroke(Stroke stroke) 坐标轴标尺笔触
void setTickMarksVisible(boolean flag) 坐标轴标尺是否显示
ValueAxis(Axis)类:
void setAutoRange(boolean auto) 自动设置数据轴数据范围
void setAutoRangeMinimumSize(double size) 自动设置数据轴数据范围时数据范围的最小跨度
void setAutoTickUnitSelection(boolean flag) 数据轴的数据标签是否自动确定(默认为true)
void setFixedAutoRange(double length) 数据轴固定数据范围(设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围)
void setInverted(boolean flag) 数据轴是否反向(默认为false)
void setLowerMargin(double margin) 数据轴下(左)边距
void setUpperMargin(double margin) 数据轴上(右)边距
void setLowerBound(double min) 数据轴上的显示最小值
void setUpperBound(double max) 数据轴上的显示最大值
void setPositiveArrowVisible(boolean visible) 是否显示正向箭头(3D轴无效)
void setNegativeArrowVisible(boolean visible) 是否显示反向箭头(3D轴无效)
void setVerticalTickLabels(boolean flag) 数据轴数据标签是否旋转到垂直
void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)
NumberAxis(ValueAxis)类:
void setAutoRangeIncludesZero(boolean flag) 是否强制在自动选择的数据范围中包含0
void setAutoRangeStickyZero(boolean flag) 是否强制在整个数据轴中包含0,即使0不在数据范围中
void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式
void setTickUnit(NumberTickUnit unit) 数据轴的数据标签(需要将AutoTickUnitSelection设false)
DateAxis(ValueAxis)类:
void setMaximumDate(Date maximumDate) 日期轴上的最小日期
void setMinimumDate(Date minimumDate) 日期轴上的最大日期
void setRange(Date lower,Date upper) 日期轴范围
void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式
void setTickUnit(DateTickUnit unit) 日期轴的日期标签(需要将AutoTickUnitSelection设false)
void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置(参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义)
CategoryAxis(Axis)类:
void setCategoryMargin(double margin) 分类轴边距
void setLowerMargin(double margin) 分类轴下(左)边距
void setUpperMargin(double margin) 分类轴上(右)边距
void setVerticalCategoryLabels(boolean flag) 分类轴标题是否旋转到垂直
void setMaxCategoryLabelWidthRatio(float ratio) 分类轴分类标签的最大宽度
void setMaximumCategoryLabelLines(int lines); 分类轴分类标签最大行数即换行的实现
-----------------------------------------------------------------------------------------------------------
Plot类:
void setBackgroundImage(Image image) 数据区的背景图片
void setBackgroundImageAlignment(int alignment) 数据区的背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)
void setBackgroundPaint(Paint paint) 数据区的背景图片背景色
void setBackgroundAlpha(float alpha) 数据区的背景透明度(0.0~1.0)
void setForegroundAlpha(float alpha) 数据区的前景透明度(0.0~1.0)
void setDataAreaRatio(double ratio) 数据区占整个图表区的百分比
void setOutLinePaint(Paint paint) 数据区的边界线条颜色
void setOutLineStroke(Stroke stroke) 数据区的边界线条笔触
void setNoDataMessage(String message) 没有数据时显示的消息
void setNoDataMessageFont(Font font) 没有数据时显示的消息字体
void setNoDataMessagePaint(Paint paint) 没有数据时显示的消息颜色
CategoryPlot(Plot)类:
void setDataset(CategoryDataset dataset) 数据区的2维数据表
void setColumnRenderingOrder(SortOrder order) 数据分类的排序方式
void setAxisOffset(Spacer offset) 坐标轴到数据区的间距
void setOrientation(PlotOrientation orientation) 数据区的方向(PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL)
void setDomainAxis(CategoryAxis axis) 数据区的分类轴
void setDomainAxisLocation(AxisLocation location) 分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
void setDomainGridlinesVisible(boolean visible) 分类轴网格是否可见
void setDomainGridlinePaint(Paint paint) 分类轴网格线条颜色
void setDomainGridlineStroke(Stroke stroke) 分类轴网格线条笔触
void setRangeAxis(ValueAxis axis) 数据区的数据轴
void setRangeAxisLocation(AxisLocation location) 数据轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
void setRangeGridlinesVisible(boolean visible) 数据轴网格是否可见
void setRangeGridlinePaint(Paint paint) 数据轴网格线条颜色
void setRangeGridlineStroke(Stroke stroke) 数据轴网格线条笔触
void setRenderer(CategoryItemRenderer renderer) 数据区的表示者(详见Renderer组)
void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释
void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域
PiePlot(Plot)类:
void setDataset(PieDataset dataset) 数据区的1维数据表
void setIgnoreNullValues(boolean flag) 忽略无值的分类
void setCircular(boolean flag) 饼图是否一定是正圆
void setStartAngle(double angle) 饼图的初始角度
void setDirection(Rotation direction) 饼图的旋转方向
void setExplodePercent(int section,double percent) 抽取的那块(1维数据表的分类下标)以及抽取出来的距离(0.0~1.0),3D饼图无效
void setLabelBackgroundPaint(Paint paint) 分类标签的底色
void setLabelFont(Font font) 分类标签的字体
void setLabelPaint(Paint paint) 分类标签的字体颜色
void setLabelLinkMargin(double margin) 分类标签与图的连接线边距
void setLabelLinkPaint(Paint paint) 分类标签与图的连接线颜色
void setLabelLinkStroke(Stroke stroke) 分类标签与图的连接线笔触
void setLabelOutlinePaint(Paint paint) 分类标签边框颜色
void setLabelOutlineStroke(Paint paint) 分类标签边框笔触
void setLabelShadowPaint(Paint paint) 分类标签阴影颜色
void setMaximumLabelWidth(double width) 分类标签的最大长度(0.0~1.0)
void setPieIndex(int index) 饼图的索引(复合饼图中用到)
void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色
void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触
void setSectionPaint(int section,Paint paint) 指定分类饼的颜色
void setShadowPaint(Paint paint) 饼图的阴影颜色
void setShadowXOffset(double offset) 饼图的阴影相对图的水平偏移
void setShadowYOffset(double offset) 饼图的阴影相对图的垂直偏移
void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式,设置成null则整个标签包括连接线都不显示
void setToolTipGenerator(PieToolTipGenerator generator) MAP中鼠标移上的显示格式
void setURLGenerator(PieURLGenerator generator) MAP中钻取链接格式
PiePlot3D(PiePlot)类:
void setDepthFactor(double factor) 3D饼图的Z轴高度(0.0~1.0)
MultiplePiePlot(Plot)类:
void setLimit(double limit) 每个饼图之间的数据关联(详细比较复杂)
void setPieChart(JFreeChart pieChart) 每个饼图的显示方式(见JFreeChart类个PiePlot类)
-----------------------------------------------------------------------------------------------------------
AbstractRenderer类:
void setItemLabelAnchorOffset(double offset) 数据标签的与数据点的偏移
void setItemLabelsVisible(boolean visible) 数据标签是否可见
void setItemLabelFont(Font font) 数据标签的字体
void setItemLabelPaint(Paint paint) 数据标签的字体颜色
void setItemLabelPosition(ItemLabelPosition position) 数据标签位置
void setPositiveItemLabelPosition(ItemLabelPosition position) 正数标签位置
void setNegativeItemLabelPosition(ItemLabelPosition position) 负数标签位置
void setOutLinePaint(Paint paint) 图形边框的线条颜色
void setOutLineStroke(Stroke stroke) 图形边框的线条笔触
void setPaint(Paint paint) 所有分类图形的颜色
void setShape(Shape shape) 所有分类图形的形状(如折线图的点)
void setStroke(Stroke stroke) 所有分类图形的笔触(如折线图的线)
void setSeriesItemLabelsVisible(int series,boolean visible) 指定分类的数据标签是否可见
void setSeriesItemLabelFont(int series,Font font) 指定分类的数据标签的字体
void setSeriesItemLabelPaint(int series,Paint paint) 指定分类的数据标签的字体颜色
void setSeriesItemLabelPosition(int series,ItemLabelPosition position) 数据标签位置
void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正数标签位置
void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 负数标签位置
void setSeriesOutLinePaint(int series,Paint paint) 指定分类的图形边框的线条颜色
void setSeriesOutLineStroke(int series,Stroke stroke) 指定分类的图形边框的线条笔触
void setSeriesPaint(int series,Paint paint) 指定分类图形的颜色
void setSeriesShape(int series,Shape shape) 指定分类图形的形状(如折线图的点)
void setSeriesStroke(int series,Stroke stroke) 指定分类图形的笔触(如折线图的线)
AbstractCategoryItemRenderer(AbstractRenderer)类:
void setLabelGenerator(CategoryLabelGenerator generator) 数据标签的格式
void setToolTipGenerator(CategoryToolTipGenerator generator) MAP中鼠标移上的显示格式
void setItemURLGenerator(CategoryURLGenerator generator) MAP中钻取链接格式
void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分类的数据标签的格式
void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator) 指定分类的MAP中鼠标移上的显示格式
void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分类的MAP中钻取链接格式
BarRenderer(AbstractCategoryItemRenderer)类:
void setDrawBarOutline(boolean draw) 是否画图形边框
void setItemMargin(double percent) 每个BAR之间的间隔
void setMaxBarWidth(double percent) 每个BAR的最大宽度
void setMinimumBarLength(double min) 最短的BAR长度,避免数值太小而显示不出
void setPositiveItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的正数标签位置
void setNegativeItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的负数标签位置
BarRenderer3D(BarRenderer)类:
void setWallPaint(Paint paint) 3D坐标轴的墙体颜色
StackedBarRenderer(BarRenderer)类:
没有特殊的设置
StackedBarRenderer3D(BarRenderer3D)类:
没有特殊的设置
GroupedStackedBarRenderer(StackedBarRenderer)类:
void setSeriesToGroupMap(KeyToGroupMap map) 将分类自由的映射成若干个组(KeyToGroupMap.mapKeyToGroup(series,group))
LayeredBarRenderer(BarRenderer)类:
void setSeriesBarWidth(int series,double width) 设定每个分类的宽度(注意设置不要使某分类被覆盖)
WaterfallBarRenderer(BarRenderer)类:
void setFirstBarPaint(Paint paint) 第一个柱图的颜色
void setLastBarPaint(Paint paint) 最后一个柱图的颜色
void setPositiveBarPaint(Paint paint) 正值柱图的颜色
void setNegativeBarPaint(Paint paint) 负值柱图的颜色
IntervalBarRenderer(BarRenderer)类:
需要传IntervalCategoryDataset作为数据源
GanttBarRenderer(IntervalBarRenderer)类:
void setCompletePaint(Paint paint) 完成进度颜色
void setIncompletePaint(Paint paint) 未完成进度颜色
void setStartPercent(double percent) 设置进度条在整条中的起始位置(0.0~1.0)
void setEndPercent(double percent) 设置进度条在整条中的结束位置(0.0~1.0)
StatisticBarRenderer(BarRenderer)类:
需要传StatisticCategoryDataset作为数据源
LineAndShapeRenderer(AbstractCategoryItemRenderer)类:
void setDrawLines(boolean draw) 是否折线的数据点之间用线连
void setDrawShapes(boolean draw) 是否折线的数据点根据分类使用不同的形状
void setShapesFilled(boolean filled) 所有分类是否填充数据点图形
void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形
void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框
void setBaseLegendTextFont(Font font) 设置分类标签的字体
void setBaseShape(Shape shape) 设置折线数据点的形状
void setBaseShapesVisible(boolean flag) 设置折线数据点可见
LevelRenderer(AbstractCategoryItemRenderer)类:
void setItemMargin(double percent) 每个分类之间的间隔
void setMaxItemWidth(double percent) 每个分类的最大宽度
CategoryStepRenderer(AbstractCategoryItemRenderer)类:
void setStagger(boolean shouldStagger) 不同分类的图是否交错
MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类:
void setDrawLines(boolean drawLines) 是否在每个分类线间画连接线
void setGroupPaint(Paint groupPaint) 一组图形连接线的颜色
void setGroupStroke(Stroke groupStroke) 一组图形连接线的笔触
void setMaxIcon(Icon maxIcon) 最大值的ICON
void setMinIcon(Icon minIcon) 最小值的ICON
void setObjectIcon(Icon objectIcon) 所有值的ICON
AreaRender(AbstractCategoryItemRenderer)类:
没有特殊的设置
StackedAreaRender(AreaRender)类:
没有特殊的设置
JFreeChart
<servlet>
<servlet-name>ChartServlet</servlet-name>
<servlet-class>request.requestMstRegist.test.ChartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ChartServlet</servlet-name>
<url-pattern>/servlet/Chart</url-pattern>
</servlet-mapping>
ChartServlet
package request.requestMstRegist.test;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ChartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher("../temp/chart.jsp");
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
chart.jsp
<%@page contentType="text/html; charset=UTF-8" %> <jsp:useBean id="chart" class="request.requestMstRegist.test.Chart"/> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <table> <tr><td align="center" width="1200"><h1>Chart.jsp</h1></td></tr> <tr><td align="center"><img src="<%= "../temp/" + chart.getBarChartName() %>" alt="test image" usemap="#test" border="0"/></td></tr> <tr><td align="center"><img src="<%= "../temp/" + chart.getLineChartName() %>" alt="test image" usemap="#test" border="0"/></td></tr> </table> </body> </html>
Chart.java
package request.requestMstRegist.test;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpSession;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
/**
* 棒グラフのサンプル
*/
public class Chart extends ServletUtilities {
String barChartName;
String lineChartName;
private DefaultCategoryDataset getBarChartDataSet() {
// 表示するデータの作成
String series1 = "第一";
String series2 = "第二";
String series3 = "第三";
// カテゴリーの設定
String category1 = "カテゴリー 1";
String category2 = "カテゴリー 2";
String category3 = "カテゴリー 3";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, series1, category1);
dataset.addValue(4.0, series1, category2);
dataset.addValue(5.0, series1, category3);
dataset.addValue(5.0, series2, category1);
dataset.addValue(7.0, series2, category2);
dataset.addValue(7.0, series2, category3);
dataset.addValue(6.0, series3, category1);
dataset.addValue(8.0, series3, category2);
dataset.addValue(8.0, series3, category3);
return dataset;
}
private DefaultCategoryDataset getLineChartDataSet() {
// 表示するデータの作成
String series1 = "NTTドコモ";
String series2 = "au";
String series3 = "ソフトバンク";
// カテゴリーの設定
String category1 = "7月";
String category2 = "8月";
String category3 = "9月";
String category4 = "10月";
String category5 = "11月";
// グラフデータを設定する
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(145100, series1, category1);
dataset.addValue(125500, series1, category2);
dataset.addValue(109400, series1, category3);
dataset.addValue(57700, series1, category4);
dataset.addValue(88100, series1, category5);
dataset.addValue(51800, series2, category1);
dataset.addValue(56600, series2, category2);
dataset.addValue(914000, series2, category3);
dataset.addValue(58400, series2, category4);
dataset.addValue(82300, series2, category5);
dataset.addValue(279500, series3, category1);
dataset.addValue(288900, series3, category2);
dataset.addValue(332600, series3, category3);
dataset.addValue(324200, series3, category4);
dataset.addValue(276600, series3, category5);
return dataset;
}
public Chart() {
// 日本語が文字化けしないテーマ
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
try {
// 棒グラフDataSet****************************************************************
DefaultCategoryDataset barDS = getBarChartDataSet();
// 棒グラフのJFreeChartオブジェクトの生成
JFreeChart barChart = ChartFactory.createBarChart("棒グラフのサンプル", null, "値", barDS, PlotOrientation.VERTICAL, true, true, false);
// 棒グラフ名設定
barChartName = saveChartAsPNG(barChart, 500, 500, null);
// 線グラフDataSet****************************************************************
DefaultCategoryDataset lineDS = getLineChartDataSet();
// 線グラフのJFreeChartオブジェクトの生成
JFreeChart lineChart = ChartFactory.createLineChart("純増数", "キャリア", "契約数", lineDS, PlotOrientation.VERTICAL, true, false, false);
// 線グラフ名設定
lineChartName = saveChartAsPNG(lineChart, 600, 400, null);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Chart();
}
// グラフ名を取得
public String getBarChartName() {
return barChartName;
}
public String getLineChartName() {
return lineChartName;
}
/** ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 共通 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */
// グラフ保存先作る
protected static void createTempDir() {
String tempDirName = System.getProperty("java.io.tmpdir") + "/webapps/veriserve/temp";
if (tempDirName == null) {
throw new RuntimeException("Temporary directory system property " + "(java.io.tmpdir) is null.");
}
// create the temporary directory if it doesn't exist
File tempDir = new File(tempDirName);
if (!tempDir.exists()) {
tempDir.mkdirs();
}
}
// グラフ保存
public static String saveChartAsPNG(JFreeChart chart, int width, int height, HttpSession session) throws IOException {
String imgDir = System.getProperty("java.io.tmpdir") + "/webapps/veriserve/temp";
if (chart == null) {
throw new IllegalArgumentException("Null 'chart' argument.");
}
createTempDir();
String prefix = ServletUtilities.getTempFilePrefix();
if (session == null) {
prefix = ServletUtilities.getTempOneTimeFilePrefix();
}
File tempFile = File.createTempFile(prefix, ".png", new File(imgDir));
ChartUtilities.saveChartAsPNG(tempFile, chart, width, height);
if (session != null) {
ServletUtilities.registerChartForDeletion(tempFile, session);
}
return tempFile.getName();
}
}
選択肢を動的に生成
// JavaBeanを導入
<jsp:useBean id="DataList" class="test.EmployeeList" scope="session" />
<script type="text/javascript">
// JavaBean情報からJavaScript配列生成
var aryData = new Array();
<%
for(int i=0;i<DataList.getCount();i++){
out.print("aryData["+i+"] = new Array(\"");
out.print(DataList.Data(i).getEmpNO());
out.print("\", \"");
out.print(DataList.Data(i).getEmpName());
out.println("\");");
}
%>
// 「選択」肢を配列にセット
function addSelOption(selObj, myValue, myText)
{
selObj.length++;
selObj.options[selObj.length - 1].value = myValue;
selObj.options[selObj.length - 1].text = myText;
}
//「ProjectCode」を変わる時「履歴」選択肢を動的に生成
function changePJ (obj,selObj)
{
selObj.length = 0;
addSelOption (selObj,"","選択..."); // 「履歴」デフォルト選択肢の生成
// 「ProjectCode」を再度 "選択..." に戻した時の不具合修正
if (obj.value == "")
{
return;
}
//「履歴」選択肢を動的に生成
for(var index = 0; index < aryData.length; index++){
var itmeKey = aryData[index][0];
var itemVal = aryData[index][1];
addSelOption (selObj, itmeKey, itemVal);
}
}
</script>
<form name="mf" id="main_form" method="POST">
//「ProjectCode」選択肢
<select id="pj" name="pj" onChange="changePJ(this,mf.history);">
<option value="">選択...</option>
</select>
//「履歴」選択肢
<select id="history" name="history">
<option value="">選択...</option>
</select>
</form>
2000年3月29日星期三
Java的日期操作
Javaで日付・時刻の操作を行う場合は、Calendarクラスを使用します。日付の加算、減算、比較など様々な機能を持っています。Calendarクラスを使用する際は、java.uti.Calendarクラスをインポートする必要があります。
//java.util.Calendarクラスをインポートします。
import java.util.Calendar;
class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();
//getTimeメソッドで日時を取得し表示しています。
//デフォルトの設定では実行時点の日時が取得されます。
System.out.println(cal1.getTime());
}
}
C:\Java\source\TEST>javac Test.java
C:\Java\source\TEST>java Test
Sun Apr 13 15:20:24 JST 2008
(2). 日付・時刻の設定
任意の日付・時刻を設定する際はsetメソッドを使用します。月を設定する際は、月は0~11の間で表現されるので設定したい月の-1の値を設定します。
//java.util.Calendarクラスをインポートします。
import java.util.Calendar;
class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();
//setメソッドで日時に2100年10月5日を設定しています。
cal1.set(2100, 9, 5);
//getTimeメソッドで日時を取得し表示しています。
System.out.println(cal1.getTime());
}
}
C:\Java\source\TEST>javac Test.java
C:\Java\source\TEST>java Test
Tue Oct 05 16:20:03 JST 2100 ←2100年10月5日が設定されています。
(3). 日付・時刻の加算・減算
日付・時刻の加算・減算を行う際は、addメソッドを使用します。addメソッドの第1引数には加減算を行いたい日付・時刻のフィールド(YEAR、DATEなど)、第2引数には加減算を行う値を指定します。加算を行う場合は、1、2などプラスの値を、減算を行いたい場合は-1、-2などマイナスの値を指定します。
フィールドの詳細については、Javaの道:日付・時刻(2.Calendarクラス) もしくはAPIリファレンスを参照してください。
//java.util.Calendarクラスをインポートします。
import java.util.Calendar;
class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();
//setメソッドで日時に2100年3月1日を設定しています。
cal1.set(2100, 2, 1);
//2100年3月1日から1日減算しています。
cal1.add(Calendar.DATE, -1);
System.out.println(cal1.getTime());
//上記で1日減算した日付に、1日加算し2100年3月1日に戻しています。
cal1.add(Calendar.DATE, 1);
System.out.println(cal1.getTime());
}
}
C:\Java\source\TEST>javac Test.java
C:\Java\source\TEST>java Test
Sun Feb 28 16:36:43 JST 2100 ←1日減算し、2100年2月28日が設定されています。
Mon Mar 01 16:36:43 JST 2100 ←1日加算し、2100年3月1日が設定されています。
(4). 日付・時刻の比較
日付・時刻の比較を行う場合は、compareToメソッドを使用します。比較対象がオブジェクトの日時より未来の場合は0未満の値を、過去の場合は0より大きい値を、同じ場合は0を返します。
//java.util.Calendarクラスをインポートします。
import java.util.Calendar;
class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1、cal2、cal3を生成しています。
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
Calendar cal3 = Calendar.getInstance();
//オブジェクトcal1に2100年3月1日を設定しています。
cal1.set(2100, 2, 1);
//オブジェクトcal2に2100年4月1日を設定しています。
cal2.set(2100, 3, 1);
//オブジェクトcal3に2100年2月1日を設定しています。
cal3.set(2100, 1, 1);
//日時を比較しています。
System.out.println("未来日を比較:" + cal1.compareTo(cal2));
System.out.println("過去日を比較:" + cal1.compareTo(cal3));
}
}
C:\Java\source\TEST>javac Test.java
C:\Java\source\TEST>java Test
未来日を比較:-1 ←未来日のため、0未満の値が返されます。
過去日を比較:1 ←過去日のため、0より大きい値が返されます。
(5). 月の末日を取得する方法
月の末日を取得する場合、getActualMaximumメソッドを使用します。getActualMaximumメソッドは、引数に指定されたフィールドが取りうる最大値を返します。そのため、引数に月の日を表すDATEフィールドを指定することにより、月の末日を取得します。
//java.util.Calendarクラスをインポートします。
import java.util.Calendar;
class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();
//setメソッドで日時に2008年2月1日を設定しています。
cal1.set(2008, 1, 1);
//2008年2月の末日を取得し表示しています。
System.out.println("2008年2月の末日:" +
cal1.getActualMaximum(Calendar.DATE));
}
}
C:\Java\source\TEST>javac Test.java
C:\Java\source\TEST>java Test
2008年2月の末日:29
(6). 日付・時刻の表示フォーマット変更
日付・時刻の表示フォーマットを変更する際はSimpleDateFormatクラスを使用します。コンストラクタの引数に表示フォーマットを指定してSimpleDateFormatオブジェクトを生成し、formatメソッドで日付・時刻を該当のフォーマットに変更します。
表示フォーマットは予め用意されているパターン文字で指定します。yyyyは4桁の年をmmは月を表すなど様々なパターン文字が用意されています。 フォーマット内に任意の文字列を入れたい場合は、任意の文字列を' 'で囲みます。(例:yyyy'年'は、2000年を表します。)
パターン文字の詳細については、Javaの道:日付・時刻(3.SimpleDateFormatクラス)もしくはAPIリファレンスを参照してください。
import java.util.Date;
import java.text.SimpleDateFormat;
class Test {
public static void main(String[] args) {
Date date1 = new Date();
//引数に表示フォーマットを指定して //SimpleDateFormatオブジェクトを生成しています。
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'"); //formatメソッドで該当のフォーマットに変更しています。
System.out.println(sdf1.format(date1));
}
}
C:\Java\source\TEST>javac Test.java
C:\Java\source\TEST>java Test
2008年05月06日
(7). 日付・時刻の妥当性をチェックする方法
日付・時刻の妥当性をチェックするためには、Calendarクラスや、SimpleDateFormatクラスに用意されているsetLenientメソッドを使用します。デフォルトの設定では、日付・時刻の妥当性チェックは行われませんが、setLenientメソッドで"false"を設定することで妥当性チェックが行われるようになります。
存在しない日付・時刻が設定されている場合、CalendarクラスではgetTimeメソッド等(SimpleDateFormatクラスではparseメソッド等)を使用した際に例外IllegalArgumentExceptionがスローされます。
import java.util.Calendar;
class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();
//setLenientメソッドでfalseを設定しています。
cal1.setLenient(false);
//setメソッドで存在しない日付2008年2月30日を設定しています。
cal1.set(2008, 1, 30);
try {
cal1.getTime();
//存在しない日付のため例外がスローされます。
} catch (IllegalArgumentException e) {
System.out.println("存在しない日付です。");
}
}
}
C:\Java\source\TEST>javac Test.java
C:\Java\source\TEST>java Test
存在しない日付です。
(8). 文字列をDate型に変換
文字列をDate型に変換する際はSimpleDateFormatクラスのparseメソッドを使用します。変換したい文字列のフォーマットを指定して、SimpleDateFormatクラスのオブジェクトを生成します。parseメソッドで文字列をDate型に変換します。
フォーマットを指定して、SimpleDateFormatクラスのオブジェクトを生成する方法は、Javaの道:日付・時刻(3.SimpleDateFormatクラス)を参照してください。
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
class Test {
public static void main(String[] args) {
//フォーマットを指定してSimpleDateFormatクラスのオブジェクトを
//生成しています。
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");
//変換する文字列を生成しています。
String str1 = new String("2008年10月1日");
try {
//parseメソッドでDate型に変換します。
Date date1 = sdf1.parse(str1);
//変換できない場合例外がスローされます。
} catch (ParseException e) {
System.out.println("変換できないフォーマットです。");
}
}
}
Javaの日付操作
Javaの日付操作
package test;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
public class F30Date {
/**
* 2つの日付の月数の差を求めます。
*Date 型の日付 date1-date2 が何ヵ月かを整数で返します。※端数の日数は無視
*
* @param date1 日付1 java.util.Date
* @param date2 日付2 java.util.Date
*
* @return 2つの日付の月数の差
*/
public static int differenceMonths(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
cal1.set(Calendar.DATE, 1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
cal2.set(Calendar.DATE, 1);
int count = 0;
if (cal1.before(cal2)) {
while (cal1.before(cal2)) {
cal1.add(Calendar.MONTH, 1);
count--;
}
} else {
count--;
while (!cal1.before(cal2)) {
cal1.add(Calendar.MONTH, -1);
count++;
}
}
return count;
}
/**
* 2つの日付の月数の差を求めます。
*日付文字列 strDate1-strDate2 が何ヵ月かを整数で返します。※端数の日数は無視
*
* @param strDate1 日付文字列1 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
* @param strDate2 日付文字列2 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
*
* @return 2つの日付の月数の差
*
* @throws ParseException 日付フォーマットが不正な場合
*/
public static int differenceMonths(String strDate1, String strDate2)
throws ParseException {
Date date1 = DateFormat.getDateInstance().parse(strDate1);
Date date2 = DateFormat.getDateInstance().parse(strDate2);
return differenceMonths(date1, date2);
}
/**
* 2つの日付の月数の差を求めます。
*Calendar 型の日付 cal1-cal2 が何ヵ月かを整数で返します。※端数の日数は無視
*
* @param date1 日付1 java.util.Calendar
* @param date2 日付2 java.util.Calendar
*
* @return 2つの日付の月数の差
*/
public static long differenceMonths(Calendar cal1, Calendar cal2) {
Date t1 = cal1.getTime();
Date t2 = cal2.getTime();
return differenceMonths(t1, t2);
}
/**
* 2つの日付の日数の差を求めます。Date 型の日付 date1-date2 が何日かを整数で返します。
*
* @param date1 日付1 java.util.Date
* @param date2 日付2 java.util.Date
*
* @return 2つの日付の日数の差
*/
public static long differenceDays(Date t1, Date t2) {
// 日付の差を求める
long diff = t1.getTime() - t2.getTime();
// 日付の差はミリ秒になっているので、日数に計算して表示する
return (diff / 1000 / 60 / 60 / 24);
}
/**
* 2つの日付の日数の差を求めます。日付文字列 strDate1-strDate2 が何日かを整数で返します。
*
* @param strDate1 日付文字列1 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
* @param strDate2 日付文字列2 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
*
* @return 2つの日付の日数の差
*
* @throws ParseException 日付フォーマットが不正な場合
*/
public static long differenceDays(String strDate1, String strDate2)
throws ParseException {
Date date1 = DateFormat.getDateInstance().parse(strDate1);
Date date2 = DateFormat.getDateInstance().parse(strDate2);
return differenceDays(date1, date2);
}
/**
* 2つの日付の日数の差を求めます。Date 型の日付 date1-date2 が何日かを整数で返します。
*
* @param cal1 日付1 java.util.Calendar
* @param cal2 日付2 java.util.Calendar
*
* @return 2つの日付の日数の差
*/
public static long differenceDays(Calendar cal1, Calendar cal2) {
Date t1 = cal1.getTime();
Date t2 = cal2.getTime();
return differenceDays(t1, t2);
}
/**
* 日付の妥当性チェック。
*
* @param year 年
* @param month 月
* @param day 日
*
* @return 引数は正しい日付の場合true、なければfalse
*/
public static boolean isDate(int year, int month, int day) {
boolean flg = true;
Calendar cal1 = Calendar.getInstance();
// 日付・時刻解析を厳密に行うかどうかを設定する
cal1.setLenient(false);
cal1.set(year, month - 1, day);
try {
cal1.getTime();
} catch (IllegalArgumentException e) {
flg = false;
}
return flg;
}
/**
* 日付の妥当性チェック(hh:mm:ssのチェックを含まず)
*
* @param dateStr 日付
*
* @return 引数は正しい日付の場合true、なければfalse
*/
public static boolean isDate(String dateStr) {
boolean flg = true;
DateFormat format = DateFormat.getDateInstance();
// 日付・時刻解析を厳密に行うかどうかを設定する
format.setLenient(false);
try {
format.parse(dateStr);
} catch (Exception e) {
flg = false;
}
return flg;
}
/**
* 現在の日付・時刻から指定の時間量を加算・減算した結果を返します。
* 年、月、日、時間、分、秒、ミリ秒の各時間フィールドに対し、任意の時間量を設定できます。
* たとえば、現在の日付時刻から 10 日前を計算する場合は以下となります。
* Calendar cal = add(null,0,0,-10,0,0,0,0);
*
* 各時間フィールドの値がその範囲を超えた場合、次の大きい時間フィールドが増分または減分されます。
* たとえば、以下では1時間と5分進めることになります。
* Calendar cal = add(null,0,0,0,0,65,0,0);
*
* @param cal 日付時刻の指定があればセットする。NULLの場合現在の日付で新しいCalendarを生成する。
* @param addYera 加算・減算する年数
* @param addMonth 加算・減算する月数
* @param addDate 加算・減算する日数
* @param addHour 加算・減算する時間
* @param addMinute 加算・減算する分
* @param addSecond 加算・減算する秒
* @param addMillisecond 加算・減算するミリ秒
*
* @return 計算後の Calendar インスタンス。
*/
public static Calendar add(Calendar cal,
int addYera,int addMonth,int addDate,
int addHour,int addMinute,int addSecond,
int addMillisecond){
if (cal == null) {
cal = Calendar.getInstance();
}
cal.add(Calendar.YEAR, addYera);
cal.add(Calendar.MONTH, addMonth);
cal.add(Calendar.DATE, addDate);
cal.add(Calendar.HOUR_OF_DAY, addHour);
cal.add(Calendar.MINUTE, addMinute);
cal.add(Calendar.SECOND, addSecond);
cal.add(Calendar.MILLISECOND, addMillisecond);
return cal;
}
public static void main(String[] args) {
// インスタンス取得
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
// 時間フィールドクリア
c1.clear();
c2.clear();
// 比較する日付をセット
c2.set(2010, Calendar.MAY, 1);
c1.set(2010, Calendar.NOVEMBER, 30);
System.out.println(isDate("2010/1/3"));
}
public static String getDateString(Calendar cal1) {
int year = cal1.get(Calendar.YEAR); // (2)現在の年を取得
int month = cal1.get(Calendar.MONTH) + 1; // (3)現在の月を取得
int day = cal1.get(Calendar.DATE); // (4)現在の日を取得
int hour = cal1.get(Calendar.HOUR_OF_DAY); // (5)現在の時を取得
int minute = cal1.get(Calendar.MINUTE); // (6)現在の分を取得
int second = cal1.get(Calendar.SECOND); // (7)現在の秒を取得
String dateStr = year+"/"+month+"/"+day+" "+hour+":"+minute+":"+second;
return dateStr;
}
}
Jarコマンド編
◆jarコマンドとは? | ||||||||||||||||||||||||
| J2SE SDKに含まれているコマンドの一つです。複数のファイルやディレクトリを1つのアーカイブファイルに統合するツールです。複数のクラスファイルやリソースファイルなどを1つのファイルにまとめることでライブラリとしての管理や配布が容易にできるようになります。 | ||||||||||||||||||||||||
| ◆アーカイブファイルとは? | ||||||||||||||||||||||||
| 複数のファイルやディレクトリを1つのファイルにまとめたものです。こうすることによって、たくさんのファイルを1つのファイルで配布することができるようになります。また、圧縮することによってファイルのサイズが小さくできるのでインターネットでダウンロードしたりする場合に効率がよくなります。よく見かける「.zip」という拡張子になっているものでおなじみです。 | ||||||||||||||||||||||||
| ◆ここでの環境 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ◆Javaの実行環境の構築 | ||||||||||||||||||||||||
| jarはJ2SE SDKに含まれているコマンドです。アプリケーション編を参考にJavaの実行環境を構築してください。 | ||||||||||||||||||||||||
| 構文の説明 | ||||||||||||||||||||||||
| 基本的な構文は以下のようになります。 jar [オプション] [マニフェストファイル] jarアーカイブファイル 入力するファイル1 [入力ファイル2・・] | ||||||||||||||||||||||||
| [ ]で囲まれたものは省略可能です。 | ||||||||||||||||||||||||
| ■オプションの説明 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■マニフェストファイルとは | ||||||||||||||||||||||||
| jarアーカイブファイルに含まれているファイルの情報を記述するファイルのことです。jarアーカイブファイルの中に入っています。META-INFディレクトリの下のMANIFEST.MFという名前のファイルです。 | ||||||||||||||||||||||||
| jarアーカイブファイルの作成 | ||||||||||||||||||||||||
| jarアーカイブファイルを新規に作成する例です。新規に作成するには「cf」オプションをつけてその後に生成するjarアーカイブファイル名を指定します。標準出力に詳細な情報を表示するには「v」オプションをつけます。 | ||||||||||||||||||||||||
| jar cf 生成するjarアーカイブファイル名 アーカイブに入れるクラスやリソースファイル | ||||||||||||||||||||||||
| ■使用例 | ||||||||||||||||||||||||
| (例1) ファイルを指定 | ||||||||||||||||||||||||
| HelloWorld1.classを入れてmylib.jarファイルを作成する場合 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| javahello\HelloWorld3.classを入れてmylib.jarファイルを作成する場合 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| (例2) ファイルを指定(複数) | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| (例3) ファイルを指定(ワイルドカードを使用) | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| (例4) ディレクトリを指定 | ||||||||||||||||||||||||
| javahelloというディレクトリの中身をjarファイルに入れます。 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| *.classの他に、imageというディレクトリの中身もjarファイルに入れます。 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| *.classの他に、imageとaudioというディレクトリの中身もjarファイルに入れます。 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| (例5) 詳細情報を画面に表示 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| jarアーカイブファイルの中身を見る | ||||||||||||||||||||||||
| jarアーカイブファイルの中身を見る例です。jarアーカイブファイルの中身を見るには「tf」オプションをつけてその後にjarアーカイブファイル名を指定します。標準出力に詳細な情報を表示するには「v」オプションをつけます。 | ||||||||||||||||||||||||
| jar tf 中身を見たいjarアーカイブファイル名 | ||||||||||||||||||||||||
| ■使用例 | ||||||||||||||||||||||||
| (例1) | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| (例2) 詳細情報を画面に表示 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| jarアーカイブファイルの中身を取り出す | ||||||||||||||||||||||||
| jarアーカイブファイル中身を取り出す例です。jarアーカイブファイルの中身を取り出すには「xf」オプションをつけてその後にjarアーカイブファイル名を指定します。標準出力に詳細な情報を表示するには「v」オプションをつけます。 | ||||||||||||||||||||||||
| jar xf 中身を取り出したいjarアーカイブファイル名 | ||||||||||||||||||||||||
| ■使用例 | ||||||||||||||||||||||||
| (例1) | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| (例2) 詳細情報を画面に表示 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| META-INF\MANIFEST.MFファイルも取り出されたので中身を見てみます。 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| MANIFEST.MFファイルは「属性名: 値」という形式で書かれています。 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| jarアーカイブファイルに新たにファイルを追加する | ||||||||||||||||||||||||
| jarアーカイブファイルに新たにファイルを追加する例です。jarアーカイブファイルに新たにファイルを追加するには「uf」オプションをつけてその後にjarアーカイブファイル名を指定します。標準出力に詳細な情報を表示するには「v」オプションをつけます。 | ||||||||||||||||||||||||
| jar uf jarアーカイブファイル名 追加するクラスやリソースファイル | ||||||||||||||||||||||||
| ■使用例 | ||||||||||||||||||||||||
| (例1) | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| (例2) 詳細情報を画面に表示 | ||||||||||||||||||||||||
|
正規表現編
| ◆正規表現とは? | ||||||||||||||||||||||||
| 正規表現とは文字列のパターンを表現する手法です。英語ではRegular expressionといいます。 | ||||||||||||||||||||||||
| ◆正規表現入門 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ◆正規表現の使用例 | ||||||||||||||||||||||||
| ■行の先頭「^」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■行の末尾「$」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■改行以外の任意の1文字「.」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■[]でくくられた中にある任意の1文字「[]」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■[]でくくられた中にない任意の1文字「[^]」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■直前の文字の0個以上の並び「*」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■直前の文字の1個以上の並び「+」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■直前の文字が0個または1個「?」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■直前の文字のa個の並び「{a}」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■直前の文字のa個以上の並び「{a,}」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■直前の文字のa個以上、b個以下の並び「{a,b}」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■2者択一の演算子「|」 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ◆ここでの環境 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ◆Java実行環境の構築 | ||||||||||||||||||||||||
| アプリケーション編を参考にしてJavaの実行環境を構築してください。 | ||||||||||||||||||||||||
| ◆java.util.regexパッケージ | ||||||||||||||||||||||||
| 正規表現用クラスはjava.util.regexパッケージに入っています。このパッケージの中にはPatternクラスとMatcherクラス、PatternSyntaxExceptionクラスがあります。 | ||||||||||||||||||||||||
| ■Patternクラス | ||||||||||||||||||||||||
| 正規表現はコンパイルされてこのクラスのインスタンスになり、Matcherクラスの生成を行います。 | ||||||||||||||||||||||||
| ■Matcherクラス | ||||||||||||||||||||||||
| Patternクラスから生成される、正規表現のパターンマッチを行うクラスです。 | ||||||||||||||||||||||||
| ■PatternSyntaxExceptionクラス | ||||||||||||||||||||||||
| 例外クラス。正規表現がコンパイルされるとき、構文が不正な場合にスローされる。 | ||||||||||||||||||||||||
| ◆具体的な使い方 | ||||||||||||||||||||||||
| ■パターンマッチ | ||||||||||||||||||||||||
| ここでは「JavaでHello World」という文字列が「^Java.*」にマッチするか調べています。マッチするので最後のbはtrueになります。 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■文字列の分割 | ||||||||||||||||||||||||
| ここでは「Java Hello World Java,Hello,,World」という文字列をスペースまたはカンマで分割しています。結果は以下のようになります。 Java Hello World Java Hello World | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■文字列の置換(最初にマッチしたもののみ) | ||||||||||||||||||||||||
| ここでは「正規表現でHello World,正規表現でHello World」という文字列の中の最初に出てきた「正規表現」を「Java」で置換しています。結果は以下のようになります。 JavaでHello World,正規表現でHello World | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■文字列の置換(一括) | ||||||||||||||||||||||||
| ここでは「正規表現でHello World,正規表現でHello World」という文字列の中の「正規表現」をすべて「Java」で置換しています。結果は以下のようになります。 JavaでHello World,JavaでHello World | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ■文字列の置換(一つ一つ順々に) | ||||||||||||||||||||||||
| ここでは「正規表現でHello World,正規表現でHello World」という文字列の中の「正規表現」を「Java」で置換しています。ここでは一つ一つ順々に置換しています。結果は以下のようになります。 JavaでHello World,JavaでHello World | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ◆サンプルコード | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| ◆コンパイルと実行 | ||||||||||||||||||||||||
| ||||||||||||||||||||||||
| おおおお!表示されましたね! | ||||||||||||||||||||||||
2000年3月28日星期二
BAT编译Java工程(全文件)
但是如果不用工具,只用命令来编译Java文件(含有子文件夹)的话,还真有些麻烦。
请仔细观察下图
代码
echo JAVAソースの全コンパイルを実行しています、終わるまで少々お待ち下さい…… set libpath=E:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib set srcpath=E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\veriserve\WEB-INF\src set compath=E:\j2sdk1.4.2_15\bin\javac -classpath rem 共通のライブラリ set lib1=%libpath%\servlet-api.jar; rem メール送信ためのライブラリ set lib2=%libpath%\activation.jar; set lib3=%libpath%\mail.jar; rem 帳票出力ためのライブラリ set lib4=%libpath%\poi-2.5.1-final-20040804.jar; set lib5=%libpath%\poi-contrib-2.5.1-final-20040804.jar; set lib6=%libpath%\poi-scratchpad-2.5.1-final-20040804.jar; set libs="%lib1%%lib2%%lib3%%lib4%%lib5%%lib6%" E: cd %srcpath% rem ベリサーブ基幹マスタWebシステムのコンパイルを実行しています %compath%%libs%;. -encoding UTF-8 .\veriserve\common\*.java -d ..\classes > cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\login\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\menu\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\employee\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\ExcelOutput\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\Mail\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\MasterEntry\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\MasterMenu\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\MenuCrowd\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\OrderForSummary\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\SectionCalcPlan\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\Supplier\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\veriserve\UserAccount\*.java -d ..\classes >> cmp.log 2>&1 rem 異動情報登録システムのコンパイルを実行しています %compath%%libs%;. -encoding UTF-8 .\personnel\common\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\personnel\login\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\personnel\rankMst\*.java -d ..\classes >> cmp.log 2>&1 %compath%%libs%;. -encoding UTF-8 .\personnel\report\*.java -d ..\classes >> cmp.log 2>&1 echo コンパイル終了しました。 pause
FTP編
◆FTPとは? | ||||
| FTPとはFile Transfer Protocolの略です。TCP/IPネットワークでファイルを転送するときに使用されるプロトコルです。 | ||||
| ◆ここでの環境 | ||||
| ||||
| ◆Java実行環境の構築 | ||||
| アプリケーション編を参考にしてJava実行環境を構築してください。 | ||||
| ◆Javaソースコード | ||||
| ここでは、FTPサーバーにファイルを転送する簡単なアプリケーションを作成したいと思います。 | ||||
|
||||
|
||||
| (注意) 「ホスト名」、「ユーザー名」、「パスワード」、「アップロードするディレクトリ」、「アップロードするファイル」は環境に合わせて設定してください。 |
||||
| ◆転送するファイルの用意 | ||||
| 転送するファイルをJavaのプログラムがあるディレクトリに置きます。ここでは「hello.zip」を置きました。 | ||||
| ◆コンパイルと実行 | ||||
|
||||
| どうやらうまく動いたみたいです。さっそくサーバーにファイルが転送されているか見てみましょう。 | ||||
|
||||
| おおおお!!ファイルが転送されていますね! |
Ant編
| ◆Antとは? | ||||||||||||||||||||||||||||||||||
| AntはJavaベースのビルドツールです。Antを使用することによってソフトウエアを開発する際の様々な作業を自動化することができます。 | ||||||||||||||||||||||||||||||||||
| ◆ここでの環境 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ◆Java実行環境の構築 | ||||||||||||||||||||||||||||||||||
| アプリケーション編を参考にしてJava実行環境を構築してください。 | ||||||||||||||||||||||||||||||||||
| ◆Antのダウンロード | ||||||||||||||||||||||||||||||||||
| Antは以下のサイトからダウンロードできます。ダウンロードできたらファイルを解凍してください。 http://ant.apache.org/bindownload.cgi | ||||||||||||||||||||||||||||||||||
| ◆環境変数の設定 | ||||||||||||||||||||||||||||||||||
| ANT_HOMEを新規に設定します。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ◆ソースファイルの作成 | ||||||||||||||||||||||||||||||||||
| Antテスト用のソースファイルを作成します。javadoc編と同じソースを使用します。ソースに意味はありません。 | ||||||||||||||||||||||||||||||||||
| ■ソースファイルの置き場所 | ||||||||||||||||||||||||||||||||||
| 作業フォルダの下にsrcフォルダを作成してその下にソースファイルを作成します。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ■作成 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ◆ビルドファイルの作成 | ||||||||||||||||||||||||||||||||||
| ■ビルドファイルとは? | ||||||||||||||||||||||||||||||||||
| Antはbuild.xmlという名前のXML形式のファイルに書かれた指示に従って様々な作業を行います。このファイルのことをビルドファイルと呼びます。 | ||||||||||||||||||||||||||||||||||
| ■ビルドファイルの置き場所 | ||||||||||||||||||||||||||||||||||
| 作業フォルダの下にbuild.xmlファイルを作成します。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ■作成 | ||||||||||||||||||||||||||||||||||
| ここでは以下の作業を行う設定を記述します。 1.ソースファイルのコンパイル 2.jarファイルの作成 3.javadocの作成 4.生成したファイルの削除 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ◆antコマンドの使い方 | ||||||||||||||||||||||||||||||||||
| ビルドファイルに記述された処理はantコマンドで実行することができます。 | ||||||||||||||||||||||||||||||||||
| ■antコマンドの使用方法 | ||||||||||||||||||||||||||||||||||
| ターゲットはビルドファイルに記述したターゲットの名前を指定します。ターゲットを省略した場合はproject要素のdefault属性の値が使用されます。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ■オプションの説明 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ◆コンパイルを行う | ||||||||||||||||||||||||||||||||||
| コンパイルを行うにはビルドファイルに記述されたコンパイルを行うターゲットの名前を指定します。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| おおお!コンパイルできましたね! | ||||||||||||||||||||||||||||||||||
| ◆jarファイルの生成を行う | ||||||||||||||||||||||||||||||||||
| jarファイルの生成を行うにはビルドファイルに記述されたjarファイルの生成を行うターゲットの名前を指定します。また、プロジェクトのデフォルトのターゲットがjarファイルの生成になっているのでターゲットを指定しなくてもjarファイルの生成を行います。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| おおおお!jarファイルが生成できましたね! | ||||||||||||||||||||||||||||||||||
| ◆javadocの生成を行う | ||||||||||||||||||||||||||||||||||
| javadocの生成を行うにはビルドファイルに記述されたjavadocの生成を行うターゲットの名前を指定します。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| おおお!javadocが生成できましたね! | ||||||||||||||||||||||||||||||||||
| ◆生成したファイルやフォルダを削除する | ||||||||||||||||||||||||||||||||||
| 生成したファイルやフォルダの削除を行うにはビルドファイルに記述された生成したファイルやフォルダの削除を行うターゲットの名前を指定します。 | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| おおお!生成したファイルやフォルダが削除できましたね! |