幂等
doGet()只是要得到一些东西,不会修改服务器上的任何内容。doGet()是幂等的,能执行多次,不会产生任何不好的副作用;doPost()不是幂等的,Post体中提交的数据可能用于不可逆转的事务。
幂等:表示同一个请求可以做两次,而不会对服务器产生负面作用。
简单的超链接往往意味着Get,若表单属性注明method="POST",则就是一个Post;若未注明,则是Get。
Servlet中doGet()和doPost()
从请求中得到参数:
request.getParameter("color"); //返回的是一个String。
返回多个值的参数:
String one = request.getParameterValues("size")[0]; String[] sizes = request.getParameterValues("size");
除了参数还能从request对象中得到:
1.客户的平台和浏览器信息
String client = request.getHeader("User-Agent");
2.与请求相关的cookie
Cookie[] cookies = request.getCookies();
3.与客户相关的会话
HttpSession sessions = request.getSession();
4.请求的HTTP方法
String theMethod = request.getMethod();
5.请求的输入流
InputStream input = request.getInputStream();
其他常用方法:
response.getWriter();
response.setContentType();
上一个方法是设置返回的MIME类型,常见的MIME类型有:text/html,application/pdf,video/quicktime,image/jpeg
输出:
ServletOutputStream用于输出字节(可写任何内容)
out.write(aByteArray);
PrintWriter用于输出字符流(专门用于处理字符数据)
out.println(string);
设置相应首部:
response.setHeader("foo","bar");
response.setIntHeader("foo",20);
增加相应首部:
response.addHeader("foo","bar");
Servlet重定向:response.sendRedirect("http://www.sina.com.cn");
不能在写到相应之后再调用sendRedirect(),否则会抛出IllegalStateException异常。即在Servlet中,要么处理请求,要么调用sendRedirect()让“别人”处理。
关于相对URL
若访问者键入的url地址是:http://www.blogjava.net/codingliyi/app.do,在Servlet中执行sendRedirect("files/download.html"),浏览器的地址栏将跳转到http://www.blogjava.net/codingliyi/files/download.html页面;如果在Servlet中执行sendRedirect("/files/download.html"),浏览器的地址栏将跳转到http://www.blogjava.net/files/download.html页面。(注意“file/download.html”前有无斜杠的区别)
重定向和请求分派的的区别
重定向是客户来完成工作,请求分派是要求服务器的某某来完成任务。