首页 > 其他分享 >ServletContext、request、response

ServletContext、request、response

时间:2022-10-09 22:02:38浏览次数:80  
标签:name request getServletContext 获取 ServletContext response String


一、上下文对象

1、概述

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

2、如何获取

通过servlet中的init方法中的servletConfig对象获取

ServletContext、request、response_服务器

httpservlet中直接获取ServletContext servletContext   = getServletContext();

3、作用

1.      是一个域对象

域对象是服务器在内存上创建的存储空间,用于在不同动态资源(servlet)之间传递与共享数据,凡是域对象都有如下3个方法

setAttribute(name,value);name是String类型,value是Object类型;

往域对象里面添加数据,添加时以key-value形式添加

getAttribute(name);

根据指定的key读取域对象里面的数据

removeAttribute(name);

根据指定的key从域对象里面删除数据

2.      可以读取全局配置参数

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读取全局参数代码


ublic 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.      可以搜索当前工程目录下面的资源文件

getServletContext().getRealPath(path),根据相对路径获取服务器上资源的绝对路径

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

4.      可以获取当前工程名字(了解)


publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取工程名字,getServletContext().getContextPath() response.getOutputStream().write(("工程名字:"+getServletContext().getContextPath()).getBytes()); }


二、请求对象request

1、概述

我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。service()方法中写了根据请求方式的不同调用doget()和dopost().

service方法中的request的类型是ServletRequest,而doGet/doPost方法的request类型HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加强大

request运行流程

ServletContext、request、response_java_02

2、抓取http包,分别抓请求行,请求头,请求体 (post请求方式才会有)

ServletContext、request、response_servlet_03

请求行

获得客户端的请求方式---​​String​​​ ​​getMethod​​()

web应用的名称---​​String​​​ ​​getContextPath​​() 

获取URL---StringBuffer getRequestURL(); 如:http://localhost:8080/request/info

获取URI---String getRequestURI(); 如:/request/info

获得访问的客户端IP地址---request.getRemoteAddr()

获取get请求参数---String getQueryString();

请求头

获取所有请求头名称


//所有请求头名称 Enumeration<String> headerNames = request.getHeaderNames(); //遍历所有请求头 while (headerNames.hasMoreElements()){ //名称 String s = headerNames.nextElement(); //名称对应的值 String requestHeader = request.getHeader(s); System.out.println(requestHeader); }


获取此次访问来源referer

String referer= request.getHeader("referer");

只有通过以下方式请求才会获取referer

  • 直接用<a href="">
  • submit提交表单
  • s提交的表单(get \post)

请求体

ServletContext、request、response_servlet_04

转发和重定向

ServletContext、request、response_服务器_05

三、响应对象

设置响应行

response.setState(Int code)

设置响应头

add是添加新的

addHeader(String name,String value)

addIntHeader(String name,int value)

addDateHeader(String name,date)

set是设置已经存在的

setHeader(String name,String value)

setIntHeader(String name,int value)

setDateHeader(String name,Date value)

设置响应体

1、通过write()方法来写

response.getWriter().write("hello 测试");

默认情况下写的中文会发生乱码,把写的内容存到缓冲区使用的时ISO8859,而ISO8859不支持中文,所以乱码


//在存之前设置存放的编码 response.setCharacterEncoding("UTF-8"); //然后告知浏览器使用的编码 response.setHeader("Content-Type","text/html;charset=UTF-8"); response.getWriter().write("hello 测试"); 注意 上面可以只告知浏览器使用的编码即可,tomcat看到了设置成了utf-8 在存储时也会使用utf-8 或者直接用封装好的方法 response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("hello 测试");


2、通过OutPutStream()来写

注意getWrite()和getOutputSteam不能同时调用


response.setContentType("text/html;charset=UTF-8"); response.getOutputStream().write("hello 测试".getBytes());


ServletContext、request、response_请求头_06

重定向

servlet1当中没有这个资源,告诉你去找servlet2,再去发送一个请求到servlet2,要访问两次服务器,状态码是302,浏览器地址栏已经发生变化


response.setStatus(302); response.setHeader("location","/userInfo"); 每次都要写状态码,和location比较麻烦,就封装了一个方法 response.sendRedirect("/userInfo");


定时刷新重定向

response.setHeader("refresh","5;url=http://www.baidu.com")

url的值为5秒后要去跳转的地址

标签:name,request,getServletContext,获取,ServletContext,response,String
From: https://blog.51cto.com/u_11334685/5741708

相关文章