当一个servlet被调用的时候,我们一般继承带协议的httpServlet,大方向上是下图这样

在这里面request和response起了什么作用呢?

来细究一下。

request:
1.封装了客户端所有的请求数据:

请求行,请求头,请求体(get没体)

2.而当涉及到http协议时,我们还可以利用request获取协议的信息:

获取客户端ip:request.getRemoteAddr()

获取请求方式:request.getMethod()

 获取http请求头:

String getHeader(String name) ,适用于单值头

int getIntHeader(String name),适用于单值int类型的请求头

long getDateHeader(String name) ,适用于单值毫秒型的请求头

Enumeration<String> getHeaders(String name) 适用于多只请求头

获取请求url

getRequestURL():获取请求url,等于不包含参数的整个请求路径

getScheme():获取请求协议

getServerName():获取服务器名

getServerPort():获取服务器端口号

getContextPath():获取项目名

getServletPath():获取Servlet路径

getRequestURI():获取请求URI,等于项目名加Servlet路径

getQueryString():获取请求参数

3.获取请求参数,请求参数有一个值或多个值的。

String getParameter(String name) 获取单值参数

String[] getParameterValues(String name) 获取多值参数

Enumeration<String> getParameterNames() 获取所有参数名

Map<String,String[]> getParameterMap() 获取所有参数,key为参数名,value为参数值

4.请求转发和请求包含

需要使用

RequestDispatcher rd=request.getRequestDispatcher(''/MyServlet'');

请求转发:rd.forward(request,response);

请求包含:rd.include(request,response):

有时候一个客户端要求分给A和B两个Servlet干同一件事,但是A和B都做不了,A是怎么做的呢,他和C说,我把这件事给你做,我设置设置响应头,你把响应体给我写了,你别告诉头,然后C做完了把响应体返回给A,A就拿着去交差了,这就是请求转发;而B呢,他会和C说,我自己做不了这件事,你和我一起做吧,我把响应头和响应体分分,你写一些我写一些,两者一起做完了,B拿着去交差了,这就是请求包含。

5.request域

在同一个请求内使用request.setAttribute(),request.getAttribute()来传值,前一个存,后一个取。

response

涉及到http协议时,

1.可以通过response发送状态码:200(成功),404(资源未找到),302(转发重定向,会伴着一个URL一起发送回去),304(浏览器有缓存),500(服务器端错误)

response.sendErr(int sc)

response.sendErr(int sc,String ms)

response.setStatus(int sc)

2.响应头

response.setHeader(String name,String value)

response.addHeader(String name,String value)

response.setIntHeader(String name,int value)

response.addIntHeader(String name,int value)

response.setDateHeader(String name,long value)

response.addDateHeader(String name,long value)

3.respone的两个流

ServletOutputStream:用来向客户端发送字节数据

PrintWriter:用来向客户端发送字符数据,需要设置编码

4.重定向

respone.sendRedirect("地址") 重定向

相当于

response.setHeader("Location","地址");

response.setStatus(302);

说一下Servlet里面得request和response的更多相关文章

  1. JavaWeb(一)Servlet中的request与response

    一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP ...

  2. JSP Servlet中的Request和Response的简单研究

    本文参考了几篇文章所得,参考目录如下: 1.http://www.cnblogs.com/guangshan/p/4198418.html 2.http://www.iteye.com/problem ...

  3. 【转载】Servlet中的request与response

      一.HttpServletRequest概述   1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时, ...

  4. servlet中的request和response

    request对象 1.什么是请求 a.浏览器向服务器发送数据就是请求. 一.request功能1--获取数据 1.获取浏览器相关的信息 getRequestURL方法 -- 返回客户端发出请求完整U ...

  5. Servlet中的request与response

    了解这方面的知识可以查看以下博客 https://www.cnblogs.com/zhangyinhua/p/7629221.html https://www.cnblogs.com/zhaojian ...

  6. Servlet(四):request和response对象

    Request对象:问题: 浏览器发起请求到服务器,会遵循HTTP协议将请求数据发送给服务器. 那么服务器接受到请求的数据改怎么存储呢?不但要存,而且要保证完成性. 解决: 使用对象进行存储,服务器每 ...

  7. Servlet第三篇(response;request)

    response对象 Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象.和代表响应的response对象 那么我们获取浏览器提交过来的数据,找reque ...

  8. servlet dispatcher .forward(request, response); 进入其它servlet【原】

    dispatcher .forward(request, response); 进入其它servlet 假如我们的web.xml配置如下 <servlet> <servlet-nam ...

  9. servlet中request和response

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

随机推荐

  1. Tomcat配置域名/IP访问及其中遇到的问题注意事项

    1.先在tomcat下的conf下找到server.xml文件,用记事本打开后,首先对端口号进行修改,以前一直以为8080是默认的端口号,其实默认的端口号是80 <Connector port= ...

  2. Eclipse编写ExtJS5卡死问题

    本篇以eclipse为例,导入后在编译时很容易出现eclipse的卡死现象,这主要是js文件的校验引起的. 我们可通过如下方法进行配置: 打开该项目的.project文件,删除如下配置即可: < ...

  3. 20165206 2017-2018-2 《Java程序设计》第七周学习总结

    20165206 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 MySqL:是世界上最流行的开源数据管理系统. 配置启动MySQL. 连接数据库:Conne ...

  4. NHibernate:no persister for 异常

    几种原因: 1.配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2.Web.config配置里面引用实体 <session-factory> .......... ...

  5. Redis都有哪些数据类型

    string 这是最基本的类型了,就是普通的set和get,做简单的kv缓存 hash 这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存 ...

  6. Android 开发随笔

    1 获取屏幕尺寸 WindowManager wm = this.getWindowManager();viewWidth = wm.getDefaultDisplay().getWidth();vi ...

  7. mysql时间延时注入案例

    通过Burpsuite结合sqlmap发现如下接口存在时间盲注

  8. Codeforces 666E E - Forensic Examination SA + 莫队 + 线段树

    E - Forensic Examination 我也不知道为什么这个复杂度能过, 而且跑得还挺快, 数据比较水? 在sa上二分出上下界, 然后莫队 + 线段树维护区间众数. #include< ...

  9. Codeforces 915G Coprime Arrays 莫比乌斯反演 (看题解)

    Coprime Arrays 啊,我感觉我更本不会莫比乌斯啊啊啊, 感觉每次都学不会, 我好菜啊. #include<bits/stdc++.h> #define LL long long ...

  10. python---初始sqlite3

    ***sqllite不需要单独安装,python2.5以上自带的! ***官方中文文档:https://docs.python.org/2/library/sqlite3.html ***SQLite ...