请求转发中jsp界面跳转到Servlet跳转到jsp与jsp跳转到jsp跳转到Servlet之间传值的区别
今天遇到了一个jsp与Servlet传值的问题,通过查资料解决了。下面和大家来分享一下。
例子一
index.jsp相关代码如下
Servlet相关代码如下
list.jsp相关代码如下
解释例子一
上面的例子一描述的时index.jsp通过超链接向Servlet中传去borderid的值。 再在Servlet中通过请求转发(注意只能通过请求转发,因为重定向会再创建一个request对象,而请求转发会将当前的request的值传给下一个页面)将Servlet中的borderid的值传递给list.jsp。
原因是从index.jsp跳转到Servlet时会将传去的值存发在request对象里面。Servlet获取值之后通过请求转发跳转到list.jsp界面中。 注意从index.jsp跳转到Servlet,再从Servlet跳转到list.jsp界面。请求对象只创建了一次(是在index.jsp访问Servlet时创建的)。因此request对象中的值一直存在。
例子二
detail.jsp相关代码如下
post2.jsp相关代码如下
Servlet相关代码如下
解释例子二
上面的例子二描述的是detail.jsp通过超链接向post2.jsp传去title和topicid的值,在通过post2.jsp的超链接向Servlet传去title和topicid的值。(结果保证在Servlet中无法获取到detail.jsp中topicid的值)
原因:当detail.jsp通过超链接向post2.jsp时会向post2.jsp发出一次请求,会将传去title和topicid的值存储在request对象中。当post2.jsp的超链接向Servlet时又会创建一个request对象,所以将原先title和topicid的值抹去。所以Servlet无法获取到detail.jsp中title和topicid的值。
解决方法
只要在post2.jsp跳转到Servlet时带上title和topicid的值
解决图片如下
请求对象啥时会被创建
一般来说当你发生界面跳转时就会被创建,就是当web客户端向Servlet发出请求时或者Servlet通过重定向技术实现跳转时。除了运用请求转发会保留原先的request。