一、HttpServletRequest
1. 简介
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
request就是将请求文本封装而成的对象,所以通过request能获得请求文本中的所有内容,请求头、请求体、请求行。
2.相关方法
- 请求头
String getHeader(String name) //根据头名称得到头信息值
long getDateHeader(java.lang.String name) //获得指定头内容Date
int getIntHeader(java.lang.String name) //获得指定头内容int
Enumeration getHeaderNames() //得到所有头信息name
Enumeration getHeaders(String name) //根据头名称得到相同名称头信息值
- 请求体/请求正文
表单获取相关
String getParameter(name) //根据表单中name属性的名,获取value属性的值方法
String[] getParameterValues(String name) //专为复选框取取提供的方法
getParameterNames() //得到表单提交的所有name的方法
Map<String , String[]> getParameterMap() //得到表单提交的所有值的方法 //做框架用,非常实用
getInputStream //以字节流的方式得到所有表单数据
非表单数据相关
oid setAttribute(String name, Object value);
Object getAttribute(String name);
Void removeAttribute(String name);
请求转发相关
RequestDispatcher getRequestDispatcher(String path)//得到请求转发或请求包含的协助对象
forward(ServletRequest request, ServletResponse response) //转发的方法
include(ServletRequest request, ServletResponse response) //请求包含
编码相关
//解决post方式编码
request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式
//解决get方式编码
String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);
- 请求行
getMethod(); //获得请求方式
getRequestURL(); //返回客户端发出请求时的完整URL
getRequestURI(); //返回请求行中的资源名部分。
getContextPath(); // 当前应用的虚拟目录
getQueryString() ; //返回请求行中的参数部分。
getProtocol();
getScheme();
getServerName();
getServerPort();
getContextPath();
getServletPath();
getRemoteAddr();
3. 应用
- 各种表单输入项数据的获取
-
request对象实现请求转发
- 请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。
- request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。
- request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。
二、HttpServletResponse
1. 简介
代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
getOutputStream和getWriter方法
- 用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象
- getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。 会抛异常。
- Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
- Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。
应用
- 向客户端输出中文数据
- 用OutputStream(字节流)发送数据
- 用PrintWriter(字符流)发送数据
- 文件下载
//通过路径得到一个输入流
String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女.jpg");
FileInputStream fis = new FileInputStream(path);
//创建字节输出流
ServletOutputStream sos = response.getOutputStream();
//得到要下载的文件名
String filename = path.substring(path.lastIndexOf("\\")+1);
//设置文件名的编码, 如果文件名是中文,需要URLEncoder
filename = URLEncoder.encode(filename, "UTF-8");//将不安全的文件名改为UTF-8格式
//告知客户端要下载文件
response.setHeader("content-disposition", "attachment;filename="+filename);
response.setHeader("content-type", "image/jpeg");
//执行输出操作
int len = 1;
byte[] b = new byte[1024];
while((len=fis.read(b))!=-1){
sos.write(b,0,len);
}
sos.close();
fis.close();
- 生成验证码:BufferedImage
- 定时刷新页面
- 利用Refresh刷新到其他组件
response.setHeader("Refresh", "3;URL=index.html");
- 重定向跳转
- 方式一:手动方案
response.setStatus(302); //状态码302就代表重定向
response.setHeader("location","http://www.baidu.com"); - 方式二:使用封装好的,通过response.sendRedirect("http://www.baidu.com");
特点:服务器告诉浏览器要跳转的页面,是浏览器主动去跳转的页面,浏览器知道,也浏览器的地址栏中url会变,是浏览器重新发起一个请求到另外一个页面,所以request是重新发起的,跟请求转发不一样。
- 方式一:手动方案
Servlet知识点
网友评论