HttpServletQequest对象的学习

HttpServletRequest

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。HttpServletRequest的对象时域对象。

常用方法:

获得客户机信息

getRequestURL方法返回客户端发出请求时的完整URL。

getRequestURI方法返回请求行中的资源名部分。

getQueryString 方法返回请求行中的参数部分。就是地址栏中?后面的内容

getRemoteAddr方法返回发出请求的客户机的IP地址

getRemoteHost方法返回发出请求的客户机的完整主机名

getRemotePort方法返回客户机所使用的网络端口号

getLocalAddr方法返回WEB服务器的IP地址。

getLocalName方法返回WEB服务器的主机名

getMethod得到客户机请求方式

获得客户机请求头

getHeader(name)方法

根据一个请求头的名称回去这个请求头的内容。获取的是单一的请求头内容

例:request.getHeader(“Accept-Encoding”)

getHeaders(String name)方法

getHeaderNames方法

代码演示:

//获取单一的请求头内容,根据请求头名称

String value = request.getHeader("Accept-Encoding");

System.out.println(value);//gzip, deflate

//获取所有请求头名称的枚举

System.out.println("所有请求头");

Enumeration en = request.getHeaderNames();

while(en.hasMoreElements()){

String headerName = (String) en.nextElement();

System.out.println(headerName+": "+request.getHeader(headerName));

}

System.out.println("=========================");

//获取重名的请求头内容,一个请求头名称可能对应多个不同的请求头内容

en = request.getHeaders("Accept-Encoding");

while(en.hasMoreElements()){

String headerValue = (String) en.nextElement();

System.out.println(headerValue);

}

获得客户机请求参数(客户端提交的数据)

getParameter(name)方法

getParameterValues(String name)方法

getParameterNames方法

getParameterMap方法  //做框架用,非常实用

getInputStream

代码演示:

//获取客户端请求参数---->例如:客户端提交的数据

//以客户端的表单form.html提交上来的数据就是请求参数

public class HttpServletRequestDemo2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

test1(request);

}

//获取只单一名称输入域的参数

private void test1(HttpServletRequest request) {

//这里客服端输入的数据都是String类型的数据

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

String password = request.getParameter("password");

String code = request.getParameter("code");

System.out.println(username+"\t"+password+"\t"+code);

}

//获取具有重名的输入域参数

public void test2(HttpServletRequest request){

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

//表单中有密码确认一项,所以对应的参数名称相同,获取所有参数值的数组

String[]  passwords = request.getParameterValues("password");

if(passwords != null&&passwords.length>0){

for (String password : passwords) {

System.out.println(password);

}

}

String code = request.getParameter("code");

System.out.println(username+"\t"+code);

}

//做框架使用,获取客户端请求参数的Map集合,其中key:是参数名称,value:是参数值数组

public void test3(HttpServletRequest request){

Map<String,String[]> map = request.getParameterMap();

//遍历map集合

Set<Map.Entry<String,String[]>> en = map.entrySet();

for (Map.Entry<String,String[]> entry : en) {

System.out.println(entry.getKey()+": "+Arrays.toString(entry.getValue()));

}

}

//做框架使用,获取客户端请求参数的Map集合,其中key:是参数名称,value:是参数值数组

public void test4(HttpServletRequest request) throws Exception{

Map<String,String[]> map = request.getParameterMap();

//创建一个默认初始化值的JavaBean

User user = new User();

System.out.println("封装前:"+user);

//遍历map集合

Set<Map.Entry<String,String[]>> en = map.entrySet();

for (Map.Entry<String,String[]> entry : en) {

String paraName = entry.getKey();

String[] paraValues = entry.getValue();

//将得到的参数数据存储到JavaBean中:内省的过程

PropertyDescriptor pd = new PropertyDescriptor(paraName, User.class);

Method methodSet = pd.getWriteMethod();

//这里是为了兼容invoke方法JDK1.4版本,1.4版本:invoke(Objet,Object[])

//当传入的是的参数值有多个时,应将这个数组强转成一个Object对象使用1.5版本

//也可以将这个数组当成一个Object[]对象也可以

//如果参数值只有一个,1.4版本和1.5版本都可以使用

if(paraValues.length==1){

methodSet.invoke(user, paraValues);

}else{

//如果参数值不止一个时,要强转

methodSet.invoke(user,(Object)paraValues);

//或者创建一个新的Object[]

//methodSet.invoke(user, new Object[]{paraValues});

}

}

System.out.println("封装后:"+user);

}

//使用第三方工具类BeanUtils,可以大大减少代码

public void test5(HttpServletRequest request) throws Exception{

Map<String,String[]> map = request.getParameterMap();

//创建一个默认初始化值的JavaBean

User user = new User();

System.out.println("封装前:"+user);

//内省:通过BeanUtils的populate方法将map的数据存储到user中

BeanUtils.populate(user, map);

System.out.println("封装前:"+user);

}

//获取正文的内容:通过getInputStream()方法,只有当客户端的请求方式是post方式才可以

public voidtest6(HttpServletRequest request) throws IOException{

InputStream in = request.getInputStream();

byte[] buf = new byte[1024];

int len = 0;

while((len = in.read(buf))!=-1){

System.out.println(new String(buf,0,len));

}

}

注意:客服端请求参数的中文乱码问题,当请求的参数中有中文,反馈给服务器程序可能会出现乱码

public class HttpServletRequestDemo3 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//post请求方式使用的编码方式是根据客户端使用的编码表,通过setCharactetEncoding("UTF-8"),通常默认都是UTF-8码表,但只能在

request.setCharacterEncoding("UTF-8");

//得到的字符串就是通过UTF-8进行查表得到的

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

//get方式默认使用的是ISO-8859-1编码表进行编码

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

byte[] vbuf = paraValue.getBytes("ISO-8859-1");

String result = new String(vbuf,"UTF-8");

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

java Web Servlet学习笔记-1 HttpServletQequest对象的学习的更多相关文章

  1. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  2. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  3. 20145230《java学习笔记》第七周学习总结

    20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...

  4. JavaScript:学习笔记(10)——XMLHttpRequest对象

    JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...

  5. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  6. 《python基础教程(第二版)》学习笔记 类和对象(第7章)

    <python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person:    def setName(self,name):        self.name=n ...

  7. Java Web Servlet知识点讲解(一)

    一.Web应用架构 如图所示: HTTP协议:一个简单的请求一响应协议,通常运行在TCP之上,它指定了客户端可能发送给服务器什么样的信息以及得到什么样的响应. JDBC:Java语言中用来规范客户端程 ...

  8. 【学习笔记】JavaScript的基础学习

    [学习笔记]JavaScript的基础学习 一 变量 1 变量命名规则 Camel 标记法 首字母是小写的,接下来的字母都以大写字符开头.例如: var myTestValue = 0, mySeco ...

  9. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

随机推荐

  1. JS的this总结(上)-call()和apply()

    JS的this总结(上)-call()和apply() ​ 相信很多人在学习JavaScript的过程中,都会了解到this,而大部分人都会特意去网络上搜一下相关资料,大部分的文章都有这么一句话: t ...

  2. 【集美大学1411_助教博客】alpha阶段后 成绩

    团队作业7 成绩(助教对团队排名) 团队名称 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 全组讨论的照片 团队成员在Alpha阶段的角色和具体贡献 合计 排 ...

  3. 201521123107 《Java程序设计》第12周学习总结

    第12周-流与文件 1.本周学习总结 2.书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文 ...

  4. 201521123008《Java程序设计》第七周实验总结

    1.本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public bool ...

  5. Android中显示和隐式Intent的使用

    显示启动activity                                                                                         ...

  6. 201521123007《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  7. 201521123012 《Java程序设计》第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1.本次PTA作业题集异常 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  8. RAID磁盘阵列

    什么是RAID 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),简称磁盘阵列.其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组, ...

  9. 手机管家iPhoneX的适配总结

    WeTest 导读 随着苹果发布会的结束,Xcode的GM版也上线了,也意味着iPhoneX适配之旅的开始. 一.设计关注篇 注意设计的基本原则:(苹果呼吁的) 规格原帖:https://develo ...

  10. 蓝色巨人IBM

    1911年IBM的前身CRT建立,在中华民国时期就与中国有很多商业合作,中国中央银行,中国银行,黄埔造船厂,建国后直到中美建交,IBM与中国的关系越来越紧密,今晚看了一遍关于蓝色巨人的视频,收益匪浅. ...