使用Servlet处理HTTP请求.docx
《使用Servlet处理HTTP请求.docx》由会员分享,可在线阅读,更多相关《使用Servlet处理HTTP请求.docx(4页珍藏版)》请在冰豆网上搜索。
使用Servlet处理HTTP请求
使用Servlet处理HTTP请求
当服务器接收到一个HTTP请求,判断请求的是静态网页还是动态网页
如果是静态网页则由服务器查询资源文件并响应给客户端,如果是动态,交由web容器处理
web容器找到对应的Servlet,调用HttpServlet的service(),再调用一个实例对象的service(),再具体调用doXXX方法
如果能处理,就将响应XMLHttpResponse对象的属性处理,不能处理就将请求转发(需要得到一个具体路径的RequestDispatcher对象)。
具体方法如下:
请求行相关方法:
getMethod()获得请求行的方法,如:
get,post等
getRequestURI()获得请求的统一资源标识符(相对的,不包含QueryString)(URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relativeURL,则是针对另一个absoluteURL,本质上还是绝对的。
),例如/lovo/index.html
getRequestURL()获得统一资源定位符(用于绝对位置定位,即不知道根目录也能定位,可以有?
和后面的数据)例如http:
//127.0.0.1:
8080/lovo/index.html?
name=string。
getProtocol()获取协议及版本。
getContextPath()获得上下文路径,即虚拟路径,web应用的供外部访问的根路径,如http:
//localhost:
8080/sun的/sun
getServletPath()获取Servlet的映射路径。
请求头相关方法:
getHeader(Stringname)返回指定的请求头的值,如request.getHeader("Accept");访问Accept的HTTP头;request.getHeader("Host")输出:
192.168.0.1:
8080;request.getHeader("Referer");request.getHeader("Accept-Language");request.getHeader("Accept-Encoding");request.getHeader("User-Agent");request.getHeader("Connection");request.getHeader("Cookie")
getHeaderNames()该方法获得一个Enumeration包含特定请求中接受到的所有请求头的名称
getIntHeader(Stringname)获取特定请求头的值,并转化为INT类型
getDateHeader(Stringname)获得特定请求头的值,并转化为Date类型
消息体相关方法:
getParameter(Stringname)获取表单参数的值
getParameterValues(StringparameterName)获取同一个参数名的多个参数值返回字符串数组对象
getParameterNames()以枚举的方式返回请求中所有的表单参数名列表
请求转发和请求范围:
请求转发:
getRequestDispatcher(Stringpath)返回给定路径的RequestDispatcher对象
getNamedDispatcher(Stringname)返回某个名称的Servlet的RequestDispatcher对象
forward(ServletReqeust,ServletResponse)派发请求和响应对象到RequestDispatcher对象所确定的新资源
include(ServletReqeust,ServletResponse)类似forward()不过有一些限制,该方法包含服务器端得资源,被包含的资源不能改变响应状态代码或设置头信息
请求范围:
请求范围仅仅作用在与一个请求相关的两个资源之间,如果需要继续传递到第三个或者更多的Servlet,应当继续调用HttpServletRequest对象的setAttribute()和getAttribute()方法
附:
request方法大全:
协议:
request.getProtocol()
输出:
HTTP/1.1服务器信息getServletConfig().getServletContext().getServerInfo()
输出:
JavaServerWebDevKit/1.0EA(JSP1.0;Servlet2.1;Java1.2;WindowsNT5.0x86;java.vendor=SunMicrosystemsInc.)客户端IP:
request.getRemoteAddr()
输出:
192.168.0.106客户端主机名:
request.getRemoteHost()
输出:
abc编码:
request.getCharacterEncoding()
输出:
GB2312所发送的字节数:
request.getContentLength()
输出:
-1数据类型:
request.getContentType()
输出:
nullAuthorization头:
request.getAuthType()
输出:
basic或者digest请求类型:
request.getMethod()
输出:
通常是GET或者POST。
但偶尔也会出现HEAD,PUT,Delete,OPTIONS,或者TRACE.URL中的附加路径信息:
request.getPathInfo()
输出:
URL中Servlet路径之后、查询字符串之前的那部分。
request.getPathTranslated()
映射到服务器实际路径之后的路径信息。
request.getQueryString()
这是字符串形式的附加到URL后面的查询字符串,数据仍旧是URL编码的。
在Servlet中很少需要用到未经解码的数据,一般使用getParameter访问各个参数。
request.getRemoteUser()
如果提供了Authorization头,则代表其用户部分。
它代表发出请求的用户的名字。
request.getRequestedSessionId()
输出SessionIdrequest.getRequestURI()
请求URLrequest.getServletPath()
URL中调用Servlet的那一部分,不包含附加路径信息和查询字符串。
request.getHeader("Accept")
访问Accept的HTTP头。
request.getHeader("Host")
输出:
192.168.0.1:
8080request.getHeader("Referer")
request.getHeader("Accept-Language")request.getHeader("Accept-Encoding")request.getHeader("User-Agent")request.getHeader("Connection")request.getHeader("Cookie")
返回协议名称:
request.getScheme()
输出:
HTTPWeb服务器名字:
request.getServerName()
输出:
192.168.0.1服务器监听的端口:
request.getServerPort()
输出:
8080原文地址:
获取request里的所有参数名及其参数值作者:
橡皮擦
request里有两个方法
request.getParameterMap();
request.getParameterNames();
我想用这两种方法获取。
1。
用request.getParameterNames();
Enumerationenu=request.getParameterNames();
while(enu.hasMoreElements()){
StringparaName=(String)enu.nextElement();
System.out.println(paraName+":
"+request.getParameter(paraName));
}2。
request.getParameterMap();
访问URL:
http:
//127.0.0.1:
8080/test.jsp?
a=1&b=2&c=3
test代码:
Mapmap=request.getParameterMap();
SetkeSet=map.entrySet();
for(Iteratoritr=keSet.iterator();itr.hasNext();){
Map.Entryme=(Map.Entry)itr.next();
Objectok=me.getKey();
Objectov=me.getValue();
String[]value=newString[1];
if(ovinstanceofString[]){
value=(String[])ov;
}else{
value[0]=ov.toString();
}for(intk=0;k<value.length;k++){
System.out.println(ok+"="+value[k]);
}
}