response和request作用,重定向,get和post的区别

response(响应)request(请求)对象的作用, 重定向的特点, 请求转发和包含的特点与区别, 请求转发和重定向的区别,get和post的区别

JSP的response隐藏对象在转换bai为Servlet之后,对应于duHttpServletResponse型态对象,HttpServletResponse对象是zhi有关于对客户端请求之dao响应,您可以利用它来设定一些要响应的讯息,例如标题信息、响应状态码等.

response 响应对象

response是Servlet.service方法的一个参数,类型为HttpServletResponse

1.response的生命周期

创建时机:客户端每访问一次,请求对象就会创建一个,响应对象就创建一个

​ 当service方法执行完毕后 response对象和request对象销毁

2.response的作用

1.设置响应头信息

2.发送状态码

3.设置响应正文

4.设置重定向(典型面试问题)

3.response设置响应头信息

方法:setHeader(“headName”,“headValue”);

1.设置响应头信息

utf-8编码解析setHeader(“content-type”, “text/html;charset=utf-8”);//设置浏览器文本类型为text/html

2.设置浏览器刷新相关的

setHeader(“refresh”,“5”);//浏览器5秒刷新一次

setHeader(“refresh”,“5;http://www.baidu.com”);//浏览器5秒后刷新到百度页面

3.设置浏览器不缓存

response.setHeader(“expires”, “0”);

response.setHeader(“pragma”, “no-cache”);

response.setHeader(“cache-control”, “no-cache”);

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对象,由它来写出响应至服务器的本体信息.

4.response发送状态码

方法:response.setStatus(200):设置状态码;

response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。

5.response设置响应正文

方法:response.getWriter(); //字符流

​ response.getOutputStream(); //字节流

注意:(1)使用完成后 要注意关闭流

​ (2)字符流和字节流不能同时使用 如果同时使用触发异常

IllegalStateException (非法语句异常)

6.response重定向

原理:

​ 浏览器发送给客户端一个请求 客户端给浏览器响应一个状态码 设置一个重定向地址 浏览器再去访问新的地址 服务器再去响应浏览器的请求

a.发送一个状态码

b.设置一个重定向地址

代码实现:

​ response.setStatus(302);//发送一个状态码

​ response.setHeader(“location”,"/javaEE-05/servlet/FServlet");

实现重定向的便捷方法

response.sendRedirect(“URL地址”);

特点

1.两次请求 两次响应

2.地址栏会发生变化

3.第一次访问可能是get 也可能是post 第二次访问一定是get

4.重定向可以重定向到站外资源

5.负责重定向的servlet不要设置响应体(响应正文)

6.重定向属于客户端行为

request 请求对象

request是Servlet.servlet()方法的一个参数 类型为HttpServletRequest

1.request生命周期

诞生:客户端访问

销毁:service方法执行完成后

2.request作用

1.获得请求头(封装了请求头数据)

2.请求参数(封装了请求正文数据,如果是get请求,没有正文)

3.域对象功能(是一个域对象,可以把他当中Map来添加 获取数据)

4.请求转发和包含(提供了请求转发和包含功能)

3.request获得请求头

方法:getHeader(String name); //获取指定名称的请求头

​ getHeaderNames(); //获得所有请求头名称 返回的是一个枚举类型

​ getIntHeader(String name); //获得值为int类型的请求头

4.request获取请求参数(就是从客户端传递过来的参数)

最常见的客户端传递参数方法有两种

get请求:

​ form表单

​ 超链接

​ 地址栏追加参数

post请求:

​ form表单

get和post提交的区别

get提交:提交数据大小有限制 提交参数会以?号的形式追加到浏览器的地址栏中 多个参数以&做连接 数据不安全

post提交:提交数据大小没有限制 数据安全 效率低

方法:

​ request.getParameter(“attname”); //返回的是String类型

​ request.getParameterNames(); //获得所有参数的名字

注意:

​ (1)当指点名称不存在时 获得null

​ (2)提交的参数相同,后边提交的参数将前边提交的参数覆盖

方法:

​ request.getParameterValues(“attname”); //获得请求中所有的参数值

​ request.getParameterMap(); //返回的是一个Map集合

​ 将从请求中获得参数内容封装到map集合当中

5.request域对象功能

request是域对象!在javaWeb中一共有四个域对象,其中ServletContext是域对象 他在整个web应用中只创建一个ServletContext

request是域对象 request可以在一个请求中共享数据

一个请求会创建一个request对象 如果一个请求经历了多个Servlet 那么多个Servlet就可以request来共享数据

在一个请求中经历多个Servlet 请求转发 请求包含(作用四)

方法:setAttribute(String name,Object value);//存储一个对象

​ getAttribute(String name); //通过属性名获得属性值数据

​ removeAttribute(String name);//通过属性名移除数据

​ getAttributeNames(); //获得所有属性名 返回的是以枚举类型

6.request请求转发 请求包含

无论是请求转发 请求包含,都表示由多个servlet共同处理一个请求

请求转发方法:request.getRequestDispatcher(/servlet/BServlet).forward(request,response);

请求包含方法:request.getRequestDispatcher(/servlet/BServlet).include(request,response);

请求转发和包含的特点:

1.只有一次请求,一次响应

2.地址栏不会发生变化

3.属于服务器端行为

4.转发只能是站内资源

请求转发和请求包含的区别(面试问题):

转发:(留头不留体)

如果在AServlet中请求到BServlet,那么在AServlet中就不允许在输出响应体

即不能再使用response.getWriter()和response.getOutputStream()向客户端输出 这一工作应该由BServlet来完成

不能输出响应体但还是可以设置响应头 例如:response.setContentType(“text/html;charset=utf-8”);

包含:(留头又留体)

请求转发的限制 请求包含中没有

7.请求转发与重定向的区别(面试问题)

1.请求转发是一次请求

重定向是两次请求

2.请求转发地址栏不会发生变化

重定向地址栏会发生变化

3.请求转发属于服务端行为

重定向属于客户端行为

4.请求转发要么都是get 要么都是post

重定向第二次请求一定是get

5.请求转发只能转发站内资源

重定向可以定向站外资源

8.request获得请求相关的其他方法

与URL相关的方法

方法:getMethod(); //返回请求方法

​ getLocale(); //返回当前客户端的locale,表示国家和语言

​ getCharacterEncoding(); //获得请求编码

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在重定向时同时带上参数,可以使用Query String参数。Query String是URL中的一部分,包含在问号(?)后面,以键值对的形式表示。例如,如果你要将用户重定向到https://example.com/welcome页面,并且带上name和age两个参数,可以这样构造重定向URL: ``` https://example.com/welcome?name=John&age=30 ``` 在这个URL中,name和age是两个参数的名称,John和30是它们的值。在接收端,可以通过解析URL中的Query String来获取这些参数的值。 在具体实现时,需要根据你使用的Web框架或库来确定如何构造重定向URL,并将其发送给客户端。下面是一个使用Flask框架的例子: ```python from flask import redirect, url_for @app.route('/login') def login(): # 用户未登录,重定向到登录页面,并带上next参数 return redirect(url_for('login_page', next='/dashboard')) @app.route('/login') def login_page(): next_url = request.args.get('next') # 显示登录页面,并将next_url传递给模板 # 用户输入用户名和密码后,提交表单到/login_check ... @app.route('/login_check', methods=['POST']) def login_check(): # 验证用户名和密码 if username == valid_username and password == valid_password: # 登录成功,重定向到next参数指定的页面 next_url = request.form.get('next') return redirect(next_url) else: # 登录失败,显示错误信息 ... ``` 在这个例子中,用户访问/dashboard页面时,如果未登录,则会被重定向到/login页面,并且带上next参数,值为/dashboard。在登录页面中,用户输入用户名和密码后,提交表单到/login_check路由,并且同时提交了next参数。在登录验证成功后,服务器会根据next参数的值来重定向到/dashboard页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值