JSP内置对象:request和response


先看一篇转载的文章(转自:http://blog.sina.com.cn/s/blog_7c35df9b010116kj.html)

request对象时Jsp中重要的对象,每个request象封装着一次用户请求,并且所有的请求参数都封装在request对象中,因此request对象时获取用户请求参数的重要途径

除此之外,request可代表本次请求范围,所以还可以用于操作request范围的属性。
1.获取请求头/请求参数
Web应用是请求/响应架构的应用,浏览器发送请求时通常总会附带一些请求头,还可能包含一些请求参数发给服务器,服务器端负责解析请求头/请求参数的就是JSP或Servlet,而Jsp和Servlet取得参数的途径就是request。request是HTTPServletRequest接口的实例,他提供了一下几个方法来获取请求参数。
  • String getParameter(String paramName);获取paramName请求参数值。
  • Map getParameterMap();获取所有请求参数名和参数值所组成的Map对象。
  • Enumeration getParameterNames();获取所有请求参数名所组成的Enumeration对象。
  • String[] getParameterValues(String name);paramName请求参数的值,当参数有多个值时该方法将返回多个值所组成的参数。
HttpServletRequest提供了如下方法来访问请求头。
  • String getHeader(String name);根据指定请求头的值。
  • java.util.Enumeration getHeaderNames();获取所有请求头的名称。
  • java.util.Enumeration getHeaders(String name);获取指定请求头的多个值。
  • int getIntHeader(String name);获取指定请求头的值,并将该值转化为整数值。
对于开发人员来说,请求头和请求参数都是由用户发送到服务器的数据,区别在于请求头通常由浏览器自动添加,因此一次请求总是包含若干请求头;而请求参数则通常需要开发人员控制添加,让客户端发送请求参数通常分为两种情况。
  • GET方式的请求:直接在浏览器地址蓝输入访问地址发送的请求或提交表单发送请求时,该表单对应的form元素没有设置method属性,或设置method属性为get,这几种请求都是GET方式的请求。GET方式的请求会将请求参数名和值转换成字符串,并附加在源URL之后,因此可以在地址栏中看到请求参数的名和值。且GET请求传送的数据量较小,一般不能大于2KB.
  • POST方式的请求:这种方式通常使用提交表单(由form HTML元素表示)的方式来发送,且需要设置form元素的mothod属性为post。POST方式传送的数据量较大通常认为POST请求参数的大小不受限制,但往往取决于服务器的限制,POST请求传输的数据量总比GET传输的数据量大。而且POST方式发送的请求参数以及对应的值放在HTML HEADER中传输,用户不能在地址蓝里看到请求参数,安全性相对较高。
提示:并不是每个表单域都会生成请求参数,而是有name属性的表单域才生成请求参数。关于表单域和请求参数的关系遵循如下4点:
  • 每个有name属性的表单域对应一个请求参数。
  • 如果有多个表单域有相同的name属性,则多个表单域只能生成一个请求参数,只是该参数有多个值。
  • 表单域的name属性指定请求参数名,value指定请求参数的值。
  • 如果表单域设置了disable="disabled"属性,则该表单域不再生成请求参数。
2.操作request范围的属性
HttpServletRequest还包含如下两个方法,用于设置和获取request范围的属性。
  • setAttribute(String attName,Object attValue):将attValue设置成request范围的属性。
  • Object getAttribute(String attName):获取request范围的属性。
3.执行forward或include
request还有一个功能就是执行forward和include,也就是代替JSP所提供的forward和include动作指令。
HttpServletRequest类提供了一个getRequestDispatcher(String path)方法,其中path就是希望forward或者include的目标路径,该方法返回RequestDispatcher,对象提供了如下两个方法。
  • forward(ServletRequest request,ServletResponse response):执行forward。
  • include(ServletRequest request,ServletResponse response):执行include。

request

request用来封装客户端的请求信息,包括请求标头、请求方法、请求参数、使用者IP等等信息。所以只要是有关客户端的信息,都可以通过request对象来取得。
request对象的主要方法:
  getParameterNames():取得客户端所发出的请求参数名称.
  getParameter():可以让您指定请求参数名称,以取得对应的设定值.
  getServerName():请求的服务器.
  getProtocol():使用协议.
  getMethod():请求方法.
  getServerPort():请求端口号.
  getContextPath():Context路径. context理解为上下文比较好(也就是一个项目)
  getServletPath(): Servlet路径.
  getRequestURI():URI路径.
  getQueryString():查询字符串.
  getRemoteAddr():使用者主机IP.
  getRemotePort():使用者使用端口号.
  例子:  http://localhost:8080/myjsp/requestdemo.jsp?name=john&nick=johncn
  对应的信息为:
  请求的服务器: localhost 
  使用协议: HTTP/1.1 
  请求方法: GET 
  请求的端口号: 8080 
  Context路径: /myjsp 
  Servlet路径: /requestdemo.jsp 
  URI路径: /myjsp/requestdemo.jsp 
  查询字符串: name=john&nick=johncn 
  使用者主机IP: 127.0.0.1 
  使用者使用端口号: 1060

response

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。
response的常用方法:
  setHeader():是一个通用的标头设定方法,您可以用它来设定任何「名称/值」的标头.
  setIntHeader():是专门用来设定整数值标头的版本.
  setDateHeader():是setHeader()的Date设定版本,第二个参数是设定Date的Long数值,0表示GMT 1970/1/1 00:00。
  (Note:以上3个函数用来设置HTTP协议的表头,必须对HTTP协议有些了解才能正确使用,我现在也不清楚).
  setStatus():是用来设定回应的状态码,例如404 Not Found,HttpServletResponse类中提供了一些助忆常数设定,例如SC_NOT_FOUND就是表示404状态码(可以在Servlet API文件中查询相关的助忆常数).
  sendError():会根据服务器的预设错误网页回报方式显示错误讯息.
  sendRedirect():设置重定向页面.
  getWriter():取得PrintWriter对象,由它来写出响应至服务器的本体信息.

1.输出文本和HTML代码

利用的是response提供的Write()方法

Response.Write("peterbbs");

Response.Write("< br />");输出换行符号

string table ="

........";

Response.Write(table);//Output html



2.输出图像

Response输出图像是通过输出该图像的二进制数据实现的实现方法BinaryWrite();

具体方法:

(1) 将图像的虚拟地址转换为物理地址

(2) 定义文件流 读取二进制数据 并保存

(3) 调用方法BinaryWrite();

(4) 设置当前的Web窗体页的输出格式为“image/pjpeg”,此格式只能输出文件后缀名".jpg"的图像

(5) 调用Response对象的End()方法,中止页面的其他输出。


        string path = Request.MapPath("~/image.gif");

        FileStream fs = new FileStream(path,FileMode.Open,FileAccess.Read);

        byte[] imageData = new byte[(int)fs.Length];

        fs.Read(imageData, 0, (int)fs.Length);

        Response.BinaryWrite(imageData);

        Response.End();//使用这个东西的时候,你会发现你再response的任何write方法都失效了


3.页面间的跳转

response.redirect的方法


4.页面间的参数传递

直接就response.redirect("######.aspx ? id =10"); 就可以了,需要记住这个格式,很固定的。
获取传递过来参数就直接调用Request.Param 就可以获取这个值了


5.当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。解决方法是在需要接收request对象内容的页面加一句

request.setCharacterEncoding("GB18030");
这里的GB18030是根据你自己的页面编码来决定的。

6.什么情况下为响应?什么情况下为请求?

简单一句话,请求就是好像你向某个人借东西,响应就是他把这个东西借给你!!!


转载自:http://blog.csdn.net/zhangweimlh/article/details/4408916

你可能感兴趣的:(java,web开发)