一.HttpServletResponse
1.http协议:web服务器收到客户端的http请求,会针对每一次请求,分别创建一个request和response
2.HttpServletResponse
2.1响应行 setStatus
2.2响应头
2.2.1setHeader 请求响应头信息
A.刷新页面
response.setHeader("refresh","1");
B.没有缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
C.设置过期的时间
response.setDateHeader("Expires", System.currentTimeMillis()+自己设置的时间期限);
D.访问别的页面
response.setStatus(302); response.setHeader("location","url");
E.下载文件用于设置文件类型
response.setHeader("Content-Type","video/x-msvideo");
F.通知浏览器数据采用的压缩格式和长度
通知浏览器数据采用的压缩格式:response.setHeader("Content-Encoding","压缩后的数据");
高速浏览器压缩数据的长度:response.setHeader("Content-Length",压缩后的数据.length+"");
G.高速浏览器图片或视频
response.setHeader("Content-type","这个参数在tomcat里conf下的web.xml里面找");
K.高速浏览器已下载
response.setHeader("Content-disposition","attachment;filename=2.jpg");
2.2.2Response.setRedirect 请求重定向
转发和重定向
1.request封装的对象是可以取到,重定向是取不出request封装的属性
2.request是服务器请求资源,url不变,重定向是根据url改变
3.request转发的path只能是项目中的path,重定向location可以是项目外的地址
4.请求转发到servlet中dopost过来就是dopost,doget请求过来就doget ,重定向到servlet都是doget执行
5.forward更高效
3.响应正文
字符输出流 getWriter()
字节输出流 getOutPutStream() 界面输出字符
服务器用编码 setCharacterEncoding(String charset)
setContentType(String type)
二.HttpServletRequest
1.请求行
getMethod(); 获得请求方式 GET
getRequestURL();返回客户端发出请求时的完整URL。//http://localhost:8080/TestWeb/request
getRequestURI(); 返回请求行中的资源名部分。 /TestWeb/request
getContextPath(); 当前应用的虚拟目录 /TestWeb
getQueryString() ; 返回请求行中的参数部分。http://localhost/test.do?a=b&c=d&e=f得到a=b&c=d&e=f
2.请求消息头
String getHeader(String name) 根据头名称得到头信息值
Enumeration getHeaderNames() 得到所有头信息name
Enumeration getHeaders(String name) 根据头名称得到相同名称头信息值
Enumeration headers=request.getHeaders("accept-language");
while (headers.hasMoreElements()){
String e=(String)headers.nextElement();
System.out.println(request.getHeader(e));
}
Enumeration names=request.getHeaderNames();
while(names.hasMoreElements()){
String e=(String) names.nextElement();
System.out.println(request.getHeader(e));
}
浏览器:
String header=request.getHeader("User-Agent");
System.out.println(header);
if(header.toLowerCase().contains("mise")){
System.out.println("IE");
}else if(header.toLowerCase().contains("firefox")){
System.out.println("火狐");
}else if(header.toLowerCase().contains("chrome")){
System.out.println("谷歌");
}else{
System.out.println("其他浏览器");
}
3.请求正文
A.获取表单数据
*** getParameter(name) 根据表单中name属性的名,获取value属性的值方法
*** getParameterValues(String name)专业为复选框取取提供的方法 String [] hobbys=request.getParameterValues("hobby");
getParameterNames() 得到表单提交的所有name的方法
Enumeration names=request.getParameterNames();
while(names.hasMoreElements()){
String name=(String) names.nextElement();
String []values=request.getParameterValues(name);
for (int i=0;values!=null&&i
}
}
*** getParameterMap 到表单提交的所有值的方法 //做框架用,非常实用
Map
for (Map.Entry
String name = m.getKey();
String[] value = m.getValue();
}
getInputStream 以字节流的方式得到所有表单数据
B.作为域对象(作用范围是在服务器间同一请求不同页面之间的参数传递)
*** void setAttribute(String name, Object value);
*** Object getAttribute(String name);
Void removeAttribute(String name);
C.与请求转发相关的方法
//得到请求转发或请求包含的协助对象
RequestDispatcher getRequestDispatcher(String path)
forward(ServletRequest request, ServletResponse response) //转发的方法
include(ServletRequest request, ServletResponse response) //请求包含
forward方法在调用后响应中没有提交的内容会被自动消除,将请求转发给其他servlet,由被调用的servlet做出响应,而原先servlet
的执行终止,include方法使得原先的servlet和转发的Servlet都可以输出响应信息,原先的还可以继续输出响应信息
D.与请求编码相关的方法:
//解决post方式编码
*****request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式
//解决get方式编码
String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);