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. HashMap 底层算法分析

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp72 Hash算法HashMap使用Hash算法,所以在解剖HashMap ...

  2. CSS display和visibility的用法和区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt408 大多数人很容易将CSS属性display和visibility混淆,它 ...

  3. Spring集成RabbitMQ-连接和消息模板

    ConnectionFactory ConnectionFactory是RabbitMQ服务掌握连接Connection生杀大权的重要组件 有了它,就可以创建Connection(org.spring ...

  4. js数组、内置对象、自定义对象

    [js中的数组] 1.数组的基本概念? 数组是在内存空间中连续存储的一组有序数据的集合 元素在数组中的顺序,称为下标.可以使用下表访问数字的每个元素. 2.如何声明一个数组? ① 使用字面量声明: 在 ...

  5. 第二次作业:编写一个四则运算的"软件"

    - 题目: 请编写一个能自动生成小学四则运算题目的 “软件”. 让程序能接受用户输入答案,并判定对错. 最后给出总共 对/错 的数量. 需求分析: ●基本功能 ●实现100以内的加法 ●实现100以内 ...

  6. 四则运算GUI

    一.题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web,手机上的),成 ...

  7. 微信小程序简单入门理解

    简单的小程序示例结构: (一):理解小程序结构app.js,app.json,app.wxss ①app.js,app.json是小程序结构必要的部分,app.wxss可选择 ②app.js用于创建小 ...

  8. 201521123051 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 使用工具:百度脑图 1.2 使用常规方法总结其他上课内容.(多态) 多态的定义:父类的引用指向子类的对象. 父类的引用:一是指父类变 ...

  9. 201521123027 《JAVA程序设计》第一周学习总结

    一.本周学习总结 经过第一周的JAVA学习,初步学习到下列重点知识: 1.JAVA SE的主要部分:JVM.JRE.JDK.与JAVA语言: 2.JAVA虚拟机实验跨平台运行JAVA程序: 3.JAV ...

  10. 201521123072《java程序设计》第十周学习总结

    201521123072<java程序设计>第十周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异 ...