java核心技术2-request请求

来源:互联网 发布:博拉网络ipo最新消息 编辑:程序博客网 时间:2024/06/06 02:02

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和POSTbyte[] 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 0
原创粉丝点击