struts编码问题

2011年09月29日

之前我一直遇到这样的问题:使用httpurlconnection向我的站点上的某一个action上传递参数大时候,总会出现乱码,后来经过上一篇关于乱码问题的日志中提到的方法后,问题初步解决了,在一个普通的java project项目中使用httpurlconnection向站点传参,没问题,不会乱码,可是,一旦将这些执行传参的类部署到web项目中的时候,由web容器调用的时候,就乱码了,我百思不得其解,要是我代码错了吧,普通的java project又没事儿,一部署上了之后就出问题了,很奇怪,思来想去,就只有一个可能,java project和web 容器很明显,代码运行的环境不一样,也许web容器的环境编码比较特殊,后来也证实,是这个问题,但是具体原理我还不甚了解,最终的解决方案是:在获取用于输出参数的输出流时,要设置其编码:

                        URL url;

			//我的tomcat站点地址,struts是我部署的一个站点,receive是其中一个action,reveiceData是处理这个请求的方法
			url = new URL("http://10.153.114.132:8080/struts/receive_reveiceData");
			//打开urlconnection连接,强制转换成http连接
			HttpURLConnection connection=(HttpURLConnection)url.openConnection();
			//设置是否输出数据
			connection.setDoOutput(true);
			//设置请求方式
			connection.setRequestMethod("POST");
			connection.connect();
			//获取一个output流
			OutputStream outStream=connection.getOutputStream();
                        //包装输出流,格式化流,这步是关键!
			OutputStreamWriter outPost=new OutputStreamWriter(outStream, "utf-8");
			//实验证明,使用下面这句,也不会有乱码
			String str="data='你好'"+calendar.getTime();
			//写……
			outPost.write(str);
                        //注意写完之后要对输出流进行处理!也是关键!
			outPost.flush();
			outPost.close();
			//发出请求
			connection.getInputStream();


你可能感兴趣的:(struts,编码,乱码)