HttpServletResponse类和HttpServletRequest类一样,在服务器每次收到请求的时候就会创建一个response对象传递给doget()和dopost方法使用,HttpServletResponse表示所有响应的消息,我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置。
返回给客户端的数据可以通过输出流来进行实现
- 字节流:getoutputStream()常用于下载的(传递二进制数据)
- 字符流:getWriter()常用于回传数据串
- 【但是两个流不能进行同时使用,否则会报错】
使用response回传数据中文乱码的问题:
服务器默认的响应编码集是ISO-8859-1,而浏览器的默认编码是jdk编码,所以回传中文会出现中文乱码的问题。
第一步:设置服务器的响应编码为utf-8,使用response.setCharacterEncoding("utf-8")方法来进行设置。
第二步:通过Content-Type响应头来通知浏览器使用utf-8进行编码。
示例代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type","text/html;charset=UTF-8");
resp.getWriter().write("小张");
}
第二种解决 中文乱码的方式:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//使用条件在获取流对象之前进行调用
resp.setContentType("txt/html;charset=UTF-8");//这 个方法设置发送到客户端的响应的内容类型,此时响应还没有提交。给出的内容类型可以包括字符编码说明
resp.getWriter().write("小张");
}
请求重定向:
请求重定向,是指客户端给服务器发送请求后,servlet又重新给浏览器返回一个地址,让浏览器在去访问这个地址。同时原来地址的servlet会向浏览器返回302响应码。
代码:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(302);//设置响应的状态码
//通过Location告诉浏览器进行重新按照响应头的value进行访问
resp.setHeader("Location","http://localhost:8080/01web_war_exploded/servlet5");
}
第二种重定向的方法:
不需要进行设置响应编码。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("http://localhost:8080/01web_war_exploded/servlet5");
}
效果图:
请求重定向的特点:
- 浏览器的地址会发生变化
- 总共是两次请求
- 不能跳转到WEB-INF目录的资源下
- 可以重定向到web工程之外的地址,比如百度
- 因为是两次请求不能共享request域中的数据,contenxt域,session域中的是可以共享的。
相关文章
暂无评论...