Day18
请求转发和请求包含
是一个请求,至少包含两个Servlet,请求方法不可以有响应体,只可以有响应头,
请求转发:
response.setHeader("404","cuowu");//可以传过去
response.getWriter().print("响应体");//传不过去
RequestDispatcher re= request.getRequestDispatcher("/Bservlet");
//使用request调用getRequestDispatcher()方法,方法的参数是转发或包含的Servlet路径
re.forward(request,response);
请求包含:响应体可以传过去re.include(request,response);
Request域对象
在一个请求时间的有效,所以在重定向之后request就消失了。
包含的方法:
Void setAttribute(String name , Object value);封装参数
Object getAttribute(String name);获取参数
Void removeAttribute(String name );删除参数
转发和重定向的区别:****
转发是一个请求,一次响应,重定向是两次请求,两次响应
转发地址栏不会变化,重定向地址栏会变化
请求转发只能在本项目中的Servlet,重定向可以转发到任何项目中
转发是服务器端行为,只需给出转发的Servlet路径,重定向需要给出requestURI
请求的效率更高
编码
国际通用UTF-8, 系统默认,支持中文的(gb2312gbk)
服务器需要设置编码,setCharacterEncoding(“tuf-8”);然后浏览器有默认的编码,gbk,需要保持一致,name就需要定义浏览器的编码格式了
使用response.setHeader("Content-Type","text/html;charset=utf-8");既可以设置服务器的编码格式,也可以设置浏览器的编码格式。
便捷方法:response.setContentType(“text/html;charset=utf-8”);
总结:想要不出现乱码,在使用getWrite()之前使用便捷方法
请求编码:
POST请求:使用getAttribute等方法之前使用
reqponse.setCharacterEncoding(UTF-8);
GET请求:因为浏览器传给服务器的是utf-8,而浏览器默认接收使用的是ISO所有需要在Tomcat中的conf/server.xml中加上一句话来定义服务器的默认编码
(URIEncoding=”UTF-8”,一般不用)
可以使用byte[]bytes = name.getBytes(“ISO-8859-1”);反编码
然后使用name= new String(bytes ,”UTF-8”);
关于路径
1 web.xml中的<url-pattern>路径(一般叫做Servlet的路径)
2转发和请求包:以“/”开头,相对于当前路径,直接加上Servlet路径
3重定向路径(客户端路径,必须加项目名)
以“/”来头,就像相对于当前主机,所以可以省略http://localhost:8080/
直接用项目名/Servlet名就可以了
4页面中找链接路径和表单路径(和重定向相同都是客户端路径,都要加项目名)
绝对路径都是以“/”开头 相对路径都是不以“/”开头