开发者社区> 问答> 正文

使用JSP生成验证码,服务器上报错,请教原因? 400 报错

使用JSP生成验证码,服务器上报错,请教原因? 400 报错

项目需要用到验证码,其实也就是生成4个数字,本地是好的,能正常生成出来验证码图片,但是服务上不知道为什么会报错。所以想问下,这问题是出在哪儿?

生成验证码的代码(JSP) 如下:

<%@ page contentType="image/jpeg"
	import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*"
	pageEncoding="GBK"%><%!
    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.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(new Color(255,255,255));//白色
    g.fillRect(0, 0, width, height);
    
    //设定字体
    g.setFont(new Font("Times New Roman",Font.PLAIN,18));

    //画边框
    g.setColor(new Color(153,153,153));//灰色
    g.drawRect(0,0,width-1,height-1);
    g.setColor(new Color(163,208,233));//蓝色
    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 j=0;j<4;j++){
        String rand=String.valueOf(random.nextInt(10));
        sRand+=rand;
        g.setFont(new Font("Times New Roman",Font.PLAIN,19)); 

        // 将认证码显示到图象中

	g.setColor(new Color(153,153,153));//灰色
        g.drawString(rand,13*j+6,16);
    }


    // 将认证码存入SESSION
    session.setAttribute("ccode",sRand);
    session.setAttribute("ccode_begin_time",new Long(System.currentTimeMillis()));
    session.setAttribute("ccode_time",new Long(1000*60*3));
    // 图象生效
    g.dispose();
//  输出图象到页面
    ImageIO.write(image, "JPEG", response.getOutputStream()); 


%>
错误信息为:

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException
	at org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source)
	at org.apache.jasper.servlet.JspServlet.service(Unknown Source)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(Unknown Source)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(Unknown Source)
	at org.apache.catalina.core.ApplicationDispatcher.forward(Unknown Source)
	at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
	at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
	at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
	at com.baosight.web.filter.ChangeCharsetFilter.doFilter(ChangeCharsetFilter.java:36)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
	at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.CertificatesValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.jboss.web.tomcat.tc4.statistics.ContainerStatsValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.catalina.core.StandardContext.invoke(Unknown Source)
	at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.AccessLogValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.coyote.tomcat4.CoyoteAdapter.service(Unknown Source)
	at org.apache.coyote.http11.Http11Processor.process(Unknown Source)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Unknown Source)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
	at java.lang.Thread.run(Thread.java:534)


root cause 

javax.servlet.ServletException
	at org.apache.jasper.runtime.PageContextImpl.handlePageException(Unknown Source)
	at org.apache.jsp.ccode_jsp._jspService(ccode_jsp.java:130)
	at org.apache.jasper.runtime.HttpJspBase.service(Unknown Source)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source)
	at org.apache.jasper.servlet.JspServlet.service(Unknown Source)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(Unknown Source)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(Unknown Source)
	at org.apache.catalina.core.ApplicationDispatcher.forward(Unknown Source)
	at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
	at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
	at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
	at com.baosight.web.filter.ChangeCharsetFilter.doFilter(ChangeCharsetFilter.java:36)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
	at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.CertificatesValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.jboss.web.tomcat.tc4.statistics.ContainerStatsValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.catalina.core.StandardContext.invoke(Unknown Source)
	at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.valves.AccessLogValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(Unknown Source)
	at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
	at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
	at org.apache.coyote.tomcat4.CoyoteAdapter.service(Unknown Source)
	at org.apache.coyote.http11.Http11Processor.process(Unknown Source)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Unknown Source)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
	at java.lang.Thread.run(Thread.java:534)
JSP的CLass文件,我看上面的提示说是130出错了,但无从下手,不好找:

package org.apache.jsp;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import org.apache.jasper.runtime.HttpJspBase;

public class ccode_jsp extends HttpJspBase
{
  private static Vector _jspx_includes;

  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);
  }

  public List getIncludes()
  {
    return _jspx_includes;
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
  {
    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    try
    {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html;charset=GBK");
      pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);

      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      response.setContentType("image/jpeg");
      response.setHeader("Pragma", "No-cache");
      response.setHeader("Cache-Control", "no-cache");
      response.setDateHeader("Expires", 0L);

      int width = 60; int height = 20;
      BufferedImage image = new BufferedImage(width, height, 1);

      Graphics g = image.getGraphics();

      Random random = new Random();

      g.setColor(new Color(255, 255, 255));
      g.fillRect(0, 0, width, height);

      g.setFont(new Font("Times New Roman", 0, 18));

      g.setColor(new Color(153, 153, 153));
      g.drawRect(0, 0, width - 1, height - 1);

      g.setColor(new Color(163, 208, 233));
      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);
      }

      String sRand = "";
      for (int j = 0; j < 4; j++) {
        String rand = String.valueOf(random.nextInt(10));
        sRand = sRand + rand;
        g.setFont(new Font("Times New Roman", 0, 19));

        g.setColor(new Color(153, 153, 153));
        g.drawString(rand, 13 * j + 6, 16);
      }

      session.setAttribute("ccode", sRand);
      session.setAttribute("ccode_begin_time", new Long(System.currentTimeMillis()));
      session.setAttribute("ccode_time", new Long(180000L));

      g.dispose();

      ImageIO.write(image, "JPEG", response.getOutputStream());
    }
    catch (Throwable t)
    {
      out = _jspx_out;
      if ((out != null) && (out.getBufferSize() != 0))
        out.clearBuffer();
      if (pageContext != null) pageContext.handlePageException(t); //130
    }
    finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);
    }
  }
}
不知道意思说清楚了没有,就是这个通过一个jsp生成验证码图片,我本地能出来,但是服务器上就会报第二段代码的错误。

有没有谁遇到过类似的问题啊?

展开
收起
爱吃鱼的程序员 2020-06-03 16:49:48 460 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

      已解决,据说是流的冲突造成的。

      添加以下代码,便好了。

      

    OutputStream os = response.getOutputStream();
    ImageIO.write(image, "JPEG", os); 
    os.flush();
    os.close();
    os=null;
    response.flushBuffer();
    out.clear();
    out = pageContext.pushBody();

    2020-06-03 20:47:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS块储存产品全面解析 立即下载