java核心技术2-request请求

java核心技术request

一,Request概念及常用的API

1.1-Request表示客户端向服务器发出的请求,
所有客户端信息和客户端提交的数据,均封装在Request对象中。这个请求或者对象就是request。
    request全称httpServletRequest
:浏览器输入网址的请求默认是get请求
HTTP请求分为三部分
1_请求行
2_请求头
3_请求体/请求正文/实体内容
全部发送给服务器,让服务器知道客户端的情况
1.2-Request常用API

获取客户机信息:
getRequestURL()方法返回客户端发出请求时的完整URL 
getRequestURI()方法返回请求行中的资源名部分
getQueryString()方法返回请求行中的参数部分
getRemoteAddr()方法返回发出请求的客户机的IP地址
getLocalAddr()方法返回WEB服务器的IP地址
getMethod()方法返回客户机请求方式 
getContextPath()方法返回当前web应用根目录
getServletPath()方法返回Servlet映射路径

获取请求头信息
getHeader()方法返回请求头的值

获取请求体参数
getParameter()方法通过name获得值
getParameterValues()方法通过name获得多值
getParameterNames ()方法获得所有name
二、表单提交中文乱码的原因和解决方案

2.1-为什么表单中有中文,会出现乱码呢?

客户端以utf-8将中文编码,而tomcat用iso8859-1解码,编码和解码不一致,造成乱码

图解:
这里写图片描述

2.3-解决方案

通用方式:适用于GET和POST
byte[] buf = username.getBytes(“ISO8859-1”);按ISO8859-1编码
          String username = new String(buf,”UTF-8”);按UTF-8解码
专用方式:适用于POST
      request.setCharacterEncoding(“UTF-8”);针对请求体内容按UTF-8编码
      request.getParameter(“username”)
  如果项目中GET和POST业务功能相同的话,可以在doGet()方法中调用doPost()
三、Request域对象

[Request对象既可以代表客户端向服务器的请求,也可以当做暂存数据的域对象]

3.1-什么是域对象

 域对象初学者可以理解为一个容器,可以暂存String-Object这种key-value形式的数据
 域对象保存时间是不同的,有的域对象保存时间在一次请求中;有的域对象保存时间在一次会话中;
 有的域对象保存时间在整个应用中。其中Request域对象保存时间只在一次请求中,也就是说
 一次请求完毕后,Request域对象就销毁了,一旦Request域对象销毁,那么存在其中的数据也
 就不存在了。

3.2-为什么需要域对象

 有时我们的业务,一个Servlet完成不了,需要另一个Servlet帮忙,这就是说,
我们需要在二个或多个Servlet之间传递数据,域对象就负责完成这项任务

3.3-Request对象有二层含义:

01——代表客户端向服务器的请求对象,如getParameter(“username”)
02——代表可以暂存数据的域对象,如下如示API

3.4-Request作为域对象常用的API

setAttribute():向域对象中绑定key=value形式的数据
getAttribute():从域对象中根据key找value,如果取到不到,返回NULL  
removeAttribute():从域对象中删除key对应的value

ServletContext和request两个域对象的比较

这里写图片描述

四、Request转发

4.1-多个Servlet配合工作

 有些时候,一个Servlet不能很好的完成业务工作,需要另一
 个Servlet来配合。这就是说,很有可能一个Servlet需要将
 流程交由另一个Servlet,此时就要用转发或重定向这二个
 技术了,这里我们谈Request转发。

4.2-要转发必须得用Request.getRequestDispatcher().forward()方法

request.getRequestDispatcher(配置的虚拟路径或者是html和jsp页面).forward(request, response);

4.3-转发是服务器内部的事,与浏览器无关,所以浏览器的地址栏不会变,
原来浏览器以什么方式提交数据,转发到另一个Servlet依然执行对应的
doXxx方法。

浏览器以POST提交—第一个Servlet::doPost—第二个Servlet::doPost
浏览器以GET提交—第一个Servlet::doGet—第二个Servlet::doGet

!注意:转发不限于Servlet之间,Servlet也可以转发到HTML和JSP页面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值