分享
 
 
 

如何处理HTTP POST/GET请求

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

前面一节中已经讲过Servlet通过下面的方法来提供服务:

实现service方法。

实现HttpServlet的doMethod方法(doGet、doDelete、doOptions、 doPost、doPut、doTrace)。 通常,service方法用来从客户请求(request)中提取信息,访问扩展资源,并基于上面的信息提供响应(response)。

对于HTTP Servlets,正确提供响应的过程是首先填写响应(response)的头信息,然后从响应(response)中得到输出流,最后向输出流中写入内容信息。响应(response)头信息必须最先设置。下面将描述如何从请求(request)中获得信息和产生HTTP响应(response)。

取得客户端请求

一个HttpServletRequest对象提供到达HTTP 头部数据,也允许你获取客户端的数据。怎样获取这些数据取决于HTTP端请求方法。不管用任何HTTP方式,你都可以用 getParameterValues方法返回特定名称的参数值。对于用 HTTP GET 请求的方式,这个getQueryString方法将会返回一个可以用来分析的值。

客户端请求(request)包含了从客户端传递到Servlet的数据。所有的请求(request)都实现了ServletRequest接口。这个接口定义了一些方法访问下面的信息,如表14-1所示。

表14-1 ServletRequest接口方法

类 型 描 述 对 应 方 法

参数,用来在客户端和Servlet之间传送信息 getAttribute(String name)

getAttributeNames()

getInputStream()

getParameter(String name)

getParameterMap()

getParameterNames()

getParameterValues(String name)

对象值属性,用来在Servlet容器和Servlet

之间,或者协作的Servlet之间传递信息 removeAttribute(String name)

setAttribute(String name, Object o)

有关请求使用的协议信息,

客户端和服务器在请求中的调用 getContentLength()

getContentType()

getProtocol()

getReader()

getRealPath(String path)

getRemoteAddr()

getRemoteHost()

getRequestDispatcher(String path)

有关请求使用的协议信息,

客户端和服务器在请求中的调用 getScheme()

getServerName()

getServerPort()

isSecure()

有关localization的信息 getCharacterEncoding()

getLocale()

getLocales()

setCharacterEncoding(String env)

下面的代码段示范了如何使用request中的方法获得客户端信息。

Enumeration params = request.getParameterNames();

String paramName = null;

String[] paramValues = null;

while (params.hasMoreElements()) {

paramName = (String) params.nextElement();

paramValues = request.getParameterValues(paramName);

System.out.println("\nParameter name is " + paramName);

for (int i = 0; i < paramValues.length; i++) {

System.out.println(", value " + i + " is " + paramValues[i].toString());

}

}

HTTP Servlets使用HTTP request对象(HttpServletRequest),它包含了request URL、HTTP头信息、查询字符串,等等。HTTP request URL 包括几个部分:

http://:?

一般情况下:

requestURI = contextPath + servletPath + pathInfo

Context path:通过getContextPath方法获得。

Servlet Path:通过getServletPath方法获得。

PathInfo:通过getPathInfo方法获得。

如表14-2所示。

表14-2 路径的对应

Request Path Path Elements

/catalog/help/feedback.jspContextPath: /catalog ServletPath:

/help/feedback.jsp PathInfo: null

提供HTTP响应

响应(response)包含了在服务器和客户端之间传递的数据。所有的响应(response)都实现了ServletResponse接口。这个接口定义了一些方法提供给开发人员使用,如表14-3所示。

表14-3 ServletResponse接口方法

类 型 描 述 对 应 方 法

获得向客户端发送数据的输出流 发送字符流:getWriter()

发送字节流:getOutputStream()

指示响应返回的内容类型(例如:text/html)

已经注册的内容类型名称保存在IANA

(Internet Assigned Numbers Authority) setContentType(java.lang.String type)

指出是否是缓冲输出。默认情况下写入输出的

内容被立即发送到客户端。使用缓冲后写入输出的内容先

不发送到客户端,这样Servlet有更多的时间设置相应的

状态码和头信息,或者转移到其他的Web资源 flushBuffer()

getBufferSize()

isCommitted()

reset()

resetBuffer()

setBufferSize(int size)

setContentLength(int len)

设置localization信息 getCharacterEncoding()

getLocale()

setLocale(java.util.Locale loc)

HTTP response类(HttpServletResponse)有一些代表HTTP头信息的域:

状态码用来指出响应(response)失败的原因。

Cookies在客户端存储应用相关的信息,有时cookies用来维护和标识用户的session。

Servlet首先设置响应(response)头信息,包括响应(response)的内容类别和缓冲区大小,然后在 doGet方法中从响应(response)获得PrintWriter ,最后向输出中写入HTML代码,调用close()方法提交这次对客户端的响应(response)。示范代码如下:

public void doGet (HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{

// 设置头信息

response.setContentType("text/html");

response.setBufferSize(8192);

PrintWriter out = response.getWriter();

// 向response中输出

out.println("<html>" +

"<head><title>+

messages.getString("TitleBookDescription")

+</title></head>");

...

out.println("</body></html>");

// 关闭输出流

out.close();

}

下面介绍一个HTTP Servlet处理POST方式的例子(T111)

本文选自飞思图书《精通Java核心技术》

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有