画图代码在windowxp和有些linux服务器上会没有问题,今天在别的机器上发现运行后卡死在Graphics2D g = buffImg.createGraphics();
由于使用了框架,但是没有看到报错。在网上找了解决方法,同时发现网上有些写法差不多但是可以捕获异常。
解决方法:
在tomcat部署目录下的bin目录里面的catalina.sh启动文件加入下面的红色字体部分就可以了(注意该文件的编码为unix)。
elif [ "$1" = "start" ] ;then
shift
touch “$CATALINA_BASE”/logs/catalina.out
if [ "$1" = "-security" ] ; then
echo “Using Security Manager”
shift
“$_RUNJAVA” $JAVA_OPTS $CATALINA_OPTS
-Djava.endorsed.dirs=”$JAVA_ENDORSED_DIRS” -classpath “$CLASSPATH”
-Djava.security.manager
-Djava.security.policy==”$CATALINA_BASE”/conf/catalina.policy
-Dcatalina.base=”$CATALINA_BASE”
-Dcatalina.home=”$CATALINA_HOME”
-Djava.io.tmpdir=”$CATALINA_TMPDIR”
-Djava.awt.headless=true
org.apache.catalina.startup.Bootstrap “$@” start
>> “$CATALINA_BASE”/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
fi
else
“$_RUNJAVA” $JAVA_OPTS $CATALINA_OPTS
-Djava.endorsed.dirs=”$JAVA_ENDORSED_DIRS” -classpath “$CLASSPATH”
-Dcatalina.base=”$CATALINA_BASE”
-Dcatalina.home=”$CATALINA_HOME”
-Djava.io.tmpdir=”$CATALINA_TMPDIR”
-Djava.awt.headless=true
org.apache.catalina.startup.Bootstrap “$@” start
>> “$CATALINA_BASE”/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
fi
fi
编辑完成后,重新启动tomcat,然后再运行画图程序,That’s OK!
经过测试,在weblogic中也可以采用类似的方法,然后画图的时候也不需要Xserver。具体的做法就是在weblogic的启动脚本startWebLogic.sh的最后部分中加入“-Djava.awt.headless=true”。如下橙色字体所示(只摘抄部分):
….
${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS} -Dweblogic.Name=${SERVER_NAME} -Dweblogic.ProductionModeEnabled=${PRODUCTION_MODE} -Djava.security.policy=”${WL_HOME}/server/lib/weblogic.policy”-Djava.awt.headless=trueweblogic.Server
异常如下:
一、
- 500ServletException
- java.lang.NoClassDefFoundError
- atjava.lang.Class.forName0(NativeMethod)
- atjava.lang.Class.forName(Class.java:120)
- atjava.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:58)
- atjava.awt.image.BufferedImage.createGraphics(BufferedImage.java:1011)
- atjava.awt.image.BufferedImage.getGraphics(BufferedImage.java:1001)
- atimage.mvc.vc.VC.Paint(VC.java:66)
- atimage.run.Servlet.doGet(Servlet.java:183)
- atjavax.servlet.http.HttpServlet.service(HttpServlet.java:740)
- atjavax.servlet.http.HttpServlet.service(HttpServlet.java:853)
- atcom.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
- atcom.caucho.server.http.Invocation.service(Invocation.java:315)
- atcom.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
- atcom.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:346)
- atcom.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
- atcom.caucho.server.TcpConnection.run(TcpConnection.java:139)
- atjava.lang.Thread.run(Thread.java:484)
二、
[ERROR]2005-07-2121:16:28org.jboss.web.localhost.Engine-StandardWrapperValve[jsp]:Servlet.service()forservletjspthrewexception
java.lang.InternalError:Can'tconnecttoX11windowserverusing':0.0'asthevalueoftheDISPLAYvariable.
atsun.awt.X11GraphicsEnvironment.initDisplay(NativeMethod)
atsun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:134)
atjava.lang.Class.forName0(NativeMethod)
atjava.lang.Class.forName(Class.java:141)
atjava.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
atjava.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)
atjava.awt.image.BufferedImage.getGraphics(BufferedImage.java:1031)
atcom.sww.helper.Image.creatImage(Image.java:30)
三、
SEVERE: Servlet.service() for servlet validatecode threw exception
java.lang.InternalError: Can't connect to X11 window server using '192.168.1.1:1.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.access$100(X11GraphicsEnvironment.java:52)
at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:155)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:131)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1135)
at com.newyulong.iptv.webapp.servlet.ValidateCodeServlet.service(ValidateCodeServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Sep 8, 2013 6:54:02 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet validatecode threw exception
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1135)
at com.newyulong.iptv.webapp.servlet.ValidateCodeServlet.service(ValidateCodeServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Sep 8, 2013 6:54:02 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet validatecode threw exception
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1135)
at com.newyulong.iptv.webapp.servlet.ValidateCodeServlet.service(ValidateCodeServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
四、
servlet画图类部分代码:
public class ValidateCodeServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
int w = 60;
int h = 20;
int fh = 10;
int cy = 0;
int x = 1;
int cc = 4;
char[] cs = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'
,'R','S','T','U','V','W','X','Y','Z', '2', '3', '4', '5', '6',
'7', '8', '9'
};
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
x = w / (cc + 1);
fh = h - 2;
cy = h - 4;
// image buffer
BufferedImage buffImg = new BufferedImage(w, h,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
Random random = new Random();
// fill image with white color
g.setColor(Color.WHITE);
g.fillRect(0, 0, w, h);
// create font
Font font = new Font("Fixedsys", Font.PLAIN | Font.BOLD, fh);
// set font
g.setFont(font);
g.setColor(Color.blue);
g.drawRect(0, 0, w - 1, h - 1);
..................................................
}
}
分享到:
相关推荐
Servlet 线程安全问题是指在使用 Servlet 编程时,如果不注意多线程安全性问题,可能会导致难以发现的错误。Servlet/JSP 技术由于其多线程运行而具有很高的执行效率,但这也意味着需要非常细致地考虑多线程的安全性...
当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...
在Linux环境下安装并运行JSP和Servlet是一项基本的IT技能,尤其对于开发和运维Java Web应用的人员至关重要。本文将详细指导如何在Linux系统中配置Apache服务器、Tomcat应用服务器以及JDK,以便运行JSP和Servlet应用...
JSP 调用 Servlet 显示图片是一种常见的技术,可以让开发者在 JSP 页面中显示图片,而不需要在 JSP 页面中直接嵌入图片。这项技术可以提高页面的加载速度和用户体验。 在实际开发中,我们需要根据实际情况选择合适...
在默认情况下,Servlet容器会使用ISO-8859-1编码来处理HTTP请求和响应,而这个编码并不支持中文等多字节字符集,因此会导致中文显示为乱码。 三、解决方案详解 为了解决Servlet输出JS乱码的问题,需要在Servlet中...
解决找不到javax.servlet.*等问题servlet jar包,放在项目里直接Build Path即可使用。
这篇博客“练习Servlet”可能涵盖了如何在实际项目中使用Servlet进行开发的基础知识和实践技巧。 首先,Servlet的工作原理是基于Java的多线程模型。当客户端(如浏览器)发送一个HTTP请求到服务器时,服务器会创建...
在JSP中显示Servlet生成或读取的图片是一项常见的任务,尤其在动态网站开发中,例如用户上传的图片处理、验证码生成等场景。本篇将详细介绍如何实现这一功能,涉及的知识点包括Java Servlet、JSP、HTTP协议以及文件I...
Servlet可以通过读取WEB-INF下的资源,但客户端必须通过Servlet间接获取这些资源。 #### 八、Servlet与MVC模式 Servlet在MVC(Model-View-Controller)架构中扮演控制器(Controller)的角色,负责接收请求、调用...
4. 前后端交互:用户在JSP页面上填写问卷,点击提交后,数据通过HTTP请求发送到Servlet,Servlet处理后再将结果显示回JSP页面。 5. 数据处理:Servlet接收到数据后,对投票信息进行验证和处理,可能需要计算投票比例...
本示例将这两个技术结合,展示了一个简单的列表显示功能,这在Web应用中非常常见,如数据管理、表格展示等场景。 首先,我们需要理解ExtJS的组件模型。ExtJS的核心是组件化,它提供了丰富的UI组件,如Grid(表格)...
【Maven+Servlet3.0显示系统时间源码+文档】这一资源主要涵盖了两个关键的IT技术:Maven和Servlet3.0。Maven是一个强大的Java项目管理工具,而Servlet3.0是Java服务器端编程的重要组成部分,尤其在构建Web应用程序...
利用Ajax和Servlet实现文件上传,用来commons-fileupload和commons-io两个包。这两个包也在里边。东西做的很简单,但重点是能对这个方法有所了解就行了,有人想做的更炫的可以自行修改。希望能对大家有所帮助。如果...
在本文中,我们将深入探讨如何使用Servlet和JSP实现一个简单的图片上传并显示的功能。Servlet是一种Java编程技术,常用于扩展服务器的功能,处理HTTP请求,而JSP(JavaServer Pages)则是一种动态网页技术,可以方便...
在压缩包文件的文件名称列表中,如果包含的是`javax`,那么可能包含了`javax.servlet`包下的所有源代码文件。这个包包含了Servlet API中的所有类和接口,如`ServletRequest`、`ServletResponse`、`Filter`等。通过...
如果你的IDE不识别servlet了,基本上就是缺少servlet-api.jar包。那么就是这个包,你把它放到项目的lib文件夹下,再bulid path。基本上就好了。
刚刚接触java时做的日志管理系统,做的很简单,适合初学着 servlet servlet servlet servlet servlet日志管理系统 servlet servlet servlet servlet servlet日志管理系统 servlet servlet servlet servlet servlet...
- **性能优化**:如果聊天系统在高并发情况下运行不顺畅,可能需要优化Servlet的处理速度,比如使用线程池处理并发请求,避免阻塞主线程。 - **用户体验**:界面设计可能不够友好,需要改进用户界面和交互设计,使其...
用shell写的脚本,用于java web开发时,自动编译运行servlet,速度极快,免除了eclipse慢且不过更新代码和资源的问题。脚本中的路径请自行替换为自己的
3. **IDEA配置问题**:IDEA的某些设置不当也会影响Servlet类的导入,例如源码路径设置不正确等。 4. **依赖缺失**:项目中未添加Servlet API的依赖,或者依赖版本与Tomcat版本不匹配。 #### 三、解决方案 根据提供...