??xml version="1.0" encoding="utf-8" standalone="yes"?>
Color getRandColor(int fc,int bc){//l定范围获得随机颜色
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%><%
//讄面不缓?br />response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创徏图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取囑Ş上下?br />Graphics g = image.getGraphics();
//生成随机c?br />Random random = new Random();
// 讑֮背景?br />g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
//讑֮字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边?br />g.setColor(new Color(255,255,255));
g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随Z生的认证?4位数?
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 认证码昄到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//调用函数出来的颜色相?可能是因为种子太接近,所以只能直接生?br />g.drawString(rand,13*i+6,16);
}
// 认证码存入SESSION
session.setAttribute("randomChar",sRand);
// 图象生效
g.dispose();
// 输出图象到页?br />ImageIO.write(image, "JPEG", response.getOutputStream());
%>
Java's java.util.regex 包包括:PatterncRMatchercRMatchResult接口和PatternSyntaxException异常Q?/p>
character sequence
by interpreting a Pattern
.
同时q需要了解是CharSequenceQJDK 1.4定义的新的接口,它提供了String和StringBufferq两个类的字W序列的抽象
interface CharSequence {
charAt(int i);
length();
subSequence(int start, int end);
toString();
}
Z实现q个新的CharSequence接口QStringQStringBuffer以及CharBuffer都作了修改,很多的正则表辑ּ的操作都要拿CharSequence作参数?
Group是指里用括号括v来的Q能被后面的表达式调用的正则表达式?/p>
Group 0 表示整个表达式,group 1表示W一个被括v来的groupQ以此类推。所以;
A(B(C))D
里面有三个groupQgroup 0是ABCDQ?group 1是BCQgroup 2是C?
你可以用下述MatcherҎ来用groupQ?
使用group可以做到逐步~小匚w的范_直至_匚w的目的?
start( )和end( )Q如果匹配成功,start( )会返回此ơ匹配的开始位|,end( )会返回此ơ匹配的l束位置Q即最后一个字W的下标加一。如果之前的匚w不成?或者没匚w)Q那么无论是调用start( )q是end( )Q都会引发一个IllegalStateException?/p>
String str="abc efg ABC";
String regEx="a|f"; //表示a或f Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean rs=m.find(); 如果str中有regExQ那么rs为trueQ否则ؓflase。如果想在查找时忽略大小写,则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);String regEx=".+\(.+)$";
String str="c:\dir1\dir2\name.txt"; Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean rs=m.find(); for(int i=1;i<=m.groupCount();i++){ System.out.println(m.group(i)); } 以上的执行结果ؓname.txtQ提取的字符串储存在m.group(i)中,其中i最大gؓm.groupCount();
String regEx="::"; Pattern p=Pattern.compile(regEx); String[] r=p.split("xd::abc::cde"); 执行后,r是{"xd","abc","cde"}Q其实分割时q有跟简单的ҎQ? String str="xd::abc::cde"; String[] r=str.split("::");
String regEx="a+"; //表示一个或多个a
Pattern p=Pattern.compile(regEx); Matcher m=p.matcher("aaabbced a ccdeaa"); String s=m.replaceAll("A"); l果?Abbced A ccdeA" 如果写成IZQ既可达到删除的功能Q比如: String s=m.replaceAll(""); l果?bbced ccde"
下面的函数是一个实际应用的例子Q需求是需要将抓取的网中?lt;img src=''http://aa.bb.cc.com/images/**.jpg"> 中的地址Q保存到一个地址列表中(以供抓取囄使用Q,q将l对地址替换成本地的相对地址Q即<img src="images/**.jpg">?/p>
public static Map<String, String> getImagesURL(String description) {
Map<String, String> map = new HashMap<String, String>();
// img 的正则表辑ּ:匚w<img>标签
String imgPattern = "<\\s*img\\s+([^>]+)\\s*>";
Pattern pattern1 = Pattern.compile(imgPattern, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern1.matcher(description);
// img src元素的正则表辑ּQ匹配img标签内的src属?br /> String srcPattern = "\\s*src\\s*=\\s*\"([^\"]+)\\s*\"";
Pattern pattern2 = Pattern.compile(srcPattern, Pattern.CASE_INSENSITIVE);
while (matcher.find()) {
//group()q回W合表达式的内容
Matcher matcher2 = pattern2 .matcher(matcher.group());
// 一定要find(),q是实际的匹配动?br /> if (matcher2.find()) {
String src = matcher2.group();
log.info(src);
int i2 = src.lastIndexOf('/');
int i1 = src.indexOf("http");
if (i1 != -1) {
map.put(src.substring(i2 + 1, src.length() - 1), src
.substring(i1, src.length() - 1));
}
}
}
log.debug("囄Q? + map);
return map;
}
整体思\是先匚w到img标签Q然后匹配src属性,q修改src的属?/p>
"<\\s*img\\s+([^>]+)\\s*>" 的解释:
\\s* :0 或多个空格 ?\\s+: 臛_一个空?/p>
([^>]+)Q指的是?gt;为止的所有的元素Q至一?/p>
字符集类
. 表示L一个字W?
[abc] 表示字符aQbQc中的L一?与a|b|c相同)
[^abc] 除aQbQc之外的Q意一个字W?否定)
[a-zA-Z] 从a到z或A到Z当中的Q意一个字W?范围)
[abc[hij]] a,b,c,h,i,j中的L一个字W?与a|b|c|h|i|j相同)(q)
[a-z&&[hij]] h,i,j中的一?交集)
\s I格字符(I格? tab, 换行, 换页, 回R)
\S 非空格字W?[^\s])
\d 一个数字,也就是[0-9]
\D 一个非数字的字W,也就是[^0-9]
\w 一个单词字W?word character)Q即[a-zA-Z_0-9]
\W 一个非单词的字W,[^\w]
字符c:
B 字符B
\xhh 16q制?xhh所表示的字W?
\uhhhh 16q制?xhhhh所表示的Unicode字符
\t Tab
\n 换行W?
\r 回RW?
\f 换页W?
\e Escape
逻辑q算W?/strong>
XY X 后面跟着 Y
X|Y X或Y
(X) 一?要匹配的l?capturing group)". 以后可以用\i来表C第i个被匚w的组?
边界匚wW?/strong>
^ 一行的开?
$ 一行的l尾
\b 一个单词的边界
\B 一个非单词的边?
\G 前一个匹配的l束
数量表示W?/strong>
"数量表示W?quantifier)"的作用是定义模式应该匚w多少个字W?
Greedy Reluctant Possessive 匚w
X? X?? X?+ 匚w一个或零个X
X* X*? X*+ 匚w零或多个X
X+ X+? X++ 匚w一个或多个X
X{n} X{n}? X{n}+ 匚w正好n个X
X{n,} X{n,}? X{n,}+ 匚w臛_n个X
X{n,m} X{n,m}? X{n,m}+ 匚w臛_n个,臛_m个X
要想q一步学习正则表辑ּQ徏议看Mastering Regular Expression, 2nd EditionQ作者Jeffrey E. F. Friedl (O’Reilly, 2002)?
"Regular Expressions and the Java Programming Language," Dana Nourie and Mike McCloskey (Sun Microsystems, August 2002) presents a brief overview of java.util.regex, including five illustrative regex-based applications:
http://developer.java.sun.com/developer/technicalArticles/releases/1.4regex/
http://www.tkk7.com/beike/archive/2006/04/28/43832.html
http://wcjok.bokee.com/4293762.html
import java.util.*;
import java.text.*;
public class StyleDemo {
public static void main(String[] args) {
Date now = new Date();
DateFormat df = DateFormat.getDateInstance();
DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT);
DateFormat df2 = DateFormat.getDateInstance(DateFormat.MEDIUM);
DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);
DateFormat df4 = DateFormat.getDateInstance(DateFormat.FULL);
String s = df.format(now);
String s1 = df1.format(now);
String s2 = df2.format(now);
String s3 = df3.format(now);
String s4 = df4.format(now);
System.out.println("(Default) Today is " + s);
System.out.println("(SHORT) Today is " + s1);
System.out.println("(MEDIUM) Today is " + s2);
System.out.println("(LONG) Today is " + s3);
System.out.println("(FULL) Today is " + s4);
}
}
E序输出如下Q?/p>
(Default) Today is Nov 8, 2000
(SHORT) Today is 11/8/00
(MEDIUM) Today is Nov 8, 2000
(LONG) Today is November 8, 2000
(FULL) Today is Wednesday, November 8, 2000
同样的程序,在我的电脑上使用~省讄q行后,改变区域讄为瑞典,输出如下Q?/p>
(Default) Today is 2000-nov-08
(SHORT) Today is 2000-11-08
(MEDIUM) Today is 2000-nov-08
(LONG) Today is den 8 november 2000
(FULL) Today is den 8 november 2000
从这里,你能看到Q瑞典的月䆾不是大写的(虽然Novemberq是novemberQ?q有QLONG和FULL版本在瑞典语中是一LQ但是美国英语却不同。另外,有趣的是Q瑞典语单词的星期三,onsdagQ没有包含在FULL日期里,p却包括?
注意你能够用getDateInstance()Ҏ改变DateFormat实例的语U;但是Q在上面的例子中Q是通过改变Windows98的控刉板的区域讄做到的。不同的地方的区域设|不同,l果׃同,q样有好处,也有不QJavaE序员应该了解这些。一个好处是JavaE序员可以只写一行代码就可以昄日期Q而且世界不同地区的电脑运行同LE序会有不用的日期格式?但是q也是一个缺点,当程序员希望昄同一U格式的?-q也有可取之处,举例来说Q在E序中合输出文本和日期Q如果文本是英文Q我们就不希望日期格式是其他的格式,象d文或是西班牙文。如果程序员依靠日期格式~程Q日期格式将Ҏq行E序所在电脑的区域讄不用而不同?
(4)
解析字符?/font>
通过parse()ҎQDateFormat能够以一个字W串创立一个Date对象。这个方法能抛出ParseException异常Q所以你必须使用适当的异常处理技术。下面的例子E序通过字符串创建Date对象Q?/p>
import java.util.*;
import java.text.*;
public class ParseExample {
public static void main(String[] args) {
String ds = "November 1, 2000";
DateFormat df = DateFormat.getDateInstance();
try {
Date d = df.parse(ds);
}
catch(ParseException e) {
System.out.println("Unable to parse " + ds);
}
}
}
在创Z个Q意的日期时parse()Ҏ很有用。我通过另一U方法创Z个Q意得日期。同Ӟ你将看到怎样q行基本日期计算Q例如计?0天后的另一天。你可以使用GregorianCalendarc?/font>来完成这个Q务?
注意月䆾的表C,一月是0Q二月是1Q以此类推,?2月是11。因为大多数Z惯于使用单词而不是用数字来表示月䆾Q这L序也许更易读Q父cCalendar使用帔R来表C月份:JANUARY, FEBRUARY,{等。所以,创徏Wilbur ?Orville刉第一架动力飞机的日期QDecember 17, 1903Q,你可以用:
在上一节中Q你学习了{换Date对象到字W串。这里,你可以做同样的事情;但是首先Q你需要将GregorianCalendar对象转换到Date。要做到q一点,你可以用getTime()ҎQ从它得父类Calendarl承而来。GetTime()Ҏq回GregorianCalendar相应的Date对象。你能够创徏GregorianCalendar对象Q{换到Date对象Q得到和输出相应的字W串q样一个过E。下面是例子Q?
public class Flight { public static void main(String[] args) { 有时候创Z个代表当前时ȝGregorianCalendarcȝ实例是很有用的。你可以单的使用没有参数的GregorianCalendar构造函敎ͼ象这P
一个输Z天日期的例子E序Q用GregorianCalendar对象Q?/p>
class Today { 注意刎ͼDate()构造函数和GregorianCalendar()构造函数很cMQ都创徏一个对象,条g单,代表今天?/p>
GregorianCalendarcL供处理日期的Ҏ?/font>一个有用的Ҏ是add().使用add()ҎQ你能够增加象年Q月敎ͼ天数到日期对象中。要使用add()ҎQ你必须提供要增加的字段Q要增加的数量。一些有用的字段是DATE, MONTH, YEAR, ?WEEK_OF_YEAR。下面的E序使用add()Ҏ计算未来80天的一个日期。在Jules?lt;环球80?gt;是一个重要的数字Q用这个程序可以计Phileas Fogg从出发的那一?872q?0?日后80天的日期Q?/p>
public class World { q个例子是想象的Q但在一个日期上增加天数是一个普遍的操作Q媄可以租3天,图书馆可以借书21天,商店l常需要将购买的物品在30天内卖出。下面的E序演示了用年计算Q?/p>
public class Mortgage { add()一个重要的副作用是它改变的原来的日期。有时候,拥有原始日期和修改后的日期很重要。不q的是,你不能简单的创徏一个GregorianCalendar对象Q设|它和原来的相等QequalQ。原因是两个变量指向同一个Date()对象地址。如果Date对象改变Q两个变量就指向改变后的日期对象。代替这U做法,应该创徏一个新对象。下面的E序C了这U做法:
public class ThreeDates { gc1.add(Calendar.YEAR, 1); DateFormat df = DateFormat.getDateInstance(); Date d1 = gc1.getTime(); String s1 = df.format(d1); System.out.println("gc1 is " + s1); E序q行后,gc1和gc2被变?001q_因ؓ两个对象指向同一个DateQ而Date已经被改变了Q。对象gc3指向一个单独的DateQ它没有被改变?br />计算复习日期
public class ReviewDates { ReviewDates(GregorianCalendar gcDate) { firstDay = new GregorianCalendar(year, month, date); oneDay.add(GregorianCalendar.DATE, 1); ReviewDates() { public void listDates() { String ss = df.format(startDate); System.out.println("Start date is " + ss); public GregorianCalendar[] getDates() { public GregorianCalendar getFirstDay() { public GregorianCalendar getOneDay() { public GregorianCalendar getOneWeek() { public GregorianCalendar getOneMonth() { public GregorianCalendar getOneQuarter() { public GregorianCalendar getOneYear() { 下面是用ReviewDatescd出复习日期的例子E序Q?/p>
public class ShowDates { GregorianCalendar gc = new GregorianCalendar(2001, Calendar.JANUARY, 15);
q篇文章介绍了关于日期处理的3个重要的c:Date,DateFormat,GregorianCalendar.q些c让你创建日期,转换成字W串Q和计算日期基本元素。处理Java中的日期问题Q这文章只是冰׃角。可是,我在q里介绍的类和方法不仅仅是你学习高技术的xQ这些类和方法本w就可以处理很多通常的日期相关的d 关于作?br />Robert Nielsen是SCJP。他拥有士学位Q专攻计机教育Qƈ且在计算机领域执教多q。他也在各样的杂志上发表q很多计机相关的文章?br />
GregorianCalendarc?br /> 创徏一个代表Q意日期的一个途径使用GregorianCalendarcȝ构造函敎ͼ它包含在java.util包中Q?/p>
GregorianCalendar(int year, int month, int date)
GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17);
Z清楚的考虑Q你应该使用前面的Ş式。但是,你也应该学习怎样阅读下面的短格式。下面的例子同样表示December 17,1903Q记住,在短格式中,11表示DecemberQ?/p>
GregorianCalendar firstFlight = new GregorianCalendar(1903, 11, 17);
import java.util.*;
import java.text.*;
GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17);
Date d = firstFlight.getTime();
DateFormat df = DateFormat.getDateInstance();
String s = df.format(d);
System.out.println("First flight was " + s);
}
}
GregorianCalendar thisday = new GregorianCalendar();
import java.util.*;
import java.text.*;
public static void main(String[] args) {
GregorianCalendar thisday = new GregorianCalendar();
Date d = thisday.getTime();
DateFormat df = DateFormat.getDateInstance();
String s = df.format(d);
System.out.println("Today is " + s);
}
}
(6)
日期处理
import java.util.*;
import java.text.*;
public static void main(String[] args) {
GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2);
//Calendar.May, January,February,March,April,May,June,July,August,September,October,November,December 必须全部大写;
worldTour.add(GregorianCalendar.DATE, 80);
Date d = worldTour.getTime();
DateFormat df = DateFormat.getDateInstance();
String s = df.format(d);
System.out.println("80 day trip will end " + s);
}
}
import java.util.*;
import java.text.*;
public static void main(String[] args) {
GregorianCalendar mortgage = new GregorianCalendar(1997, Calendar.MAY, 18);
mortgage.add(Calendar.YEAR, 15);
Date d = mortgage.getTime();
DateFormat df = DateFormat.getDateInstance();
String s = df.format(d);
System.out.println("15 year mortgage amortized on " + s); }
}
import java.util.*;
import java.text.*;
public static void main(String[] args) {
GregorianCalendar gc1 = new GregorianCalendar(2000, Calendar.JANUARY, 1);
GregorianCalendar gc2 = gc1;
GregorianCalendar gc3 = new GregorianCalendar(2000, Calendar.JANUARY, 1);
//Three dates all equal to January 1, 2000
file://gc1 and gc2 are changed
Date d2 = gc2.getTime();
Date d3 = gc3.getTime();
String s2 = df.format(d2);
String s3 = df.format(d3);
System.out.println("gc2 is " + s2);
System.out.println("gc3 is " + s3);
}
}
在这节,你将看到一个依据现实世界的例子。这个详l的E序计算q去一个具体的日期。例如,你阅读这文章,你想要记住一个印象深ȝ知识炏V如果你没有照片一L记忆力,你就要定期的复习q些新资料,q将帮助你记住它。关于复习系l,Kurt Hanks ?Gerreld L. Pulsipher在他们的< Five Secrets to Personal Productivity个h能力?个秘?gt;中有讨论Q徏议看q第一眼后马上回顾一下,然后?天后Q?个星期后Q?个月后,3个月后,1q后。我的这文章,你要马上回顾一下,从现在算P再就是明天,然后?个星期,1个月Q?个月Q?q后。我们的E序计这些日期?br />q个E序非常有用的,它将是PIM(Personal Information Manager个h信息理?的一个组成部分,q将定复习旉。在下面的程序中QgetDates()Ҏ对一个返回日期数l(复习日期Q的电子软g很有用。另外,你可以返回单独的一个日期,使用getFirstDay(),getOneDay(),getOneWeek(),getOnMonth()和getOneYear().当时间范围超个PIM的ReviewDates的计范围时ReviewDatescLCZ怎样计算旉Dc现在,你可以容易的修改它用来处理你需要的旉D,象图书馆借书Q录影带U赁和抵D。首先,ReviewDatescLC在下面Q?/p>
import java.util.*;
import java.text.*;
private GregorianCalendar firstDay, oneDay, oneWeek, oneMonth, oneQuarter, oneYear;
final int dateArraySize = 6;
int year = gcDate.get(GregorianCalendar.YEAR);
int month = gcDate.get(GregorianCalendar.MONTH);
int date = gcDate.get(GregorianCalendar.DATE);
oneDay = new GregorianCalendar(year, month, date);
oneWeek = new GregorianCalendar(year, month, date);
oneMonth = new GregorianCalendar(year, month, date);
oneQuarter = new GregorianCalendar(year, month, date);
oneYear = new GregorianCalendar(year, month, date);
oneWeek.add(GregorianCalendar.DATE, 7);
oneMonth.add(GregorianCalendar.MONTH, 1);
oneQuarter.add(GregorianCalendar.MONTH, 3);
oneYear.add(GregorianCalendar.YEAR, 1);
}
this(new GregorianCalendar());
}
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
Date startDate = firstDay.getTime();
Date date1 = oneDay.getTime();
Date date2 = oneWeek.getTime();
Date date3 = oneMonth.getTime();
Date date4 = oneQuarter.getTime();
Date date5 = oneYear.getTime();
String ss1 = df.format(date1);
String ss2 = df.format(date2);
String ss3 = df.format(date3);
String ss4 = df.format(date4);
String ss5 = df.format(date5);
System.out.println("Following review dates are:");
System.out.println(ss1);
System.out.println(ss2);
System.out.println(ss3);
System.out.println(ss4);
System.out.println(ss5);
System.out.println();
}
GregorianCalendar[] memoryDates = new GregorianCalendar[dateArraySize];
memoryDates[0] = firstDay;
memoryDates[1] = oneDay;
memoryDates[2] = oneWeek;
memoryDates[3] = oneMonth;
memoryDates[4] = oneQuarter;
memoryDates[5] = oneYear;
return memoryDates;
}
return this.firstDay;
}
return this.oneDay;
}
return this.oneWeek;
}
return this.oneMonth;
}
return this.oneQuarter;
}
return this.oneYear;
}
}
import java.util.*;
public static void main(String[] args) {
ReviewDates rd = new ReviewDates();
rd.listDates();
ReviewDates jan15 = new ReviewDates(gc);
jan15.listDates();
}
}
ȝ
关于译?br />Cocia Lin(cocia@163.com)是程序员?br />
]]>
Object,java.util.Properties
以下布局资料原作者:Owen Briggs
#FFFFFF R=255 G=255 B=255 |
#FFFFCC R=255 G=255 B=204 |
#FFFF99 R=255 G=255 B=153 |
#FFFF66 R=255 G=255 B=102 |
#FFFF33 R=255 G=255 B=51 |
#FFFF00 R=255 G=255 B=0 |
#FFCCFF R=255 G=204 B=255 |
#FFCCCC R=255 G=204 B=204 |
#FFCC99 R=255 G=204 B=153 |
#FFCC66 R=255 G=204 B=102 |
#FFCC33 R=255 G=204 B=51 |
#FFCC00 R=255 G=204 B=0 |
#FF99FF R=255 G=153 B=255 |
#FF99CC R=255 G=153 B=204 |
#FF9999 R=255 G=153 B=153 |
#FF9966 R=255 G=153 B=102 |
#FF9933 R=255 G=153 B=51 |
#FF9900 R=255 G=153 B=0 |
#FF66FF R=255 G=102 B=255 |
#FF66CC R=255 G=102 B=204 |
#FF6699 R=255 G=102 B=153 |
#FF6666 R=255 G=102 B=102 |
#FF6633 R=255 G=102 B=51 |
#FF6600 R=255 G=102 B=0 |
#FF33FF R=255 G=51 B=255 |
#FF33CC R=255 G=51 B=204 |
#FF3399 R=255 G=51 B=153 |
#FF3366 R=255 G=51 B=102 |
#FF3333 R=255 G=51 B=51 |
#FF3300 R=255 G=51 B=0 |
#FF00FF R=255 G=0 B=255 |
#FF00CC R=255 G=0 B=204 |
#FF0099 R=255 G=0 B=153 |
#FF0066 R=255 G=0 B=102 |
#FF0033 R=255 G=0 B=51 |
#FF0000 R=255 G=0 B=0 |
#CCFFFF R=204 G=255 B=255 |
#CCFFCC R=204 G=255 B=204 |
#CCFF99 R=204 G=255 B=153 |
#CCFF66 R=204 G=255 B=102 |
#CCFF33 R=204 G=255 B=51 |
#CCFF00 R=204 G=255 B=0 |
#CCCCFF R=204 G=204 B=255 |
#CCCCCC R=204 G=204 B=204 |
#CCCC99 R=204 G=204 B=153 |
#CCCC66 R=204 G=204 B=102 |
#CCCC33 R=204 G=204 B=51 |
#CCCC00 R=204 G=204 B=0 |
#CC99FF R=204 G=153 B=255 |
#CC99CC R=204 G=153 B=204 |
#CC9999 R=204 G=153 B=153 |
#CC9966 R=204 G=153 B=102 |
#CC9933 R=204 G=153 B=51 |
#CC9900 R=204 G=153 B=0 |
#CC66FF R=204 G=102 B=255 |
#CC66CC R=204 G=102 B=204 |
#CC6699 R=204 G=102 B=153 |
#CC6666 R=204 G=102 B=102 |
#CC6633 R=204 G=102 B=51 |
#CC6600 R=204 G=102 B=0 |
#CC33FF R=204 G=51 B=255 |
#CC33CC R=204 G=51 B=204 |
#CC3399 R=204 G=51 B=153 |
#CC3366 R=204 G=51 B=102 |
#CC3333 R=204 G=51 B=51 |
#CC3300 R=204 G=51 B=0 |
#CC00FF R=204 G=0 B=255 |
#CC00CC R=204 G=0 B=204 |
#CC0099 R=204 G=0 B=153 |
#CC0066 R=204 G=0 B=102 |
#CC0033 R=204 G=0 B=51 |
#CC0000 R=204 G=0 B=0 |
#99FFFF R=153 G=255 B=255 |
#99FFCC R=153 G=255 B=204 |
#99FF99 R=153 G=255 B=153 |
#99FF66 R=153 G=255 B=102 |
#99FF33 R=153 G=255 B=51 |
#99FF00 R=153 G=255 B=0 |
#99CCFF R=153 G=204 B=255 |
#99CCCC R=153 G=204 B=204 |
#99CC99 R=153 G=204 B=153 |
#99CC66 R=153 G=204 B=102 |
#99CC33 R=153 G=204 B=51 |
#99CC00 R=153 G=204 B=0 |
#9999FF R=153 G=153 B=255 |
#9999CC R=153 G=153 B=204 |
#999999 R=153 G=153 B=153 |
#999966 R=153 G=153 B=102 |
#999933 R=153 G=153 B=51 |
#999900 R=153 G=153 B=0 |
#9966FF R=153 G=102 B=255 |
#9966CC R=153 G=102 B=204 |
#996699 R=153 G=102 B=153 |
#996666 R=153 G=102 B=102 |
#996633 R=153 G=102 B=51 |
#996600 R=153 G=102 B=0 |
#9933FF R=153 G=51 B=255 |
#9933CC R=153 G=51 B=204 |
#993399 R=153 G=51 B=153 |
#993366 R=153 G=51 B=102 |
#993333 R=153 G=51 B=51 |
#993300 R=153 G=51 B=0 |
#9900FF R=153 G=0 B=255 |
#9900CC R=153 G=0 B=204 |
#990099 R=153 G=0 B=153 |
#990066 R=153 G=0 B=102 |
#990033 R=153 G=0 B=51 |
#990000 R=153 G=0 B=0 |
#66FFFF R=102 G=255 B=255 |
#66FFCC R=102 G=255 B=204 |
#66FF99 R=102 G=255 B=153 |
#66FF66 R=102 G=255 B=102 |
#66FF33 R=102 G=255 B=51 |
#66FF00 R=102 G=255 B=0 |
#66CCFF R=102 G=204 B=255 |
#66CCCC R=102 G=204 B=204 |
#66CC99 R=102 G=204 B=153 |
#66CC66 R=102 G=204 B=102 |
#66CC33 R=102 G=204 B=51 |
#66CC00 R=102 G=204 B=0 |
#6699FF R=102 G=153 B=255 |
#6699CC R=102 G=153 B=204 |
#669999 R=102 G=153 B=153 |
#669966 R=102 G=153 B=102 |
#669933 R=102 G=153 B=51 |
#669900 R=102 G=153 B=0 |
#6666FF
R=102 G=102 B=255 |
#6666CC
R=102 G=102 B=204 |
#666699
R=102 G=102 B=153 |
#666666
R=102 G=102 B=102 |
#666633
R=102 G=102 B=51 |
#666600
R=102 G=102 B=0 |
#6633FF
R=102 G=51 B=255 |
#6633CC
R=102 G=51 B=204 |
#663399
R=102 G=51 B=153 |
#663366
R=102 G=51 B=102 |
#663333
R=102 G=51 B=51 |
#663300
R=102 G=51 B=0 |
#6600FF
R=102 G=0 B=255 |
#6600CC
R=102 G=0 B=204 |
#660099
R=102 G=0 B=153 |
#660066
R=102 G=0 B=102 |
#660033
R=102 G=0 B=51 |
#660000
R=102 G=0 B=0 |
#33FFFF R=51 G=255 B=255 |
#33FFCC R=51 G=255 B=204 |
#33FF99 R=51 G=255 B=153 |
#33FF66 R=51 G=255 B=102 |
#33FF33 R=51 G=255 B=51 |
#33FF00 R=51 G=255 B=0 |
#33CCFF R=51 G=204 B=255 |
#33CCCC R=51 G=204 B=204 |
#33CC99 R=51 G=204 B=153 |
#33CC66 R=51 G=204 B=102 |
#33CC33 R=51 G=204 B=51 |
#33CC00 R=51 G=204 B=0 |
#3399FF R=51 G=153 B=255 |
#3399CC R=51 G=153 B=204 |
#339999 R=51 G=153 B=153 |
#339966 R=51 G=153 B=102 |
#339933 R=51 G=153 B=51 |
#339900 R=51 G=153 B=0 |
#3366FF
R=51 G=102 B=255 |
#3366CC
R=51 G=102 B=204 |
#336699
R=51 G=102 B=153 |
#336666
R=51 G=102 B=102 |
#336633
R=51 G=102 B=51 |
#336600
R=51 G=102 B=0 |
#3333FF
R=51 G=51 B=255 |
#3333CC
R=51 G=51 B=204 |
#333399
R=51 G=51 B=153 |
#333366
R=51 G=51 B=102 |
#333333
R=51 G=51 B=51 |
#333300
R=51 G=51 B=0 |
#3300FF
R=51 G=0 B=255 |
#3300CC
R=51 G=0 B=204 |
#330099
R=51 G=0 B=153 |
#330066
R=51 G=0 B=102 |
#330033
R=51 G=0 B=51 |
#330000
R=51 G=0 B=0 |
#00FFFF R=0 G=255 B=255 |
#00FFCC R=0 G=255 B=204 |
#00FF99 R=0 G=255 B=153 |
#00FF66 R=0 G=255 B=102 |
#00FF33 R=0 G=255 B=51 |
#00FF00 R=0 G=255 B=0 |
#00CCFF R=0 G=204 B=255 |
#00CCCC R=0 G=204 B=204 |
#00CC99 R=0 G=204 B=153 |
#00CC66 R=0 G=204 B=102 |
#00CC33 R=0 G=204 B=51 |
#00CC00 R=0 G=204 B=0 |
#0099FF R=0 G=153 B=255 |
#0099CC R=0 G=153 B=204 |
#009999 R=0 G=153 B=153 |
#009966 R=0 G=153 B=102 |
#009933 R=0 G=153 B=51 |
#009900 R=0 G=153 B=0 |
#0066FF
R=0 G=102 B=255 |
#0066CC
R=0 G=102 B=204 |
#006699
R=0 G=102 B=153 |
#006666
R=0 G=102 B=102 |
#006633
R=0 G=102 B=51 |
#006600
R=0 G=102 B=0 |
#0033FF
R=0 G=51 B=255 |
#0033CC
R=0 G=51 B=204 |
#003399
R=0 G=51 B=153 |
#003366
R=0 G=51 B=102 |
#003333
R=0 G=51 B=51 |
#003300
R=0 G=51 B=0 |
#0000FF
R=0 G=0 B=255 |
#0000CC
R=0 G=0 B=204 |
#000099
R=0 G=0 B=153 |
#000066
R=0 G=0 B=102 |
#000033
R=0 G=0 B=51 |
#000000
R=0 G=0 B=0 |
<HTML> <HEAD> <title>, <base>, <link>, <isindex>, <meta> </HEAD> <BODY> HTML 文g的正文写在这?.. ... </BODY> </HTML>
可在 HTML 文g中设|?MIME 字符集信息?br />您在览主页Ӟ最好自己在览器的选项菜单内选择相应的语a(language encoding)?br />但是如果 HTML 文g里写明了讄Q浏览器׃自动讄语言选项?br />其是主里用到?a >字符实体(entities)Q则该主就应该写明字符集信息?br />否则Q您在浏览该主页Ӟ若未正确讄语言选项Q显C将可能混ؕ?/p>
q是一?a >链接的例?/a>?点一下带下划U的文字!
跌{到另一个页面的某个地方?/p>
<hr>
<hr size=10>
<hr width=50>
<hr width=50%>
<hr width=50% align=left>
<hr width=50% align=right>
<hr noshade>
*=GET, POST
*=text, password, checkbox, radio, image, hidden, submit, reset
**=Symbolic Name for CGI script
*=text, password
<form action=/cgi-bin/post-query method=POST> 您的姓名: <input type=text name=姓名><br> 您的主页的网址: <input type=text name=|址 value=http://><br> 密码: <input type=password name=密码><br> <input type=submit value="发?><input type=reset value="重设"> </form>
<form action=/cgi-bin/post-query method=POST> <input type=text name=a01 size=40><br> <input type=text name=a02 maxlength=5><br> <input type=submit><input type=reset> </form>
<form action=/cgi-bin/post-query method=POST> <input type=checkbox name=水果1> Banana<p> <input type=checkbox name=水果2 checked> Apple<p> <input type=checkbox name=水果3 value=子> Orange<p> <input type=submit><input type=reset> </form>
<form action=/cgi-bin/post-query method=POST> <input type=radio name=水果> Banana<p> <input type=radio name=水果 checked> Apple<p> <input type=radio name=水果 value=子> Orange<p> <input type=submit><input type=reset> </form>
在下面选则一个系数后Q在图象上点一下,q道什么是图象坐标了!
<form action=/cgi-bin/post-query method=POST> <input type=image name=face src=f.gif><p> <input type=radio name=zoom value=2 checked>x2 <input type=radio name=zoom value=4>x4 <input type=radio name=zoom value=6>x6<p> <input type=reset> </form>
<form action=/cgi-bin/post-query method=POST> <input type=hidden name=add value=hoge@hoge.jp> Here is a hidden element. <p> <input type=submit><input type=reset> </form>
<form action=/cgi-bin/post-query method=POST> <select name=fruits> <option>Banana <option selected>Apple <option value=My_Favorite>Orange </select><p> <input type=submit><input type=reset> </form>
<form action=/cgi-bin/post-query method=POST> <select name=fruits size=3> <option>Banana <option selected>Apple <option value=My_Favorite>Orange <option>Peach </select><p> <input type=submit><input type=reset> </form>
<form action=/cgi-bin/post-query method=POST> <select name=fruits size=3 multiple> <option selected>Banana <option selected>Apple <option value=My_Favorite>Orange <option selected>Peach </select><p> <input type=submit><input type=reset> </form>
<form action=/cgi-bin/post-query method=POST> <textarea name=comment rows=5 cols=60> </textarea> <P> <input type=submit><input type=reset> </form>
<c:choose>
<c:when test="${rs.rowCount==0}">
<sql:update var="rs" dataSource="${dataSource}" >
insert into tb_user(username,password) values(?,?)
<sql:param value="${param['username']}"/>
<sql:param value="${param['password']}"/>
</sql:update>
<c:redirect url="listUser.jsp"/>
</c:when>
<c:otherwise>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("该用户名已存?);
history.go(-1);
//-->
</SCRIPT>
</c:otherwise>
</c:choose>
(3)
editUser!input.jsp
<sql:query var="rs" dataSource="${dataSource}" >
select * from tb_user where id = ?
<sql:param value="${param['id']}"/>
</sql:query>
<c:set var="user" value="${rs.rows[0]}"/>
<FORM METHOD=POST ACTION="editUserAction.jsp" onSubmit="return check();">
<INPUT TYPE="hidden" NAME="id" value="${user.id}">
<TABLE class="inputTable">
<TR><Th>用户?lt;/Th>
<TD><INPUT TYPE="text" NAME="username" id="username" value="${user.username}"><span class="require"> (*必填)</span></TD></TR>
<TR><Th>旧密?lt;/Th><TD><INPUT TYPE="password" NAME="oldPassword" id="oldPassword" ><span class="require"> (*必填)</span></TD></TR>
<TR><Th>新密?lt;/Th><TD><INPUT TYPE="password" NAME="password" id="password"><span class="require"> (*必填)</span></TD></TR>
<TR><Th>重输新密?lt;/Th><TD><INPUT TYPE="password" NAME="repwd" id="repwd"><span class="require"> (*两次密码必须相同)</span></font></TD></TR>
<TR><Th> </Th><TD><INPUT TYPE="submit" value="~辑"></TD></TR>
</TABLE>
</FORM>
(4)
editUserAction.jsp
<sql:query var="rs" dataSource="${dataSource}" >
select password from tb_user where id = ?
<sql:param value="${param['id']}"/>
</sql:query>
<c:choose>
<c:when test="${rs.rows[0].password!=param['oldPassword']}">
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("旧密码错?");
history.go(-1);
//-->
</SCRIPT>
</c:when>
<c:otherwise>
<sql:query var="rs" dataSource="${dataSource}" >
select * from tb_user where id <> ? and username = ? ?? <> 不等?br /> <sql:param value="${param['id']}"/>
<sql:param value="${param['username']}"/>
</sql:query>
<c:choose>
<c:when test="${rs.rowCount==0}">
<sql:update var="rs" dataSource="${dataSource}" >
update tb_user set username = ?,password = ? where id = ?
<sql:param value="${param['username']}"/>
<sql:param value="${param['password']}"/>
<sql:param value="${param['id']}"/>
</sql:update>
<c:redirect url="listUser.jsp"/>
</c:when>
<c:otherwise>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("该用户名已存?);
history.go(-1);
//-->
</SCRIPT>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
(5)
deleteUserAction.jsp
<sql:update var="rs" dataSource="${dataSource}" >
delete from tb_user where id = ?
<sql:param value="${param['id']}"/>
</sql:update>
<c:redirect url="listUser.jsp"/>
<sql:query var="rs" dataSource="${dataSource}" maxRows="1">
select * from tb_vote order by createdDate desc
</sql:query>
<c:set var="vote" value="${rs.rows[0]}"/>
<sql:query var="rs" dataSource="${dataSource}">
select * from tb_voteitem where vote_id = ?
<sql:param value="${vote.id}"/>
</sql:query>
<body onLoad="init();">
${vote.subject} ?{vote.count}?br /><FORM ACTION="vote_compute.jsp" METHOD="post">
<table>
<c:forEach var="voteitem" items="${rs.rows}">
<tr>
<th>${voteitem.title}</th>
<td><img src="res/poll_bg.gif" height="20px" width="${voteitem.count/vote.count*200}"></td>
<td>${voteitem.count}</td>
</tr>
</c:forEach>
</table>
</body>
(3)
createVote!input.jsp
<FORM METHOD=POST ACTION="createVoteAction.jsp" onSubmit="return check();">
<TABLE class="inputTable">
<TR><Th>主题</Th><TD><INPUT TYPE="text" NAME="subject" size="60"></TD></TR>
<TR><Th>开始日?lt;/Th><TD><INPUT TYPE="text" NAME="createdDate"></TD></TR>
<TR><Th> </Th><TD><INPUT TYPE="submit" value="??></TD></TR>
</TABLE>
</FORM>
(4)
createVoteAction.jsp
<sql:update var="rs" dataSource="${dataSource}" >
insert into tb_vote(subject,count,createdDate) values(?,?,?)
<sql:param value="${param['subject']}"/>
<sql:param value="0"/>
<sql:param value="<%=new java.util.Date()%>"/>
</sql:update>
<c:redirect url="listVote.jsp"/>
(5)
editVote!input.jsp
<sql:query var="rs" dataSource="${dataSource}" >
select * from tb_vote where id = ?
<sql:param value="${param['id']}"/>
</sql:query>
<c:set var="vote" value="${rs.rows[0]}"/>
<FORM METHOD=POST ACTION="editVoteAction.jsp" >
<INPUT TYPE="hidden" NAME="id" value="${vote.id}">
<TABLE class="inputTable">
<TR><Th>标题</Th><TD><INPUT TYPE="text" NAME="subject" value="${vote.subject}" size="60" ></TD></TR>
<TR><Th>ȝ?lt;/Th><TD>
<INPUT TYPE="text" NAME="count" value="${vote.count}")"></TD></TR>
<TR><Th>开始日?lt;/Th><TD><INPUT TYPE="text" NAME="time" value="${vote.createdDate}"></TD></TR>
<TR><Th></Th><TD><INPUT TYPE="submit" value="提交"> <INPUT Type="reset" value="重置"></TD></TR>
</TABLE>
</FORM>
(6)
editVoteAction.jsp
<sql:update var="vote" dataSource="${dataSource}" >
update tb_vote set subject = ?,count = ?,createdDate=? where id = ?
<sql:param value="${param['subject']}"/>
<sql:param value="${param['count']}"/>
<sql:param value="${param['id']}"/>
<c:choose>
<c:when test="${empty(param['createdDate'])}">
<sql:param value="<%=new java.sql.Timestamp(System.currentTimeMillis())%>" />
</c:when>
<c:otherwise>
<sql:param value="${param['createdDate']}" />
</c:otherwise>
</c:choose>
</sql:update>
<c:redirect url="listVote.jsp"/>
(7)
deleteVote.sjp
<sql:update var="rs" dataSource="${dataSource}" >
delete from tb_vote where id = ?
<sql:param value="${param['id']}"/>
</sql:update>
<c:redirect url="listVote.jsp"/>
<!#$#$!$#$!#$#$#^%^%^%^*&^*&*&*()(*)()_)+_%&$>
(8)_
CreateVoteItem.jsp
<FORM METHOD=POST ACTION="createVoteItemAction.jsp" onSubmit="return check();">
<TABLE class="inputTable">
<INPUT TYPE="hidden" NAME="vote.id" value="${param['vote.id']}"></TD></TR>
<TR><Th>选项</Th><TD><INPUT TYPE="text" NAME="title"></TD></TR>
<TR><Th>记票</Th><TD><INPUT TYPE="text" NAME="count"></TD></TR>
<TR><Th> </Th><TD><INPUT TYPE="submit" value="??></TD></TR>
</TABLE>
</FORM>
(9)
createVoteItemAction.jsp
<sql:update var="rs" dataSource="${dataSource}" >
insert into tb_voteitem(vote_id,title,count) values(?,?,?) <!--
tb_voteItem . vote_id= tb_vote.id >U联
<sql:param value="${param['vote.id']}"/>
<sql:param value="${param['title']}"/>
<sql:param value="0"/>
</sql:update>
(10)
listVoteItem.jsp
<a href="createVoteItem!input.jsp?vote.id=${param['vote.id']}">d</a>
<sql:query var="rs" dataSource="${dataSource}" >
select * from tb_voteitem where vote_id = ?
<sql:param value="${param['vote.id']}"/>
</sql:query>
<div>
<form action="listVoteItem.jsp" method="POST">
<table class="listTable">
<tr>
<th width="50%">标题</th>
<th width="10%">数</th>
<th width="3%"> </th>
<th width="3%"> </th>
</tr>
<c:forEach var="voteitem" items="${rs.rows}">
<tr>
<td>${voteitem.title}</td>
<td>${voteitem.count}</td>
<td><a href="editVoteItem!input.jsp?id=${voteitem.id}" title="~辑该记?>~辑</a></td>
<td><a href="javascript:if(confirm('您确认删除吗Q?)){document.location.href='deleteVoteItemAction.jsp?id=${voteitem.id}&vote.id=${voteitem.vote_id}'};">删除</a></td>
</tr>
</c:forEach>
</table>
</form>
(10)
editVoteItem!input.jsp
<sql:query var="rs" dataSource="${dataSource}" >
select * from tb_voteitem where id = ?
<sql:param value="${param['id']}"/>
</sql:query>
<c:set var="voteitem" value="${rs.rows[0]}"/>
<FORM METHOD=POST ACTION="editVoteItemAction.jsp" >
<INPUT TYPE="hidden" NAME="id" value="${voteitem.id}">
<TABLE class="inputTable">
<INPUT TYPE="hidden" NAME="vote.id" value="${voteitem.vote_id}")">
<TR><Th>title</Th><TD><INPUT TYPE="text" NAME="title" value="${voteitem.title}")"></TD></TR>
<TR><Th>count</Th><TD>
<INPUT TYPE="text" NAME="count" value="${voteitem.count}")"></TD></TR>
<TR><Th></Th><TD><INPUT TYPE="submit" value="提交"> <INPUT Type="reset" value="重置"></TD></TR>
</TABLE>
</FORM>
(11)
editVoteItemAction.jsp
<sql:update var="rs" dataSource="${dataSource}" >
update tb_voteItem set title = ? count=? where id = ?
<sql:param value="${param['title']}"/>
<sql:param value="${param['count']}"/>
<sql:param value="${param['id']}"/>
</sql:update>
<c:redirect url="listVoteItem.jsp?vote.id=${param['vote.id ']}"/>
(11)mysql 导出数据 http://fanqiang.chinaunix.net/db/mysql/2001-05-27/1357.shtml
mysqldump -d -u Username -p address_ip >;c:\test.txt
我来写详l一些,q样可以只导l构Q主要是-d参数Q不会导出数据?br />
1.导出整个数据?/p>
mysqldump -u 用户?-p 数据库名 > 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
mysqldump -u 用户?-p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库l构
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.导入数据?/p>
常用source 命o
q入mysql数据库控制台Q?/p>
如mysql -u root -p
mysql>use 数据?/p>
然后使用source命oQ后面参Cؓ脚本文g(如这里用到的.sql)
mysql>source d:wcnc_db.sql
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
SetCharacterEncodingFilter.java
package util.web;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* @author Dave
*/
public class SetCharacterEncodingFilter implements Filter {
// ----------------------------------------------------- Instance Variables
/**
* The default character encoding to set for requests that pass through
* this filter.
*/
protected String encoding = null;
/**
* The filter configuration object we are associated with. If this value
* is null, this filter instance is not currently configured.
*/
protected FilterConfig filterConfig = null;
/**
* Should a character encoding specified by the client be ignored?
*/
protected boolean ignore = true;
// --------------------------------------------------------- Public Methods
/**
* Take this filter out of service.
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*
* @param request The servlet request we are processing
* @param result The servlet response we are creating
* @param chain The filter chain we are processing
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
}
// Pass control on to the next filter
chain.doFilter(request, response);
BufferedWriter bw = new BufferedWriter(new FileWriter("/temp/insertlog.log"));;
//bw.
//response.getOutputStream().println();
}
/**
* Place this filter into service.
*
* @param filterConfig The filter configuration object
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null) {
this.ignore = true;
} else if (value.equalsIgnoreCase("true")) {
this.ignore = true;
} else if (value.equalsIgnoreCase("yes")) {
this.ignore = true;
} else {
this.ignore = false;
}
}
// ------------------------------------------------------ Protected Methods
/**
* Select an appropriate character encoding to be used, based on the
* characteristics of the current request and/or filter initialization
* parameters. If no character encoding should be set, return
* <code>null</code>.
* <p>
* The default implementation unconditionally returns the value configured
* by the <strong>encoding</strong> initialization parameter for this
* filter.
*
* @param request The servlet request we are processing
*/
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}