1. request

1.1 request概述

request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。

request功能

  • 封装了请求头数据
  • 封装了请求正文数据,如果是GET请求,那么就没有正文
  • request是一个域对象,可以把它当成Map来添加获取数据
  • request提供了请求转发和请求包含功能

1.2 request域方法

request是域对象!在JavaWeb中一共四个域对象,其中ServletContext就是域对象,它在整个应用中只创建一个ServletContext对象。request其中一个,request可以在一个请求中共享数据

一个请求会创建一个request对象,如果在一个请求中经历了多个Servlet,那么多个Servlet就可以使用request来共享数据

request的域方法

  • void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性
    例如:servletContext.setAttribute(“xxx”, “XXX”),在request中保存了一个域属性,域属性名称为xxx,域属性的值为XXX
    请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同

  • Object getAttribute(String name):用来获取request中的数据,当前在获取之前需要先去存储才行
    例如:String value = (String)request.getAttribute(“xxx”);,获取名为xxx的域属性

  • void removeAttribute(String name):用来移除request中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做

  • Enumeration getAttributeNames():获取所有域属性的名称

1.3 request获取请求头数据

request与请求头相关的方法有:

  • String getHeader(String name):获取指定名称的请求头
  • Enumeration getHeaderNames():获取所有请求头名称
  • int getIntHeader(String name):获取值为int类型的请求头

1.4 request获取请求相关的其它方法

request中还提供了与请求相关的其他方法,有些方法是为了我们更加便捷的方法请求头数据而设计,有些是与请求URL相关的方法:

  • int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1

  • String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null
    如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码

  • String getMethod():返回请求方法,例如:GET

  • Locale getLocale():返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用

  • String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码

  • void setCharacterEncoding(String code):设置请求编码,只对请求体有效!
    注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!

  • String getContextPath():返回上下文路径
    例如:/hello

  • String getQueryString():返回请求URL中的参数
    例如:name=zhangSan

  • String getRequestURI():返回请求URI路径
    例如:/hello/oneServlet

  • StringBuffer getRequestURL():返回请求URL路径
    例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息

  • String getServletPath():返回Servlet路径
    例如:/oneServlet

  • String getRemoteAddr():返回当前客户端的IP地址

  • String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址

  • String getScheme():返回请求协议
    例如:http;

  • String getServerName():返回主机名
    例如:localhost

  • int getServerPort():返回服务器端口号
    例如:8080

1.5 request获取请求参数

最为常见的客户端传递参数方式有两种:

  • 浏览器地址栏直接输入:一定是GET请求
  • 超链接:一定是GET请求
  • 表单:可以是GET,也可以是POST,这取决与的method属性值

GET请求和POST请求的区别:

  • GET请求:
    • 请求参数会在浏览器的地址栏中显示,所以不安全
    • 请求参数长度限制长度在1K之内
    • GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码
  • POST请求:
    • 请求参数不会显示浏览器的地址栏,相对安全
    • 请求参数长度没有限制

2. response

2.1 response概述

response是 Servlet.service方法的一个参数,类型为 avax.servlet.http. HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个 response对象,并传入给 Servlet. service()方法。 response对象是用来对客户端进行响应的,这说明在 service()方法中使用 response对象可以完成对客户端的响应工作

response对象的功能分为以下四种

  • 设置响应头信息
  • 发送状态码
  • 设置响应正文
  • 重定向

2.2 response用法

  • 设置响应行的状态码
    setStatus(int value)

  • 设置响应头

    • addHeader(String name,String value)
      addIntHeader(String name,int value)
      addDateHeader(String name,long value)
    • setHeader(String name,String value)
      setIntHeader(String name ,int value)
      setDateHeader(String name, long value)

注意了,要注意setHeader和addHeader的不同,一个是设置,一个是添加,设置只能是设置最后一个,但是添加可以添加很多个

2.3 response实现重定向

方法一:

response.setStatus(302); //设置响应行的状态码为302 重定向
response.setHeader("Location", "/Servlet/servlet2"); //设置响应头的属性 跳转到Servlet2

方法二:

response.sendRedirect("/Servlet/servlet2"); //利用response中的sendRedirect属性完成重定向

2.4 Response中应注意的细节

  • response获得的流OutputStream不需要手动关闭,Tomcat容器会帮助我们关闭
    但是InputStream需要手动关闭
  • getWriter和getOutputStream不能同时调用

3. servletContext

3.1 servletContext概述

ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象

3.2 servletContext作用

  • 是一个域对象
  • 可以读取全局配置参数
  • 可以搜索当前工程目录下面的资源文件
  • 可以获取当前工程名字(了解)

servletContext是一个域对象

  • 域对象是服务器在内存上创建的存储空间,用于在不同动态资源(servlet)之间传递与共享数据
  • 凡是域对象都有如下3个方法:
    • setAttribute(name,value);name是String类型,value是Object类型;
      往域对象里面添加数据,添加时以key-value形式添加
    • getAttribute(name);
      根据指定的key读取域对象里面的数据
    • removeAttribute(name);
      根据指定的key从域对象里面删除数据

servletContext存储数据特点

  • 全局共享,里面的数据所有动态资源都可以写入和获取
  • 服务器启动的时候创建,服务器关闭的时候销毁,因为这是全局应用程序对象,全局共享对象

3.2.1 可以读取全局配置参数

servletContext读取全局参数核心方法

  • getServletContext().getInitParameter(name);
    根据指定的参数名获取参数值
  • getServletContext().getInitParameterNames();
    获取所有参数名称列表

实现步骤

  1. 在web.xml中配置全局参数
<!-- 全局配置参数,因为不属于任何一个servlet,但是所有的servlet都可以通过servletContext读取这个数据 -->
<context-param>          <param-name>param1</param-name>          <param-value>value1</param-value>
</context-param>
<context-param>          <param-name>param2</param-name>          <param-value>value2</param-value>
</context-param>   
  1. 在动态资源servlet里面使用servletcontext读取全局参数代码
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//使用servletContext读取全局配置参数数据        //核心方法            /*getServletContext().getInitParameter(name);//根据指定的参数名获取参数值            getServletContext().getInitParameterNames();//获取所有参数名称列表*/                        //打印所有参数            //1.先获取所有全局配置参数名称            Enumeration<String> enumeration =  getServletContext().getInitParameterNames();            //2.遍历迭代器            while(enumeration.hasMoreElements()){                     //获取每个元素的参数名字                         String parameName = enumeration.nextElement();  //根据参数名字获取参数值                     String parameValue = getServletContext().getInitParameter(parameName);                    //打印                    System.out.println(parameName+"="+parameValue);           }         }

3.2.2 可以搜索当前工程目录下面的资源文件

核心方法

  • getServletContext().getRealPath(path)
    根据相对路径获取服务器上资源的绝对路径
  • getServletContext().getResourceAsStream(path)
    根据相对路径获取服务器上资源的输入字节流

3.2.3 可以获取当前工程名字

核心方法

  • getServletContext().getContextPath()
    作用:获取当前工程名字

equestresponseservletContext相关推荐

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续21)
  2. CTFshow 反序列化 web269
  3. 我的Go+语言初体验——【三、spx案例测试(附-视频)】
  4. ssm 静态资源处理器
  5. linux命令txt,Linux常用命令(非常详细!)
  6. 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(tensorflow函数)(一)
  7. iZotope RX 9 Advanced for Mac - 专业音频修复软件
  8. 小程序源码:首席省钱赚钱专家微信小程序源码下载,淘宝客 外卖侠 外卖cps 首席多多客 八合一小程序源码
  9. php文件苹果用什么软件打开,教你用什么软件打开php文件
  10. ipad一直卡在白苹果_苹果iPad投屏到macbook、Windows电脑
  11. python输出二进制数_Python计算二进制数及输出补码
  12. 学生静态网页设计作品之我的家乡
  13. 苹果笔记本什么系统_怎么把苹果笔记本系统改为win7系统?
  14. 手机的红外线功能有可能淘汰
  15. c语言之“数组”初级篇
  16. app如何更换用户头像信息呢?不妨这样做
  17. (附源码)springboot美食分享系统 毕业设计 612231
  18. 详解EBS接口开发之采购订单导入(转载)
  19. maya mel uf8_Maya Mel语言
  20. 流程工业需要什么样的工控安全?

热门文章

  1. 极限学习机(Extreme Learning Machine)ELM
  2. DB DBS 和DBMS区别
  3. 如何隐藏电脑硬盘分区
  4. 关系模式,关系,关系数据库
  5. Excel加载项没有PowerPivot选项,怎么添加
  6. 球坐标系下的两点距离公式
  7. Python 各种测试框架简介(三):nose
  8. 数据库实验4---数据完整性
  9. 程序员的内功修炼指南
  10. 微信小程序之二(创建文件目录)