request和response
HttpServletResponse:
给客户端会送数据时会用到的类
常用API:setSatus 设置相应状态码
setHeader 设置响应头信息
getWriter 获得响应体字符输出流
getOutputStream 获得响应体字节输出流
1.请求重定向
response.sendRedict(request.getContextPath+"/login.jsp");//此处路径是动态获得,也可以写死
请求重定向的特点: 1)浏览器地址栏发生了变化,指向了另一地址
2)发生了两次http请求(可以通过抓包工具看到)
2.自动刷新
response.setHeader("refresh","5;url=mail/news.html");//5秒后跳转到该页面
在js中实现代码如下:
<meta http-equiv="refresh" content="5;url=/day6/hello.html" />
<script type="text/javascript">
var i = 5;
function timeChange(){
document.getElementById("span").innerHTML=i;
i--;
window.setTimeout("timeChange()", "1000");
}
</script>
<body onload="timeChange();">
您将在<span id = "span"></span>秒后跳转到网站首页
</body>
3.设置三个http头信息禁用浏览器缓存
为什么要禁用浏览器缓存?
对于一些动态数据,我们希望每当用户在地址栏中敲了回车之后能够看到最新的数据,
但是很多时候,浏览器会自动帮你去缓存该数据,因此禁用缓存就ok了
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setHeader("Expires",-1);//此处需要的是一个时间值
有这三个禁用缓存,主要是因为目前市场上的浏览器太多,而每种浏览器所支持的禁用缓存
可能不一致,所以最好把这三个头信息都设置一下
4.生成http响应体内容
response.getWriter()和response.getOutputStream()
如果有乱码要在这个两个方法之前设置setContentType()或setCharacterEncoding()
HttpServletRequest:
常用API:getMethod() 获得请求方式
getProtocol() 获得协议
getRequestURI()和getRequestURL() 获得请求资源路径
getRemoteAddr() 获得客户机IP地址
getContextPath() 获得工程虚拟目录
URI和URL的区别:URI比URL大
URI:sina/news URL:http://www.sina.com/news
http://www.sina.com/news 是URL也是URI,但sina/news是URI不是URL
获取当前请求资源路径:request.getRequestURI.subString(request.getContextPath().length());
获取请求头信息:request.getHeader(name);
获得复杂表单中的数据(get和post方式),并解决乱码的方式
1.post:当表单的提交方式是post的时候,只需一行代码就搞定:request.setCharacterEncoding("UTF-8");
2.get:由于是get请求方式,所以会把数据带到URL地址栏中,如果有中文就会对其进行编码(按照当前页面的
的编码格式去编译)所以在地址栏中看到的就会是%EA%CD(URL编码)形式,在服务端接收到之后(假设现在
还没有对request设置编码),要把接收到的value通过默认的编码格式(ISO8859-1)去解码,由于编码集不
一样,所以在服务端解码之后会出现???乱码形式,这时候就需要通过ISO8859-1解码之后的字节反着去查
这个字节再UTF-8中字节,然后再把这些字节通过设置成UTF-8之后输出到页面
String name = request.getParameter("name");
name=new String(name.getBytes[]("ISO8859-1","UTF-8"));
System.out.println(name);
这样就可以解决乱码问题
解决请求参数中有多个值时丢失数据的问题:
当jsp页面中有"checkbox"的选项时,会出现多个值,如果使用getParameter()方法来获得其中的参数会出现丢失
数据的可能,这时要使用getParameterValue("name")方法来获得一个String[]数组,然后对这个数组进行遍历
来获得其中的每一个参数
请求转发和请求重定向的区别:
1)请求转发一次请求,一次响应;请求重定向两次请求,两次重定向
2)请求转发URL地址不变,请求重定向URL地址变为要跳到的资源地址
3)请求转发只能转发给同一个网站的内部资源,请求重定向可以定向到任何一个网站
4)请求转发属于服务器内部路径,不写工程名;请求重定向来自客户端必须要写工程名
注意:request.setAttribute("name","value")必须要和request.getRequestDispatcher().forward 转发一起使用