前言
两种输出方式
//简略写法 response.getWriter().write("滴滴");
//字符流输出
PrintWriter printWriter=response.getWriter();
printWriter.write("滴滴");
//字节流输出
//简略写法response.getOutputStream().write("滴滴".getBytes("utf-8"));
ServletOutputStream outputStream=response.getOutputStream();
outputStream.write("滴滴".getBytes("utf-8"));
响应流乱码(客户端(浏览器)显示中文时为乱码)
字符流
@WebServlet("/s02")
public class servlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");//设置服务端编码格式
response.setHeader("content-type","application/html; charset=utf-8");//告诉客户端(浏览器)我的编码格式,以设置一致的解码格式
//字符流输出
PrintWriter printWriter=response.getWriter();
printWriter.write("<h3>滴滴</h3>");
}
}
字节流
@WebServlet("/s02")
public class servlet03 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setHeader("content-type","application/html; charset=utf-8");//告诉客户端(浏览器)我的编码格式,以设置一致的解码格式
//字节流输出
ServletOutputStream outputStream=response.getOutputStream();
outputStream.write("<h3>滴滴</h3>".getBytes("utf-8"));
}
}
总结:
响应数据给客户端(浏览器)时,服务端的编码格式要与客户端的解码格式一致。
因为你不知道服务端和客户端的编码格式是什么,所以你要统一设置
response.setCharacterEncoding(“utf-8”);
response.setHeader(“content-type”,“application/html; charset=utf-8”);
不管是什么流
重定向
服务端指导,客户端行为
存在两次请求
地址栏会发生变化
request 不共享,即数据不共享
方法
@WebServlet("/s02")
public class servlet03 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("s05");
}
}
总结:
它就与Vue的路由重定向差不多,怎么说呢,
请求转发(页面跳转):就是有意向的页面跳转,比如输入账号密码登录成功后的跳转
重定向:你没有登录账号,但是却直接访问了登录后的页面地址,服务端检测到你没有登录就会告诉浏览器一个地址,浏览器就会再发一次请求,重定向到登录页面地址让你登陆
请求转发 | 重定向 |
---|---|
request.getRequestDispatcher(“s05”).forward(request,response); | response.sendRedirect(“s05”); |
一次请求,数据在request中共享 | 两次请求,request中的数据不共享 |
服务端行为 | 客户端行为 |
地址栏不发生变化 | 地址栏发生变化 |
地址只能是项目下的资源,如jsp,html,等等文件 | 可以是任意地址(跨域跳转),如www.baidu.com |