04 Servlet_day3

Servlet笔记 第三天

一、复习

1. client发送请求的方式

1) 地址栏手工输入程序地址(访问首页)
2) 点击超链接 href=“目标资源的路径( uri — /应用名/相对路径 )”
3) 点击表单的提交按钮 action=“目标资源路径(uri)”

2. servlet程序生命周期

1) tomcat只会为servlet程序创建一个对象,默认在第一次请求到达时创建
2) 可以认为设置servlet程序的初始化时机 : 通过标签 load-on-startup来设置 “正整数”
3) servlet程序的线程安全问题: servlet程序尽量不要定义实例变量, 非用不可加synchronized

二. 多个servlet配合完成用户需求

1. 配合方式(两种) 【重点】

1)请求转发 forward
2) 请求重定向 redirect

2. 请求转发 forward

1)代码 — 在第一个程序里添加如下代码
       ~~~java

RequestDispatcher rd = request.getRequestDispatcher(“下一个程序的url-pattern网名”);
rd.forward( request,response );
~~~

2)forward工作方式的特点

​ ① forward连接的多个servlet程序有明显的先后顺序,形成工作流,在这个流程中,只有最后一个servlet有

​ 权向client输出结果内容,前面servlet的输出一律清空

​ ② forward连接的多个servlet程序处于一个请求的生命周期

​ ③ forward动作发生在服务器内部,浏览器不知晓,最终导致地址栏和网页内容不匹配

​ ④ 可以使用request作用域传递数据

​ ⑤ forward方式不能在两个应用的程序之间跳转(不能跨应用, 不能跨域)

3) 关于forward过程中数据的传递问题

​ 在forward连接的两个程序间可以使用request对象来传递数据,request本身又是一个存储空间(作用

​ 域),可以存放起了名字的值(命名属性)

​ ① 存数据 : request.setAttribute( “name” — String , value — Object );

​ ② 取数据: Object value = request.getAttribute( “name” );

3. 请求重定向 redirect

1) 特点

​ ① 重定向redirect连接的两个servlet程序处于两个请求的生命周期

​ ② 第二次请求是浏览器根据第一次请求的响应自动发出的, 会导致浏览器地址栏发生改变

​ ③ 不能使用request作用域传递数据( 整个过程是两个请求)

​ ④ 可以跨域(在两个不同应用的程序之间跳转)

2) 代码
 response.sendRedirect( " 下一个程序的uri ");
3) 数据传递

​ ① 一般情况下,不需要数据传递

​ ② 可以人为模拟表单的get提交方式,将数据直接拼接到地址后面传递

​ response.sendRedirect( “uri?name=value&name=value”);

​ 接收: request.getParameter(“name”)

​ 注意: 这种数据传递方式同时适用于超链接数据传递

4. forward和redirect异同点

1)相同: 代码运行后都可以使得程序的流程由AServlet跳转到Bservlet程序运行
2)不同: forward(一个请求,地址栏不变) , redirect(两个请求,地址栏变化)
3)使用选择:

​ ① 如果当前程序执行结束,功能没有彻底完成 or 有大量数据需要传递,则选择 forward 跳转

​ ② 如果当前程序执行结束, 功能已经完成(下一个程序涉及其他功能),选择 redirect 跳转

​ ③ 无法确定,优选 redirect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值