1.response的outputstream输出中文
1.程序以什么输出,就要控制浏览器以什么方式
private void test1(HttpServletResponse response) throws IOException,
UnsupportedEncodingException {
// 告诉浏览器以什么方式打开
response.setHeader("content-type", "text/html;charset=utf-8");//html后面的分号变成逗号时,就变成下载了
String data = "中国";
OutputStream out = response.getOutputStream();
out.write(data.getBytes("utf-8"));
}
2.用meta标签模拟HTTP响应头,来控制浏览器的打开
private void test2(HttpServletResponse response) throws IOException,
UnsupportedEncodingException {
String data = "中国";
OutputStream out = response.getOutputStream();
// 利用HTML中的meta标签模拟HTTP响应头
out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>"
.getBytes());
out.write(data.getBytes("utf-8"));
}
2.response的write输出数据
private void test1(HttpServletResponse response) throws IOException {
// 设置response使用的码表,控制response以什么码表向浏览器输出
response.setCharacterEncoding("utf-8");
// 指定浏览器以什么码表打开
response.setHeader("content-type", "text/html;charset=utf-8");
String data = "哈哈";
PrintWriter out = response.getWriter();
out.write(data);
}
小细节:在开发中
response.setCharacterEncoding("utf-8");
response.setHeader("content-type", "text/html;charset=utf-8");
这两句话等于
<span style="font-family: Arial, Helvetica, sans-serif;">response.setContentType("text/html;charset=utf-8");</span>
3.response实现文件下载
package response;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = this.getServletContext().getRealPath("/download/1.jpg");
String filename = path.substring(path.lastIndexOf("//") + 1);
// 如果下载文件是中文,要进行Url编码
//发送HTTP头通知浏览器打开
response.setHeader("content-disposition",
"attachment" + URLEncoder.encode(filename, "utf-8"));
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(path);
int len = 0;
byte buffer[] = new byte[1024];
out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}