JavaWeb转发与重定向
转发
转发页面的特点:
1.浏览器地址不会发生变化
2.转发的页面只能是本项目内的合法地址
3.转发时微服务操作,实际请求只有一次
4.转发时request作用域生效
举个例子:
代码如下[这段代码写在一个servlet类(LoginServlet2)中],我们首先定义一个转发页面的时间“userinfo !=null”,满足这个条件即可转发到“/WEB-INF/pages/user/userlist.jsp”这个地址,这里我们假定登录页面为login.jsp(如图1),进入页面后我们输入相应的用户名和密码,点击登录,会转发到userlist.jsp这个页面(图2)
if(userinfo!=null){
request.getRequestDispatcher("/WEB-INF/pages/user/userlist.jsp").forward(request,response);
}else {
response.getWriter().println("error");
}
那为什么我们浏览器的地址栏没有显示"locallhost:8080/0730_war_exploded/userlist.jsp"呢???,还记得我们刚才在servlet里卖弄输入的转发的地址吗"/WEB-INF/pages/user/userlist.jsp",他在IDE编辑器里面是这样的目录结构
javaweb项目中时要求所有的jsp文件放在WEB-INF的目录下的,在该目录下的jsp页面都是通过sevlet来转发得到的,也就是说javaweb项目中不允许浏览器直接访问jsp文件,上图中,由于userlist.jsp在WEB-INF中所以,地址栏会变成"locallhost:8080/0730_war_exploded/login2",而像我们刚才的登陆页面login.jsp(或者上图中的index.jsp)由于不在WEB-INF目录下,所以可以直接在浏览器地址栏访问。
servlet四大作用域:
request作用域:当前请求有效(发送请求到转发页面的过程)
session作用域:当前会话(浏览器访问到资源开始,到浏览器关闭结束,自动结束–默认为30min,一般用来存储登录状态)
context作用域:从项目启动到项目结束
application作用域:从Tomcat启动到Tomcat结束
JSP九大内置对象
request
response
page
application
pageContext
exception
out
config
session
重定向
request.snedRedirect("index.jsp");
特点:
1.浏览器地址栏会发生变化
2.重定向的页面可以是任意地址
3.转发是客户端操