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. Day-12: 进程和线程

    进程和线程 在操作系统看来,一个任务就是一个进程,而一个进程内部如果要做多个任务就是有多个线程.一个进程至少有一个线程. 真正的并行执行任务是由多个CUP分别执行任务,实际中是由,操作系统轮流让各个任 ...

  2. C# 委托、匿名方法、lambda简介

    在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个First不 ...

  3. 第二次项目冲刺(Beta阶段)5.19

    1.提供当天站立式会议照片一张 会议内容: ①新成员加入,熟悉团队. ②制定新一轮的任务计划. 2.每个人的工作 (1)工作安排 队员 今日进展 明日安排 王婧 #42文件分类改为按个人分类 #42文 ...

  4. 201521123019 《Java程序设计》第7周学习总结

    1. 本章学习总结 2. 书面作业 Q1.ArrayList代码分析 1.1解释ArrayList的contains源代码 源代码如下: public boolean contains(Object ...

  5. 201521123005 《java程序设计》 第六周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  6. 201521123016 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过? ...

  7. 201521123064 《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1:代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  8. 201521123016《Java程序设计》第10周学习总结

    1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 只有执 ...

  9. PL/SQL客户端连接虚拟机(linux)下的oracle服务器配置

    虚拟机上linux装了oracle数据库服务器,想通过windowspl/sql客户端连接到服务器上,虚拟机的网络连接方式我设置为host-only.     去oracle官方网站下载instant ...

  10. 内置open()函数对外部文件的操作

    >>> file=open('c://333.csv','r') 一些基本打开关闭操作 >>> s=file.read() >>> print s ...