Servlet 报错

在进行项目上线前的压力测试中,遇到Servlet在高并发请求时出现错误。尝试修改getWriter()为outputStream()并添加reset()操作,但问题依旧。问题根源在于代码中使用了全局变量request和response,这在Servlet的单实例多线程环境下导致线程不安全。解决方案是去除全局变量,改为在方法内直接使用局部变量request和response。尽管如此,在极限压力下仍出现错误,目前等待解决方案。
摘要由CSDN通过智能技术生成

一次临时参与一个项目的上线前的压力测试工作,当模拟高并发请求后台servlet的时候,后台报错:

org.jboss.resteasy.spi.UnhandledException: Response is committed, can't handle exception

Caused by: java.lang.IllegalStateException: getWriter() has already been called for this response

网上说应该将 getWriter() 改成 outputStream() ,改成后又报错:

java.io.CharConversionException: Not an ISO 8859-1 character

后面又有人说加上 reset() , 改成后还报错:

java.lang.IllegalStateException: Cannot call reset() after response has been committed

决定从代码的角度找问题,发现写此代码的人,将 request  和 response 设置成了类的全局变量;

	protected HttpServletRequest _request;
	protected HttpServletResponse _response;

	public void setServletRequest(HttpServletRequest request) throws UnsupportedEncodingException {
		this._request = request;
		request.setCharacterEncodi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值