本帖最后由 小石姐姐 于 2018-5-23 16:48 编辑
request和response的使用
1.ServletRequest存取数据:
* request作为域对象存取数据:
* setAttribute(String name,String value);
* Object getAttribute(String name);
* removeAttribute(String name);
* request的作用范围:
* 作用范围就是一次请求的范围.
* 创建和销毁:
* 创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
* 销毁:当服务器对这次请求作出了响应之后.
* public RequestDispatcher getRequestDispatcher(String path)
//
返回一个 RequestDispatcher 对象,它充当位于给定路径上的资源的包装器。
可以使用 RequestDispatcher 对象将请求转发给资源,或者在响应中包含资源。
资源可以是动态的,也可以是静态的。
指定的路径名可以是相对的,尽管它无法扩展到当前 servlet 上下文之外。
如果该路径以 "/" 开头,那么可以相对于当前上下文根解释它。
如果 servlet 容器无法返回 RequestDispatcher,则此方法将返回 null。
* 使用request获得客户机的信息:
例:
/*
public class RequestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获得请求方式:
String method = request.getMethod();
System.out.println("请求方式:"+method);
// 获得客户机的IP地址:
String ip = request.getRemoteAddr();
System.out.println("IP地址:"+ip);
// 获得用户的请求的路径:
String url = request.getRequestURL().toString();
String uri = request.getRequestURI();
System.out.println("获得请求的URL:"+url);
System.out.println("获得请求的URI:"+uri);
// 获得发布的工程名:
String contextPath = request.getContextPath();
System.out.println("工程名:"+contextPath);
}
*/
2.获取客户机信息
* getMethod(); ---获得请求方式.
* getQueryString(); ---获得请求路径后的参数.
* getRemoteAddr(); ---获得客户机的IP地址.
* getRequestURI(); ---获得请求的路径
* getRequestURL(); ---获得请求的路径
* getContextPath(); ---获得工程名
* request.getHeader(“User-Agent”);
* request.getHeader(“Referer”);
3.接受表单参数
* request.getParameter(String name);
* request.getParameterValues(String name);
* request.getParamaterMap();
--------------------------------------------------------------------------------------
2.ServletResponse
2.1.概述
* Response:代表响应的对象.从服务器向浏览器输出内容.
2.2.向页面输出内容
* response.getWriter().println("<h1>登录失败:用户名或密码错误!</h1>");
* getOutputStream();做文件下载用
注意: 这两个方法是互斥的.
做出响应的时候只能使用其中的一种流响应.
2.3常用方法:
//响应行:
* public void setStatus(int sc)
设置此响应的状态代码。此方法用于设置没有错误时的返回状态代码
(例如状态代码 SC_OK 或 SC_MOVED_TEMPORARILY)。
如果有错误,并且调用者希望调用 Web 应用程序中定义的错误页面,则应改用 sendError 方法。
//响应头:
//针对一个key对应多个value的头信息.
* public void addDateHeader(String name, long date)
用给定名称和日期值添加响应头。该日期根据距历元时间的毫秒数指定。此方法允许响应头有多个值。
* public void addHeader(String name, String value)
用给定名称和值添加响应头。此方法允许响应头有多个值。
* public void addIntHeader(String name, int value)
用给定名称和整数值添加响应头。此方法允许响应头有多个值。
//针对一个key对应一个value的头信息.
* public void setDateHeader(String name, long date)
用给定名称和日期值设置响应头。该日期根据距历元时间的毫秒数指定。
如果已经设置了头,则新值将重写以前的值。
containsHeader 方法可用于测试在设置其值之前头是否存在。
* public void setHeader(String name, String value)
用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。
containsHeader 方法可用于测试在设置其值之前头是否存在。
* public void setIntHeader(String name, int value)
用给定名称和整数值设置响应头。如果已经设置了头,则新值将重写以前的值。
containsHeader 方法可用于测试在设置其值之前头是否存在。
//响应体
* public ServletOutputStream getOutputStream() throws java.io.IOException
返回适用于在响应中编写二进制数据的 ServletOutputStream。servlet 容器不会编码二进制数据。
对 ServletOutputStream 调用 flush() 将提交响应。
可调用此方法或 #getWriter 编写正文,而不是两种方法都调用。
* public java.io.PrintWriter getWriter() throws java.io.IOException
返回可将字符文本发送到客户端的 PrintWriter 对象。
PrintWriter 使用 #getCharacterEncoding 返回的字符编码。
如果未如 getCharacterEncoding 中所述指定响应的字符编码(
即该方法只返回默认值 ISO-8859-1),
则 getWriter 会将字符编码更新到 ISO-8859-1。
2.4【文件下载的方式】
一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
二种:手动编写代码的方式完成文件的下载.
* 设置两个头和一个流:
* Content-Type :文件的MIME的类型.
* Content-Disposition :以下载的形式打开文件.
* InputStream :文件的输入流.
|
|