请求的转发
什么是请求的转发?
请求的转发是指,服务器收到请求后,从一个资源跳转到另一个资源的操作叫做请求的转发
看下图解
我们来写一个程序来了解一下这个东西
- 在我们原来的包下面写一个servlet1和一个servlet2,然后配置一下
- 获取参数信息也就是我们图上面的的获得办事资料
- 设置一个键值对,全域都可以获得的那种,当做一个章,即盖章
- 获取指定路径的项目,即柜台,这里等于指路,制作地图
- 前进到我们指定的项目
注意这里forward()方法中传入的两个参数,就是我们的HttpServletRequest和HttpServletResponse创建的两个对象,这里其实是把这两个对象传到了servlet2中了,等于说,此时servlet1和servlet2中的数据通过这俩对象相通了
这就是我们的servlet1
- 在servlet2里面我们这里简单点写
- 运行试验一下
在这我们先进入我们的servlet1,同时设置参数username=zxc123在get请求中我们可以通过地址栏为参数设置值,语法?参数名=参数值
- 正常打印,正在我们的意料中,而且可以看到我们地址安栏中并没有变化,虽然咱们还访问到了servlet2,但地址栏中只有sevlet1
请求转发的特点:
1.浏览器地址不会发生变化(即上边的第8步骤)
2.他们是一次请求
即客户端和服务器端还只是请求和响应了一次(由开始的图解可知,服务器和客户端也就一次的交互)
3.他们共享Request域中的数据(见上面的第5步)
我们可以看到在servlet2中也是有HttpServletRequest和HttpServletResponse对象的,我们通过forward向servlet2中传入的俩对象就传到这来了,因为我们的操作基本上都是基于这俩对象的方法,所以同样的对象,那数据肯定一样了,这个就是这里的数据共享
4.可以转发到WEB-INF目录下
因为我们的普通访问方法无法直接访问到WEB-INF下的项目,但我们可以通过请求转发来访问到把from放到WEB-INF中,然后修改我们servlet1中的地址,然后访问servlet1就可访问到我们的from
但是我们这个请求转发只能转发到我们的工程中的某些文件项目,不能转发到工程外面,就比如不能转到百度