linux 浏览器请求参数,Linux_3.2 发送请求参数(二), 代码清单3-8 向浏览器回显 - phpStudy...

3.2 发送请求参数(二)

代码清单3-8 向浏览器回显名、姓和生日

package ajaxbook.chap3;

import java.io.*;

import java.net.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class GetAndPostExample extends HttpServlet {

protected void processRequest(HttpServletRequest request,

HttpServletResponse response, String method)

throws ServletException, IOException {

//Set content type of the response to text/xml

response.setContentType("text/xml");

//Get the user's input

String firstName = request.getParameter("firstName");

String middleName = request.getParameter("middleName");

String birthday = request.getParameter("birthday");

//Create the response text

String responseText = "Hello " + firstName + " " + middleName

+ ". Your birthday is " + birthday + "."

+ " [Method: " + method + "]";

//Write the response back to the browser

PrintWriter out = response.getWriter();

out.println(responseText);

//Close the writer

out.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//Process the request in method processRequest

processRequest(request, response, "GET");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//Process the request in method processRequest

processRequest(request, response, "POST");

}

}

下面先来分析服务器端代码。这个例子使用了Java servlet来处理请求,不过也可以使用任何其他服务器端技术,如PHP、CGI或.NET。Java servlet必须定义一个doGet方法和一个doPost方法,每个方法根据请求方法(GET或POST)来调用。在这个例子中,doGet和doPost都调用同样的方法processRequest来处理请求。

processRequest方法先把响应的内容类型设置为text/xml,尽管在这个例子中并没有真正用到XML。通过使用getParameter方法从request对象获得3个输入字段。根据名、姓和生日,以及请求方法的类型,会建立一个简单的语句。这个语句将写至响应输出流,最后响应输出流关闭。

浏览器端JavaScript与前面的例子同样是类似的,不过这里稍稍增加了几个技巧。这里有一个工具函数createQueryString负责将输入参数编码为查询串。createQueryString函数只是获取名、姓和生日的输入值,并将它们追加为名/值对,每个名/值对之间由与号(&)分隔。这个函数会返回查询串,以便GET和POST操作重用。

点击Send Parameters Using GET(使用GET方法发送参数)按钮将调用doRequestUsingGET函数。这个函数与前面例子中的许多函数一样,先调用创建XMLHttpRequest对象实例的函数。接下来,对输入值编码,创建查询串。

在这个例子中,请求端点是名为GetAndPostExample的servlet。在建立查询串时,要把createQueryString函数返回的查询串与请求端点连接,中间用问号分隔。

JavaScript仍与前面看到的类似。XMLHttpRequest对象的onreadystatechange属性设置为要使用handleStateChange函数。open()方法指定这是一个GET请求,并指定了端点URL,在这里端点URL中包含有编码的参数。send()方法将请求发送给服务器,handleSta-

teChange函数处理服务器响应。

当请求成功完成时,handleStateChange函数将调用parseResults函数。parseResults函数获取div元素,其中包含服务器的响应,并把它

保存在局部变量responseDiv中。使用responseDiv的removeChild方法先将以前的服务器结果删除。最后,创建包含服务器响应的新文本节点,

并将这个文本节点追加到responseDiv。

使用POST方法而不是GET方法基本上是一样的,只是请求参数发送给服务器的方式不同。应该记得,使用GET时,名/值对会追加到目标URL

。POST方法则把同样的查询串作为请求体的一部分发送。

点击Send Parameters Using POST(使用POST方法发送参数)按钮将调用doRequest-

UsingPOST函数。类似于doRequestUsingGET函数,它先创建XMLHttpRequest对象的一个实例,脚本再创建查询串,其中包含要发送给服务

器的参数。需要注意,查询串现在并不连接到目标URL。

接下来调用XMLHttpRequest对象的open()方法,这一次指定请求方法是POST,另外指定了没有追加名/值对的“原”目标URL。

onreadystatechange属性设置为handleStateCh-

ange函数,所以响应会以与GET方法中相同的方式得到处理。为了确保服务器知道请求体中有请求参数,需要调用setRequestHeader,将

Content-Type值设置为application/x- www-form-urlencoded。最后,调用send()方法,并把查询串作为参数传递给这个方法。

点击两个按钮的结果是一样的。页面上会显示一个串,其中包括指定的名、姓和生日,另外还会显示所用请求方法的类型。

为什么要把时间戳追加到目标URL?

在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个URL。如果对每个请求的响应不同,这就会带来不好的结果。

把当前时间戳追加到URL的最后,就能确保URL的惟一性,从而避免浏览器缓存结果。

本文作者:相关阅读:

SQL Server 2008案例之CareGroup 医疗组织

Rundll32.exe文件丢失的解决办法

JavaScript 点击页面上的按纽,弹出层,背景变灰

JavaScript 计算图片加载数量的代码

Windows Vista用最小镜像引导Linux系统

javascript类式继承新的尝试

XHTML 基础教程

Windows画图程序绘制像素小女孩头像

关于Linux系统终端提示符的设置方法

PHP编程常用技巧四则

DedeCms完美的FLASH幻灯代码

HTML5结构元素和HTML5页面的交互体验

Vista不能上网也不能Ping故障解决

详解Oracle数据库中DUAL表的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值