博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb request 学习笔记
阅读量:3904 次
发布时间:2019-05-23

本文共 2496 字,大约阅读时间需要 8 分钟。

request请求由请求头,请求行,请求体组成。

请求行

获取请求方式 get post

String method = request.getMethod();

获取请求资源 URL URI

StringBuffer requestURL = request.getRequestURL();		String requestURI = request.getRequestURI();

获取get请求参数

String queryString = request.getQueryString();

获取当前web应用名称

String contextPath = request.getContextPath();

请求头

获取所有请求头名称

Enumeration
headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) {
System.out.println(headerNames.nextElement()); }

获取指定请求头内容

String header = request.getHeader("accept-language");

打印所有的请求头名称和内容

Enumeration
headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) {
String nextElement = headerNames.nextElement(); System.out.println(nextElement+": = "+request.getHeader(nextElement)); }

其中referer 代表的是请求从哪个页面发送过来的。

通过以下方式获取referer

  1. 直接用<a href=>
  2. 用Submit 或 提交表单 (get 或 post)
  3. 用javascript 提交的表单(get 或 post)
    通过以下形式不能获取referer
  4. 从收藏夹链接
  5. 单机主页或自定义网址
  6. 在浏览器中直接输入网址

请求体

获取一个值

String name = request.getParameter("username");

获取多个值

String[] hobby = request.getParameterValues("hobby");System.out.println(Arrays.toString(hobby));

获取所有请求参数名称

Enumeration
parameterNames = request.getParameterNames();while(parameterNames.hasMoreElements()){
System.out.println("name= "+parameterNames.nextElement());}

获取所有请求参数

Map
parameterMap = request.getParameterMap(); for (Map.Entry
entry : parameterMap.entrySet()) {
System.out.println(entry.getKey()); System.out.println(Arrays.toString(entry.getValue())); }

什么时候使用get方式和post方式

当发送的参数不需要写到数据库当中时使用get,发送的参数需要保存到数据库当中时使用post。form一般提交数据使用post

造成中文乱码的原因

发送请求时,会对参数进行编码,编码使用的是ISO8859-1,不支持中文,所以乱码。

通用解决方法:
1. 获取对应的参数
2. 通过IOS8859-1 转回二进制位,再以UTF-8的形式转成字符串
存在的问题
每一个参数都必须转回二进制位,再转为字符串
适用于post请求的转码方式

使用BeanUtils 将request传来的参数封装成对象

Map
parameterMap = request.getParameterMap();User u = new User();try {
BeanUtils.populate(u, parameterMap);} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block e.printStackTrace();}

重定向与请求转发的区别

重定向是浏览器找sevlet1,通过设置响应,告诉浏览器,再让浏览器发送请求到sevlet2

请求转发是浏览器找servlet1,在servlet1当中直接转发给servlet2,不再告诉浏览器,它之发送一次请求,浏览器当中地址栏还是servlet1,不会发生变化
设置请求转发

RequestDispatcher disp = request.getRequestDispatcher("/Servlet2");disp.forward(request, response);

request域对象

在一次请求过程中,request是共享的,在一个servlet当中设置参数,转发到另一个servlet,取出的是同一个request对象。

生命周期
创建 发送一个请求时创建一个request对象
销毁请求结束,浏览器给出响应,销毁
作用范围 一次请求当中

客户端地址与服务器地址

客户端地址写的时候需要写上web应用名称/应用名称/资源

服务器地址不需要写web应用名称

转载地址:http://jdaen.baihongyu.com/

你可能感兴趣的文章
用移动硬盘安装win7
查看>>
MinGW与Cygwin
查看>>
用WEB标准进行开发
查看>>
[译]关于Android图形系统的一些事实真相
查看>>
J2ME下的Zlib/Gzip/Zip压缩相关
查看>>
Android 模拟器中AVD路径的修改(WIN7)
查看>>
Cygwin 的安装配置
查看>>
Cygwin基本命令的使用方法
查看>>
Java本地接口(JNI)编程指南和规范(第二章)
查看>>
有关使用xsl输出csv格式文档的实践小结
查看>>
在Ubuntu 12.04 为 Eclipse 添加快速启动项
查看>>
GCC强大背后
查看>>
Android x86模拟器Intel Atom x86 System Image配置与使用方法
查看>>
shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)
查看>>
【分享】手把手教你使用U盘安装Ubuntu系统
查看>>
Ubuntu下adb无法识别android设备的解决方法
查看>>
使用U盘安装Ubuntu系统的实践小结
查看>>
编译cscope-15.8a遇到的问题与解决方案
查看>>
ubuntu下海信Hisense E920 usb连接不上的处理与adb的连接
查看>>
findbugs的ant脚本实践
查看>>