equestresponseservletContext
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():返回上下文路径
例如:/helloString getQueryString():返回请求URL中的参数
例如:name=zhangSanString getRequestURI():返回请求URI路径
例如:/hello/oneServletStringBuffer getRequestURL():返回请求URL路径
例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息String getServletPath():返回Servlet路径
例如:/oneServletString getRemoteAddr():返回当前客户端的IP地址
String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址
String getScheme():返回请求协议
例如:http;String getServerName():返回主机名
例如:localhostint 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)
- addHeader(String name,String value)
- setHeader(String name,String value)
setIntHeader(String name ,int value)
setDateHeader(String name, long value)
- setHeader(String name,String 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形式添加
- setAttribute(name,value);name是String类型,value是Object类型;
- getAttribute(name);
根据指定的key读取域对象里面的数据
- getAttribute(name);
- removeAttribute(name);
根据指定的key从域对象里面删除数据
- removeAttribute(name);
servletContext存储数据特点
- 全局共享,里面的数据所有动态资源都可以写入和获取
- 服务器启动的时候创建,服务器关闭的时候销毁,因为这是全局应用程序对象,全局共享对象
3.2.1 可以读取全局配置参数
servletContext读取全局参数核心方法
- getServletContext().getInitParameter(name);
根据指定的参数名获取参数值 - getServletContext().getInitParameterNames();
获取所有参数名称列表
实现步骤
- 在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>
- 在动态资源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相关推荐
最新文章
- 《评人工智能如何走向新阶段》后记(再续21)
- CTFshow 反序列化 web269
- 我的Go+语言初体验——【三、spx案例测试(附-视频)】
- ssm 静态资源处理器
- linux命令txt,Linux常用命令(非常详细!)
- 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(tensorflow函数)(一)
- iZotope RX 9 Advanced for Mac - 专业音频修复软件
- 小程序源码:首席省钱赚钱专家微信小程序源码下载,淘宝客 外卖侠 外卖cps 首席多多客 八合一小程序源码
- php文件苹果用什么软件打开,教你用什么软件打开php文件
- ipad一直卡在白苹果_苹果iPad投屏到macbook、Windows电脑
- python输出二进制数_Python计算二进制数及输出补码
- 学生静态网页设计作品之我的家乡
- 苹果笔记本什么系统_怎么把苹果笔记本系统改为win7系统?
- 手机的红外线功能有可能淘汰
- c语言之“数组”初级篇
- app如何更换用户头像信息呢?不妨这样做
- (附源码)springboot美食分享系统 毕业设计 612231
- 详解EBS接口开发之采购订单导入(转载)
- maya mel uf8_Maya Mel语言
- 流程工业需要什么样的工控安全?