setContentType(“text/html;charset=utf8”)后页面依然乱码

写了段servlet返回浏览器中文的代码,设置了返回编码为“utf-8”,但是在浏览器端看到的仍是乱码,代码如下:

public class ServletTest extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		PrintWriter pw = res.getWriter();
		res.setContentType("text/html;charset=utf8");
		pw.write("尼美的");
		pw.close();
	}
}

后来发现,setContentType应该写在getWriter前面,所以啊,顺序还是很重要的!!!

res要先设定,才能保证通过res获得的流是utf8的格式。正确代码如下:

public class ServletTest extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		res.setContentType("text/html;charset=utf8");
		PrintWriter pw = res.getWriter();
		pw.write("尼美的");
		pw.close();
	}
}

tomcat搭建的web项目,网页第二次访问时卡住……

状态

今天用servlet和jsp写了个web小项目,后台查询mysql数据库是使用的dbcp连接池,只开了1个连接。

写完后,启动tomcat访问页面列表时,发现第一次访问没有问题,但是刷新页面或再访问其他列表页面时就一直卡住,服务端不返回任何数据到浏览器……

折腾了很久,各种打桩,发现在重启tomcat的时候,后台可以把第二次访问的页面需要查询的列表打印到控制台,但是不会返回给浏览器(其实,这个时候是没有机会返回了),经过分析,这个很像是后台在等待连接数据库,所以一直无法返回结果。仔细查看程序后,果不其然,后台访问完数据库时,忘了关闭连接,我只开了1个连接,所以第二次访问时后台一直在等待连接数据库……

坑大了,马上加上关闭连接的代码,重新部署后就OK了……所以,连接使用完一定要关闭啊!!!

想起了另一个坑,java操作文件时,没有关闭读写文件的流,文件打死都无法删除……还只有通过任务管理器结束javaw.exe进程后才能删除……所以自己创建的流用完了也要关闭啊!!!