java web中怎么判断当前服务是用的weblogic还是tomcat?

bingdiankaka 2012-08-14 09:33:59
1.页面验证码:
response.reset();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
//out.clear();
//out=pageContext.pushBody();

tomcat中需要 out.clear();out=pageContext.pushBody();这两行才不报错!
而weblogic 中需要 //out.clear();//out=pageContext.pushBody();才不报错!
2.tomcat中对于前台页面传递中文参数url需要在后台 name=new String(name.getBytes("ISO-8859-1"), "gbk");转换编码格式才能正常接收中文参数。 而对于weblogic则不用这样转码,如果转码了反而出错了。
因为前台代码为 ‘ <tr height="20" align="center" class="mytr" style="cursor:hand" onclick="sysaction22('<%=basePath%>argiSetAction!getSelArea.action?quId=<s:property value="#area.id.countyId"/>&&areaId=<s:property value="#area.id.localId"/>&&name=<s:property value="#area.localName"/>')"> ’ 参数的传递用了 <s: 标签,所以没法对参数进行转码,只能在后台转码,但是后台又要区分是weblogic和tomcat!
请问怎么通过代码区别他们?
...全文
1242 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-08-15
  • 打赏
  • 举报
回复
统一编码,指的是: Web、源代码、中间件URI 和 数据库 全部采用同一套字符集,目前首推是 UTF-8 了。

这样可以减少很多编码转换的复杂度 和 时间开销;子系统之间的集成和数据交换也就没有这类风险了。
bingdiankaka 2012-08-15
  • 打赏
  • 举报
回复
<%@ page language="java" contentType="image/jpeg; charset=gbk"%>
<%@ page import="java.util.Random" %>
<%@ page import="java.awt.Graphics" %>
<%@ page import="java.awt.Font" %>
<%@ page import="java.awt.Color" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="com.sun.image.codec.jpeg.*" %>
<%!
Color getRandColor(int fc,int bc){
//给定范围获得随机颜色
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);
}
%>
<%
response.reset();
response.setContentType("image/jpeg");
//设置页面不缓存
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);

// 获取图形上下文
Graphics g = image.getGraphics();

//生成随机类
Random random = new Random();

// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));

//画边框
g.setColor(new Color(100,100,100));
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);
}

// 取随机产生的认证码(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)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("yanzhengma",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
//ImageIO.write(image,"JPEG",response.getOutputStream());
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
encoder.encode(image);


//out.clear();
//out=pageContext.pushBody();
%>
这个我们项目里面的验证码jsp文件。
关于转码,你说的统一编码是怎么统一的? 前台编码依据的是谁? 后台解码依据的是谁? 编码这一块我都快被网上的说法给弄晕了。自己试也没试出个所以然来!!!
MiceRice 2012-08-14
  • 打赏
  • 举报
回复
问题1:
<% String info = application.getServerInfo() %>
然后可以根据内容去判断。


但是,输出验证码为啥要 out.clear() 和 pageContext.pushBody() ?


问题2:
那是因为你没有设置Tomcat关于URI的缺省编码,所以它默认是ISO8859-1,而Weblogic默认就是UTF-8

找找 conf\server.xml

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
S1412801460 2012-08-14
  • 打赏
  • 举报
回复
你可以写个配置文件 从配置文件里读取到底是那种web服务。
MiceRice 2012-08-14
  • 打赏
  • 举报
回复
1、我在Tomcat和Weblogic下都做过验证码,从没用过这两句话;

2、统一编码规范是最合理的,否则就自己手工转码吧;也可以尝试在Filter中 request.setCharacterEncoding(xxoo)。
bingdiankaka 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
问题1:
<% String info = application.getServerInfo() %>
然后可以根据内容去判断。


但是,输出验证码为啥要 out.clear() 和 pageContext.pushBody() ?


问题2:
那是因为你没有设置Tomcat关于URI的缺省编码,所以它默认是ISO8859-1,而Weblogic默认就是UTF-8

找……
[/Quote]
1. out.clear() 和 pageContext.pushBody() 是weblogic在验证码中需要的,如果不写这两句话就会报错,虽然不影响程序运行但是不好看。 但是如果是tomcat的话就需要这两句,才能正常。因为项目要部署到两种服务器上,所以才需要判断当前运行的环境是tomcat还是weblogic?
2. tomcat默认解码uri的设置,我试过可以,但是一般该项目部署的容器里还有其他项目,所以这个不是最好的解决办法!!!

81,106

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧