HttpServletRquest
1.获取客户机信息
URI与URL的区别,URI是包含URL的,URL一定是一个完整的路径,URI可以是一个相对路径也可以写成完整路径
getRequestURL();
getRequestURI();
getQueryString();获得get方式提交的查询串,即提交路径?后的参数。
getRemoteAddr();获取客户端IP地址
getContextPath();获取访问web工程的虚拟目录名称
getMethod();获取请求方式
getReuqestURI.subString(request.getContextPath().length());获取访问资源路径
2.获取客户机头信息
getHeader(name);根据名称获取请求的头信息内容
getHeaders(name);对于一个头信息有多个值就通过这个方法返回一个Enumeration集合
getHeaderNames();获取所有头信息的Enumeration集合
3.获取请求参数
请求参数即用户提交服务器的一些数据如链接?后的参数,表单提交的参数。
getParameter(name);获取参数值
getParameterValues(name);通过name获得多只checkbox值数组
getParameterNames();获取所有name的Enumeration集合
getParameterMap()获取请求参数的map集合
在获取请求参数后进行处理时都需要经过判断进行非空校验
如if(username!=null&&username.trim.length()>0)
处理请求中文乱码,
数据的传输都是以字节的方式实现的,需要在两端保持编码与解码的一致性。
request.setCharaterEncoding("");//对于post请求。
而get请求方式可以修改tomcat解码字符集 conf/server.xml中配置,也可以手动进行编码解码
username=URLEncoding.encode(username,"");对数据进行指定编码
username=URLDecoder.decode(username,"");对数据进行指定解码
也可以写成username=new String(username.getBytes(),"","");
特殊字符转义
+表示空格
%w2B表示+号
%2F表示正斜杠/
%3F表示问号?
%25表示百分号%
%23表示#号
%26表示&分割参数符号
利用请求域转发传递对象
HttpServletRequest和ServletContext一样都是一个数据域对象,可以用来存储数据。
两者的区别是在存活时间不一样,请求存活的时间是由响应的结束控制的,而ServletContext的村说时间是由服务器的启动与停止控制的。可以通过请求域转发传递对象,是因为请求可以在多个Servlet之间进行传递,而响应就代表一次请求的处理结束。
在AServlet中
request.setArrtibute(name,value)
RequestDispatcher dispatcher=request.getRequestDispatcher(ServletUrl);//相对路径
dispatcher.forward(request,reponse);//如果在此方法之前发生响应将数据返回给客户端此方法会报出异常。且此方法不能多次出现。
在B中
request.getArrtibute(name);
应用主要是在servlet中处理数据之后传递给JSP进行展示。要注意只有最终的Servlet程序决定响应的内容,之前的对响应内容的操作在每一次转发都会被清空。
转发与重定向的区别
1,转发一次请求一次响应,重定向两次请求两次响应
2,转发只能跳转站内程序,重定向定向任何站点
3,转发URL地址不变,重定向URL地址改变
4,转发对客户端不可见,重定向对客户端可见
RequestDispatcher
include方法
用于将Dispatcher封装的资源内容作为当前响应内容的一部分包含进来,即被含的Servlet程序的响应资源被保留,由多个Servlet程序一同生成最终响应,这一点不同于forward方法。常用来页面布局,将公共部分抽取出来,通过ResquestDispatcher的include引入更加方便维护。
request.getRequestDispatcher(.html).include(request,response);