主要内容介绍
Web页面跳转和信息共享
.Servlet作用域对象
.动态网页:JSP
请求转发(forward)
需求:AServlet中没有做完的事情跳转到BServlet中继续执行
语法:req.getRequestDispatcher(String path).forward(ServletRequest req,ServletResponse resp);
getRequestDispatcher : 获得转发器
path : 跳转到哪里?
特点
- 转发过程中浏览器地址栏路径没变
- 只发了一个请求
- 共享同一个请求(同一个请求对象),在请求中共享数据;
- 响应由最后一个决定
- 只能够访问当前应用中的资源,不能够跨域跳转(老师我想跳转到源代码官网去看视频...)
可以使用相对路径,不推荐
- 可以访问WEB-INF中的资源
- 从html页面跳转到Servlet需要先加上server.xml中的path(如果有),Servlet中的跳转是不需要加的!
- 疑问: 既然可以访问WEB-INF中的资源了,那怎么之前又说放在里安全呢?
a) 程序没有提供的路径就不能够访问;
b) 在跳转之前可以做权限判断
URL重定向(redirect)
需求:AServlet中没有做完的事情跳转到BServlet中继续执行
语法:resp.sendRedirect(String path);
特点: 测试下面每个点请留意浏览器地址栏!!!
- 浏览器中地址会变,相当于访问了两次
注意: path中应该加上server.xml中的path的值,如果有的话
- 发送了两个请求
- 因为是不同的请求,所以不能够共享请求中的数据
- 最终的响应是由最后一个Servlet决定
- 可以跨域访问资源(尝试访问itsource.cn)
- 不能够访问WEB-INF中的资源(思考为什么?)
JSP原理分析
- 注释
- 输出数据到页面
<%=hello%>
- JSP中的Java脚本片段
<%
语句1;
语句2;
%>
- 定义类的成员
<%!
String str;
void testMethod(){}
%>