1.请求的转发和重定向:
1).本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。
具体:
①请求转发:地址栏是初次发出请求的地址
请求的重定向:地址栏不再是初次发送的请求地址,地址栏为最后响应的那个地址。
②请求转发:在最终的Servlet中,request对象和中转的request是同一对象
请求的重定向:在最终的Servlet中,request对象和中转的request不是同一对象.
③请求转发:只能转发给当前的WEB应用的资源
请求的重定向:可以重定向到任何资源
④请求转发:/代表的是当前WEB应用的根目录
请求的重定向:/代表的是当前WEB站点的根目录
//1.请求转发的代码
request.getRequestDispatcher("/c.jsp").forward(request, response);
//2.请求的重定向
// response.sendRedirect("c.jsp");
//可以重定向到任何资源
response.sendRedirect("http://www.baidu.com");
2.中文乱码
1). 在 JSP 页面上输入中文, 请求页面后不出现乱码: 保证 contentType="text/html; charset=UTF-8",
pageEncoding="UTF-8" charset 和 pageEncoding 的编码一致, 且都支持中文. 通常建议取值为UTF-8
还需保证浏览器的显示的字符编码也和请求的 JSP 页面的编码一致.
2). 获取中文参数值: 默认参数在传输过程中使用的编码为 ISO-8859-1
①. 对于 POST 请求: 只要在获取请求信息之前(在调用 request.getParameter 或者是 request.getReader 等),
调用 request.setCharacterEncoding("UTF-8") 即可.
②. 对于 GET 请求: 前面的方式对于 GET 无效. 可以通过修改 Tomcat 的 server.xml 文件的方式.
参照 http://localhost:8080/docs/config/http.html 文档的 useBodyEncodingForURI 属性.
为 Connector 节点添加 useBodyEncodingForURI="true" 属性即可.
<Connector connectionTimeout="20000" port="8989" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>