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文件引用方式及其同步执行与异步执行

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp74   任何以appendChild(scriptNode) 的方式引入 ...

  2. Spring Boot-------项目搭建及注解

    Spring Boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需 ...

  3. ADO.NET的学习

    ADO.NET的几个对象 Connection:管理数据库的连接 Command:对数据库执行命令 DataReader:数据流读取器,返回的数据都是快速的且只是"向前"的数据流. ...

  4. 数据绑定技术一:GridView控件

    在网站或应用程序中,要显示数据信息,可用到ASP.NET提供的数据源控件和能够显示数据的控件. 一.数据源控件 数据源控件用于连接数据源.从数据源中读取数据以及把数据写入数据源. 1.数据源控件特点 ...

  5. easyUI创建人员树

    最近做了一个树状的下拉列表,在这里记录一下,以后可以直接使用 项目中的树状下拉列表是用来选择人员用的,具体实现展示如下: 先说一说功能,左边的人员数是提供选人的,当点击中间的按钮,选中的人员会直接移到 ...

  6. Linux shell中的竖线(|)——…

    原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...

  7. Python 异常处理

    Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...

  8. 微信小程序中的微信支付js代码和流程详解

    微信支付流程 步骤 (一)获取用户的信息 (二)统一下单(返回的prepay_id用于第(三)步的请求参数) (三)发起支付请求 操作(这边假设你已经获得了用户的openId) (一).获取用户ope ...

  9. 【Alpha】Daily Scrum Meeting——Day3

    站立式会议照片 1.本次会议为第三次 Meeting会议: 2.本次会议于早上9:40在陆大楼召开,本次会议为30分钟讨论昨天的任务完成情况以及接下来的任务安排. 每个人的工作分配 成 员 昨天已完成 ...

  10. 201521123028《Java程序设计》第4周学习总结

    1. 本周学习总结 2. 书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看. 对上周PTA的实验5-3中的矩形和圆形类做注释. Q2.面向对象 ...