一个公司的JSP面试题目,看看怎么做,谢谢
1。给定一个自定义标签代码如下;
public int doStartTag() throws JspTagException
{
pageContext.getAttribute( "A ");
return EVAL_BODY_INCLUDE;
}
问:如果pageContext.getAttribute( "A ");返回的引用不是null,问这个对象存储在什么范围?
答案有A.page;B.request C session D.application
2.在a.jsp中有如下代码:
<%=request.setAttribute( "name ", "hello ")%>
在b.jsp中有如下代码片段
<%out.print(request.getAttribute( "name ");%>
问:允许a.jsp,要在浏览器上输出hello,那么可以用下面什么方法:
A.在a.jsp中使用 <form action= "b.jsp " form= "post ">
B.在a.jsp中使用 <jsp:forward page= "b.jsp "/>
C.在a.jsp中使用 <%@ include file= "b.jsp "%>
该题的答案是B和C是正确的,我在电脑上试验了,我很纳闷为什么A不对呢?反而C是正确的,那位高手能指点一下,谢谢
------解决方案--------------------A.在a.jsp中使用 <form action= "b.jsp " form= "post "> //是发一个新的请求 不共享request数据
------解决方案--------------------1。 A , pageContext 自然page范围咯
------解决方案--------------------.在a.jsp中使用 <form action= "b.jsp " form= "post "> //是发一个新的请求 不共享request数据
我认为该语句把请求转发给b.jsp,应该共享该request数据呀?
-------------------------------------------------
错误。form action确实会“把请求转发给b.jsp”,但是不是生成目前HTML的那个request(也就是a.jsp的request)。仔细想一下,form action需要客户端的触发,也就是用户选择提交或者js提交,这个时候a.jsp的request早消失的无影无踪了。
------解决方案--------------------1.是page
2.B.C
include和forward是转递参数的页面跳转,这样跳转后获得的request对象就是原来那一个,
而 <form action= "b.jsp " form= "post "> 这样会等于重新发送一个http请求,也就没有在原来的request作用域里.也就没发在b.jsp中get... 这个和sendDirect一样的.