HTTP协议(4)request介绍_飞影在线的博客-程序员资料

技术标签: java  Eclipse  Servlet  HTML  

http协议是基于请求和响应设计的协议,我们在Servlet程序中可以获取用户的请求,以及给客户端响应数据。
而request对象可以用来接收和封装请求携带过来的数据
用户在每次请求Servlet的时候,都会去执行Servlet对象中的service方法。而在service方法上接收2个参数:

service(  ServletRequest request   , ServletResponse  response )
ServletRequest:是处理用户的请求,用户请求的所有信息都在ServletRequest对象中封装着。
ServletResponse: 它是专门给用户响应数据的。
 
request 还是 response 它们在设计的时候都是围绕http协议中规定的请求和响应的格式而设计的方法。

【1:request获得请求行信息和ip地址】


常用方法:
getMethod()
获取请求的方法名称
getRemoteAddr()
获取请求IP地址
getLocalPort()
  获取服务器端口
getProtocol()
获取协议
getRequestURI()
获取统一资源标识符,用来标识一个资源,资源路径
getRequestURL()
获取统一资源定位符,是一种具体的URI,可以用来标识一个资源.并且指明了如何定位一个资源



URI和URL的区别:
URL:http://localhost:8080/servlet/request2
URI:/servlet/request2
uri的表示范围 > url.

url 是一种特殊的uri, url相当于是uri的子类


【示例】

创建一个Request2Servlet.java文件


(含注释)

package com.flying.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Request2Servlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		// 获取方法的名称
		String method = request.getMethod();
		System.out.println(method);
		// 获取服务器端口
		int port = request.getLocalPort();
		System.out.println(port);
		// 获取请求地址
		String remoteAddr = request.getRemoteAddr();
		System.out.println(remoteAddr);
		// 获取协议
		String protocol = request.getProtocol();
		System.out.println(protocol);
		// 获取url
		StringBuffer url = request.getRequestURL();
		System.out.println(url);
		// 获取uri
		String uri = request.getRequestURI();
		System.out.println(uri);

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

【web.xml配置(修改是便于访问的地址缩短)】

  <servlet>
    <description></description>
    <display-name>request2</display-name>
    <servlet-name>request2</servlet-name>
    <servlet-class>com.flying.servlet.Request2Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>request2</servlet-name>
    <url-pattern>/request2</url-pattern>
  </servlet-mapping>

在浏览器访问:http://localhost:8080/servlet/request2   回车

控制台显示:

GET
8080
0:0:0:0:0:0:0:1 【注释:我的电脑是ipv6协议】
HTTP/1.1
http://localhost:8080/servlet/request2
/servlet/request2


【2:request获取头信息】


注意:浏览器不同,请求头信息也各有不同。


常用方法:
getHeader(name)方法 --- String :
通过头信息中key,获取请求头的指定的内容。
getHeaderNames()方法:
返回的内容是请求头中的key的枚举类型,遍历之后可以获取所有请求头的信息。


【示例】
 获取请求相关头信息


创建Request3Servlet.java

package com.flying.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Request3Servlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		// 获取浏览器类型
		String agent = request.getHeader("user-agent");
		System.out.println(agent);
		// 获取主机
		String host = request.getHeader("host");
		System.out.println(host);
		// 获取所有请求头的信息
		Enumeration<String> headerNames = request.getHeaderNames();
		while (headerNames.hasMoreElements()) {
			String key = (String) headerNames.nextElement();
			String value = request.getHeader(key);
			System.out.println(key + "..." + value);
		}

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

【web.xml配置修改如下】

  <servlet>
    <description></description>
    <display-name>request3</display-name>
    <servlet-name>request3</servlet-name>
    <servlet-class>com.flying.servlet.Request3Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>request3</servlet-name>
    <url-pattern>/request3</url-pattern>
  </servlet-mapping>


测试
注意:浏览器不同,请求头信息也各有不同,因此使用不同的浏览器获取的头信息也不同。

在浏览器访问:http://localhost:8080/servlet/request3   回车

控制台显示:

Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
localhost:8080
accept...text/html, application/xhtml+xml, image/jxr, */*
accept-language...zh-CN
user-agent...Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
accept-encoding...gzip, deflate
host...localhost:8080
connection...Keep-Alive


【3:doGet方法获取请求参数】


Request最重要的功能就是用来获取请求数据。

常用方法:
getParameter(String name)
getParameterMap()
getParameterValues(String name)
getParameterNames()



【示例】
需求:通过一个表单提交数据,然后由servlet获取所有表单提交的参数。

新建一个Request4Servlet.java

package com.flying.servlet;

import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Request4Servlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		Map<String, String[]> map = request.getParameterMap();
		Set<Entry<String, String[]>> entrySet = map.entrySet();
		for (Entry<String, String[]> entry : entrySet) {
			String key = entry.getKey();
			String[] value = entry.getValue();
			System.out.println(key + "..." + Arrays.toString(value));
		}

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}


【web.xml中的配置修改】

  <servlet>
    <description></description>
    <display-name>request4</display-name>
    <servlet-name>request4</servlet-name>
    <servlet-class>com.flying.servlet.Request4Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>request4</servlet-name>
    <url-pattern>/request4</url-pattern>
  </servlet-mapping>

新建一个注册html页面(register.html)


body内的内容如下

	<form action="/servlet/request4" method="get">
		用户名:<input type="text" name="username"/><br/>
		性别:<input type="radio" name="sex" value="male"/>男
			<input type="radio" name="sex" value="female"/>女<br/>
		兴趣爱好:<input type="checkbox" name="hobby" value="shuijiao"/>睡觉
		<input type="checkbox" name="hobby" value="shangwang"/>上网
		<input type="checkbox" name="hobby" value="jianshen"/>健身
		<input type="checkbox" name="hobby" value="lvyou"/>旅游
		<br/>
		<input type="submit" value="提交"/>
	</form>

测试

在浏览器访问:http://localhost:8080/servlet/register.html   回车

用户名填写:lisi(中文会出现控制台乱码)

性别选择:男

兴趣爱好全打钩

然后点击:提交


控制台显示:

username...[lisi]
sex...[male]
hobby...[shuijiao, shangwang, jianshen, lvyou]


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baodong1985/article/details/77978407

智能推荐

Ryu基本操作的REST API调用示例_lym152898的博客-程序员资料

import urllib2import jsondef get_all_switches(): url = "http://127.0.0.1:8080/v1.0/topology/switches" req = urllib2.Request(url) res_data = urllib2.urlopen(req) res = res_data.read()

初次发EI会议,所要了解的东西_ei会议一论审稿通过_-Harvey的博客-程序员资料

初次想投 EI 会议的论文小白观看。EI会议认可度如何,如何搜索有哪些 EI 会议,如何查看会议是否被 EI 收录,EI会议对你你的稿件有几种申请状态

Java参数验证 Validation_java validation_Phantom___的博客-程序员资料

有些时候一个对象会在多个场景使用,不同场景对该对象中的参数校验需求不同,即有些场景不对参数进行校验。比如注册时,我们要填写出生日期参数,但是登录时并不需要该参数所以在校验中引入分组的概念参考文章(分组校验&amp;自定义校验)...

tf.image.sample_distorted_bounding_box_tz_zs的博客-程序员资料

____tz_zs此函数为图像生成单个随机变形的边界框。函数输出的是可用于裁剪原始图像的单个边框。返回值为3个张量:begin,size和 bboxes。前2个张量用于 tf.slice 剪裁图像。后者可以用于 tf.image.draw_bounding_boxes 函数来画出边界框。sample_distorted_bounding_box(    image_size,   

CSS 其他属性_shenwen5225的博客-程序员资料

文章目录属性描述版本cursor规定要显示的光标的类型(形状)CSS2opacity设置一个元素的透明度级别CSS3content与 :before 以及 :after 伪元素配合使用,来插入生成内容CSS2counter-increment递增或递减一个或多个计数器CSS2counter-reset创建或重置一个或多个计数器CS...

uniapp 小程序实现中间突起tabbar_小程序tabbar中间凸起_倘若hfl的博客-程序员资料

先看下效果实现步骤1.先引入uview ui,不会的可以看下我另外一篇文章,写的很详细uniapp 中uview-ui的使用教程https://blog.csdn.net/hu104160112/article/details/120076812?spm=1001.2014.3001.55012.创建tabbar 组件及页面3.pages.json文件中配置{ "easycom": { "autoscan": true, "custom": { "^uni-(.*)":

随便推点

使用dbms_metadata.get_ddl遇到ORA-31603_yywzgh的博客-程序员资料

使用dbms_metadata.get_ddl遇到ORA-31603建了一个外部表,想看看这个表的信息,一查就报错了:SQL> select dbms_metadata.get_ddl('TABLE','ext_case1') from dual;ERROR:ORA-31603: object "ext_case1" of type TABLE not found

Vue加入购物车动效_vue 加入购物车动画_hello、深海鱼的博客-程序员资料

在项目中,很多都有购物车模块,需要添加购物车动效。部分vue代码 &lt;!-- 运动的小球 --&gt; &lt;div id="points"&gt; &lt;div class="pointOuter pointPre"&gt; &lt;div class="point-inner"&gt;&lt;/div&gt; &lt;/div&gt; &lt;div clas

JNI,JVMTI_jni jvmti_a1647010108的博客-程序员资料

学习java assist本文章仅作学习用依赖和文档添加pom依赖 &lt;dependency&gt; &lt;groupId&gt;org.javassist&lt;/groupId&gt; &lt;artifactId&gt;javassist&lt;/artifactId&gt; &lt;version&gt;3.27.0-GA&lt;/version&gt; &lt;/dependency&gt;...

SpringBoot通过HttpClient方式调用Restful接口_时光无声_l的博客-程序员资料

前言  HttpClient相比于传统jdk自带的URLConnection,增加了易用性和灵活性,它不仅是客户端发送http请求变得容易,而且也方便了开发人员测试接口,提高了开发的效率。HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。由于公司业务发展,需要...

1.[Platform bus]-(对platform_get_resource的理解)[转]_con丶的博客-程序员资料

转自:https://www.cnblogs.com/sky-heaven/p/4800848.html。在linux使用platform_driver_register() 注册 platform_driver 时, 需要在 platform_driver 的probe() 里面知道设备的中断号, 内存地址等资源。这些资源的描述信息存放在 resource 数据结构中, 相同的资源存放在一...

【零基础】CentOS 7 64位系统下编译Hadoop2.7.0_centos源码编译hadoop2.7.0_wackycrazy的博客-程序员资料

因为官网下载下来的Hadoop安装包是x86,32位的,64位需要自己编译。编译环境操作系统:CentOS 7 64位(需要连接互联网)Hadoop源代码版本:hadoop-2.7.0-src.tar.gz1、安装基本应用[python] view plaincopyyum -y install  svn   ncurses-devel   gcc*

推荐文章

热门文章

相关标签