Java_request和response

       浏览器地址栏中输入url,发送请求。浏览器通过http协议,按照请求的格式将数据发送给服务器(tomcat),服务器tomcat,将解析发送的数据,并存在一个对象中,HttpServletRequest接口的实现类的实例,服务器tomcat,将自己创建request实例,作为service方法实际参数传递servlet,tomcat也创建一个response对象,可以理解此对象是一个空内容,用于存放servlet准备发送给浏览器响应内容,tomcat在请求结束时,从response对象获得数据,并按照http协议编写响应的格式,发送给浏览器。一次请求,服务器创建一个request和一个response,request用于获得浏览器发送的数据,response用于设置服务器需要发送给浏览器的数据

1、request

       浏览器发送的数据,服务器tomcat获得数据,并解析,封装到request对象。

1.1、请求行

格式:请求方式 资源路径 协议/版本

例如:GET  /day08/index.html  HTTP/1.1

1.1.1、api

获得请求方式,例如:GET、POST等
request.getMethod()

获得路径//0 访问路径:http://localhost:8080/myday09/pathServlet?username=jack&password=1234

//1 获得访问全路径,不包含参数:http://localhost:8080/myday09/pathServlet
String url = request.getRequestURL().toString();
System.out.println("url --> " + url);
		
//2 获得相对web站点(%tomcat%/webapps/)路径: /myday09/pathServlet
String uri = request.getRequestURI();
System.out.println("uri --> " + uri);
		
//3 【】获得发布到tomcat下的web项目的名称:/myday09
String contextPath = request.getContextPath();
System.out.println("contextPath --> " + contextPath );
		
//4【】 获得配置servlet路径<url-pattern>: /pathServlet
String servletPath = request.getServletPath();
System.out.println("servletPath --> " + servletPath);
		
//5 url?之后的所有参数内容:username=jack&password=1234
String queryString = request.getQueryString();
System.out.println("queryString --> " + queryString);
		
//6 协议 : http
String scheme = request.getScheme();
System.out.println("scheme --> " + scheme);
		
//7 获得服务器名称,域名: localhost
String serverName = request.getServerName();
System.out.println("serverName : " + serverName);
		
//8 端口号:8080
int port = request.getServerPort();
System.out.println("port : " + port);
		
//9 获得ip地址
String ipAddr = request.getRemoteAddr();
System.out.println("ipAddr : " + ipAddr);

获得协议/版本
request. getProtocol()

1.2、请求头

request.getHeader(name) 获得指定名称头部信息

request.getIntHeader(name) 获得整形数据

request.getDateHeader(name) 获得时间数据(long类型)

request.getHeaderNames(), 获得所有的请求头名称

request.getHeaders(name) 通过指定名称,获得一组值

1.3、请求参数

post请求,表单填写表单元素<input>等,内容存放到请求体中,发送给服务器

get请求,将请求参数追加到url之后(请求行),发送给服务器

1.3.1、api

请求参数
post请求,表单填写表单元素<input>等,内容存放到请求体中,发送给服务器
get请求,将请求参数追加到url之后(请求行),发送给服务器

api
request.getParameter(name) 获得指定名称的请求参数的值
request.getParameterValues(name) 获得指定名称的请求参数所有的值
request.getParameterMap() 获得所有的值,key为请求参数的名称,value对应的值

乱码处理
post请求:request.setCharacterEncoding(“字符集”)
get请求:
new String(乱码.getBytes(“ISO-8859-1”) , “UTF-8”)
注意:tomcat7(含)之前

1.4、属性操作(域操作)

xxxAttribute (set、get、remove)
class HelloServlet extends HttpServlet{
   doGet(){
        request.setAttribute(“gf”,”薄纸”)
 
        。。。
        //获得
        Object gf = request.getAttribute(“gf”);
 }


}

1.5、RequestDispatcher 请求调度器

请求调度,在一次请求中,通知tomcat调用另一个web资源。

获得方式

servletContext.getRequestDispatcher(path),path另一个资源的路径

要求:path必须/开头,/表示web项目的根 (%tomcat%/webapps/day08/…)

request.getRequestDispatcher(path) ,path另一个资源的路径【】

要求:path可以/开头

servletContext.getNamedDispatcher(name) 不研究

1.5.1、api

forward(request,response),请求转发,一次请求,执行一个资源,请求转发到另一个资源,只显示最后一个资源的输出到浏览器的内容。
include(request,response),请求包含,一次请求,执行一个资源,包含另一个资源,将所有资源输出内容合并之后发送给浏览器。

2、response

接口:
  javax.servlet.ServletResponse,与协议无关,通用的api
  javax.servlet.http.HttpServletResponse,与协议有关的,特有的api
实现类:tomcat实现,并有tomcat创建的,传递给servlet

2.1、响应行

格式:协议/版本  状态码   对应提示信息
例如:HTTP/1.1  200  ok
设置状态码
response.setStatus(int) ,进行设置状态码
response.sendError(int ,String) ,给指定状态码,携带响应的提示信息。发送错误

2.2、响应头

api:设置 key=value

setHeader(String,String) , 设置响应头,值为字符串
setIntHeader(String, int) 设置响应头,值为整形
setDateHeader(String ,long) 设置响应头,值为时间。例如:30天, 1000L * 60 * 60* 24 * 30
设置 key=value1,key=value2
例如:response.addHeader(“set-cookie”,”值1”);response.addHeader(“set-cookie”,”值2”)


重定向(跳转):重新改变请求方向,服务器响应302,必须响应头location
手动方式
response.setStatus(302)
response.setHeader(“location”,”http://www.itheima.com”)
api
response.sendRedirect(“http://www.itheima.com”) ,底层使用302+location
总结
重定向,至少2次请求
第一次请求(get/post),第二次肯定是get请求
重定向使用至少2组response和request
location可以任意,(自己web项目,其他web项目,其他网站)

响应编码,发送响应的数据,默认编码ISO-8859-1(英文)
手动方式:
response.setHeader(“content-type”,”text/html;charset=UTF-8”)
api:
response.setContentType(“text/html;charset=UTF-8”); , 不仅仅设置编码,而且设置浏览器的查看方式和查看编码
其他api
response.setCharacterEncoding(“UTF-8”) 只能设置编码

2.3、响应体

字节流:可以处理任意数据,处理字符时繁琐,常用:文件拷贝等
ServletOutputStream  response.getOutputStream()
ServletOutputStream对象,有write方法,提供print方法
字符流:用于处理中文的
PrintWriter  response.getWriter()
PrintWriter对象,有write方法,提供print方法
思想:getOutputStream() 和 getWriter() 是否可以同时使用?不能
缓存
缓存刷新
1.缓存没有满,请求结束了,tomcat自动刷新
2.缓存满了,自动刷新
缓存大小:8kb
3.手动刷新
response.flushBuffer()
response.getWriter().flush();
提供程序性能,一次可以发送一组数据



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值