请求与相应
获取request的变量
客户端游览器所发出的请求会被封装称为一个httpservletrequest对象。所有的信息包含请求的地址,请求的参数,提交的数据,上传的文件,客户端的ip地址
等都在其中
以下便是从一个htttpservletrequest对象中采集客户端信息,然后用游览器显示出来
public class requestservlet extends httpservlet{
stringBuffer buffer =new stringBuffer();
if(accept.contains("image/gif")) buffer.append("gif文件");
if(accept.contains("image/x-xbitmap"))buffer.append("BMP 文件");
if(sccept.contains("excel 文件"));
....................
....................
同理在这里省略获取其他类型的文件代码
}
private string getlocale(locale locale){
if(locale.SIMPLFIED_CHINESE.equals(locale))
return "简体中文";
if(locale.TRADITIONAL_CHINESE.equals(locale))
return "繁体中文";
}
private string getAddress(string ip){
return inputil.getpAddress(ip);
}
等等相关代码在此不再多做显示因为这些代码不外乎只是为了说明如上的那句话即
客户端游览器所发出的请求会被封装称为一个httpservletrequest对象。所有的信息包含请求的地址,请求的参数,提交的数据,上传的文件,客户端的ip地址
等
response生成图片验证码
同样
服务器队客户端游览器做出的相应也会被封装成一个httpservletrequest对象。所以要对游览器进行操作只需要对httpservletrequest对象进行操作即可
通过httpservletrequest getwriter()获得一个printwriter()对象,该对象为outputstream的子类。然后使用该对象输出信息就可以。
举例如下
publi class identitypservlet extends httpservlet{
public static final char [] CHARS={
'2' ,'3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','j','k','l','z','x','v','n', 设置一个char[]类型的字符字典
'm'
};
public static Random random=new Random();
stringBuffer buffer =new stringBuffer();
for(int i=0;i<6;i++){
buffer.append.append{CHARS[random.nextinl{CHARS.length}]}; 设计字符缓存与获取随即的六个字符
}
return buffer.tostring();
}
public static color getRandomColor(){
return new color (random.nextint(255),random.nextint(255), 获取随即颜色
random.nextint(255));
}
public static Color getReverseColor(Color c){
return new Color(255-C.getred(),255-c.getGreen(),255-c/getBlue()); 返回某中颜色的反色
}
public void doget(httpservletrequest request, httpservletresponse response)
throws.servletException, IoException{
respongse.setconttType{"image/jpeg"};
string randomstring=getRandom(); 获得随即的字符串
request.getsession(true).setAttribute("randomstring",randomdstring);
int width=100;
int height-30;
Color color =getRandomColor(); 图片的宽度与高度
Color reverse=getReverseColor(color);
Bufferedimge bi=new Bufferedimage(width,height,Bufferedimage.type_intrgb);
graphics2D g=bi.createGraphics();
g.setFont(new Font(Font.SANS_SERIf,Font.BolD,16)); 设置字体与设置颜色与描绘背景及绘制随机字符
g.setColor(color);
g.fillrect(0,0,width,height);
g.setColor(reverse);
g.drawString(randomstirng.18.20);
for(int i=0,n=random.nexint(100);i<n;i++){ 画幅里最多只能是100个噪点
g.drawrect(random.nextint(width),random.nextint(height),1,1); 生成随机噪点
}
servletoutputstream out =response.getoutputstream(); 转化格式与对图片进行编码输出给游览器
jpegimageencoder encoder=jpegcodec.createjpegencoder(out);
encoder.encode(bi);
out.flush();
}
}
分析
该段代码利用一个随机数生成器Random与一个char[]来生成一个长为100宽为30的图片并利用随机颜色填充背景最后再用
反色在前面绘制出随机字符噪点设置为100个噪点