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页面