servlect 处理http请求

Servlet接受请求信息

HttpServletRequest对象主要用于获取由客户端发送过来的请求头、参数、文件、数据等。Servlet存在的主要目的就是处理请求

GET/POST提交方法

浏览器向Web服务器发送HTTP请求 
用户在网页上点击一个超连接 
用户提交在网页上填写好的表单 
用户在浏览器地址栏中输入URL地址并回车

默认情况下都是使用HTTP协议的GET方法提交请求

定制浏览器行为 
<FORM name=‘loginForm‘ method=‘POST‘ action=‘/loginServlet‘>

GET/POST提交方法区别

何时使用GET/POST方法: 
1:请求一个静态页面或图形文件时使用GET方法,因为仅仅需要发送文件名; 
2:发送大数据的时候,使用POST方法; 
3:上传文件时,使用POST方法; 
4:发送用户名、密码或其他保密信息的时候使用POST方法

获取HTTP协议请求行

HttpServletRequest对象的如下方法访问 
getMethod():获取HTTP的请求方法,例如GET、POST等
getRequestURI():获取请求的URI资源 
getRequestURL():获取请求的URL,包含协议名、服务器名或IP、端口号和请求资源但不包括查询字符串参数 
getQueryString():获取请求URL后面的查询字符串 
getProtocol():获取HTTP的协议名和版本号 
getContextPath():获取请求URI资源的上下文路径 
getServletPath():获取Servlet的映射路径

获取HTTP协议请求头

HTTP请求头用于告诉服务器客户端使用什么软件以及客户端想要服务器如何返回请求的信息 
HttpServletRequest对象的如下方法访问 
getHeader(name):返回指定的请求头的值 
getHeaders(name) :返回一个Enumeration(枚举)包含请求头中的所有值 
getHeaderNames():特定请求中接受到的所有请求头的名称 
getIntHeader(name):获取特定请求头的值,并将其转化为int类型 
getDateHeader(name):获取特定请求头的值,并将其转化为Date类型

获取所有请求头

Enumeration enum = request.getHeaderNames(); 
while (enum.hasMoreElements()) { 
String headerName = (String) enum.nextElement(); 
String headerValue = request.getHeader(headerName); 
out.print("<b>"+headerName + "</b>: "); 
out.println(headerValue + "<br>"); 
}

获取浏览器类型

String userAgent = request.getHeader("User-Agent");
if((userAgent != null) && (userAgent.indexOf("MSIE")!=-1) ) { 
message = "您正在使用MicroSoft IE浏览器"; } else if(
(userAgent != null) && (userAgent.indexOf("Firefox")!=-1) ) {
message = "您正在使用FireFox火狐浏览器"; }

获取请求消息体

消息体可以是普通文本也可以是二进制数据
HttpServletRequest对象可以使用通用的方法来获取表单数据

获取表单数据

HttpServletRequest对象用下列方法以访问请求参数
Enumeration enum = request.getParameterNames(); 
while (enum.hasMoreElements()) { 
String pName = (String) enum.nextElement();
String[] pValues = request.getParameterValues(pName);
out.print("<b>"+pName + "</b>: ");
for (int i=0;i<pValues.length;i++) {
out.print(pValues[i]);

out.print("<br>"); 
}

获取原始表单数据

POST请求不仅可以传输文本信息还可以传输二进制数据 
getParameter()方法能获取二进制数据吗?
使用HttpServletRequest对象提供的getInputStream()或getReader()方法直接访问表单数据
利用输入流分析原始的输入 
去除所有的请求头信息、处理请求消息体中的原始字节、甚至还会把字节写到服务器上的一个文件里

请求派发

每个客户的请求可以传递给很多Servlet以及Web应用程序中的其它资源
整个过程完全是在服务器端完成 
不需要任何客户端浏览器的行为 
不需要在客户端浏览器和服务器端之间传递特殊信息 
通过javax.servlet.RequestDispatcher对象实现 
重定向让客户端浏览器来完成,而请求派发是在服务器端做工作

请求派发的实现

调用ServletRequest对象的方法: 
getRequestDispatcher(path):方法返回给定路径的RequestDispatcher对象 
getNamedDispatcher(name) :返回某个名称的Servlet的RequestDispatcher对象

RequestDispatcher对象提供了两种方法:
forward(ServletRequest, ServletResponse):派发请求和响应对象到RequestDispatcher 对象所确定的新资源(Servlet、JSP或者HTML等) 
include(ServletRequest, ServletResponse)该方法关键是能包含服务器端的资源 
forward()方法意味着把请求和响应派发给别的资源后,就不会再去做任何处理了
nclude() 方法意味着请求别人帮助处理请求,但这并不是完全移交,只是暂时地把控制交给别人

请求范围
变量可以保存在请求范围中
在请求范围之外就不能进行访问了

HttpServletRequest对象主要用于处理分析请求
默认情况下,使用HTTP协议的GET方法提交请求 
HTML表单通过“method”属性使浏览器使用HTTP POST方法 
GET/POST方法适用于不同场合
HttpServletRequest对象中最常用的方法是获取请求表单参数
HttpServletRequest对象也可以得到请求中参数的原始字节数据 
重定向和请求派发之间最大的区别在于,重定向让客户端浏览器来完成,而请求派发是在服务器端做工作
HttpServletRequest可以把一个对象用名字绑定在请求范围内,并且进行访问和删除

时间: 2024-08-26 13:06:27

servlect 处理http请求的相关文章

http请求与响应全过程

HTTP 无状态性 HTTP 协议是无状态的(stateless).也就是说,同一个客户端第二次访问同一个服务器上的页面时,服务器无法知道这个客户端曾经访问过,服务器也无法分辨不同的客户端.HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP 请求. HTTP 持久连接       HTTP1.0 使用的是非持久连接,主要缺点是客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销.因为同一个页面可能存在多个对象,所以非持久连接可

HTTP 400 错误 - 请求无效 (Bad request)

在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装: 2)前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型: 解决方案: 1)对照字段名称,类型保证一致性 2)使用stringify将前端传递的对象转化为字符串    data: JSON.stringify(param)  ;

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

POST请求 参数 使用body

主要是记录一下,post请求,参数请放到body里: 虽然放到params里,也可以,但是并不合理,因为url的长度是有限制的

http网络请求 基础

http://tuijian.hao123.com:80/index.html scheme(协议前缀): host(主机):port(端口):path(资源路径) 核心类: URL:网络统计资源定位符 ,标识是网络中唯一资源 HttpURLConnection 网络资源连接类,可以打开网络连接,读取网路资源,上传网路资源等 功能方法:getinputStream()来获取网路资源字节读取流 getContentLength()来获取网路资源字节数 getPesponseCode() 来获取网路

HTTP请求报文详解

HTTP Request Header 请求头 Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept-Charset 浏览器可以接受的字符编码集. Accept-Charset: iso-8859-5 Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型. Accept-Encoding: compress, gzip Accept-Language 浏览器可接受的语言 Ac

学习笔记12JS异步请求

*一般用JS来监听按钮事件,都应该先监听页面OnLoad事件. *Js写在哪里,就会在页面解析到哪里执行. 异步请求:所谓异步请求,就是使用JS来监听按钮点击事件,并且发送请求,等到回复后,再使用JS来进行页面跳转,或动态改变页面.使用场合:当请求是ashx是,都可以使用异步方法,页面就无需刷到ashx的一个空白页面或者不用于展示的页面了. *使用jquery发送异步请求:$("#按钮ID").Click(fuction(){ $.get( "页面URL.ashx"

接口测试,添加请求头的时候,大小写一定要正确

今天同事碰到了一个问题,就是他用robot framework+requests写接口测试用例的时候,post一个json数据的时候,发送出去的数据一直是data=<empty>,明明有数据啊,通过log打印也是没问题. 最终发现是添加头的时候,将Content-Type写成了content-type. 我刚开始也没看出来问题在哪里,费了好长时间才搞定.说一下如何排查出的这个问题吧,以往写Content-Type的时候,还真没注意到大小写的问题,jmeter应该不区分的.于是今天一直没想到是这

Spring MVC HTTP请求数据绑定

package com.springmvc.controller; import com.springmvc.model.UserInfo; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Controller; import org.springframework.uti