解决方案 »
- 在用户登录系统之后,进行执行logout的操作时候出现异常,找不到session
- spring2.5的代理在那个包下呀
- java设置sqlserver2005精度
- Mybatis基础问题---resultType=hashmap有何特殊?
- rmi中java.security.policy的问题
- jsp连接数据库的中文问题
- Jbuilder 2005 连oracle 的问题!在线等
- SMTP、POP3协议的特点和工作原理
- 用什么方法可以使写得很乱的JSP文件自动调整对齐?
- webLogic问题
- session的问题
- 一个JavaWeb项目中怎么做到只用引入一次jquery ,js,css ?让其他页面直接继承这个页面?
try {
request.getRequestDispatcher(tmpltPage).forward(request, response);
}
可以看出来,,,第一个jsp转发 给第二的页面的时候儿,,不个request, response 都传递过去拉...所以,,,是共享同一个request对象
也可以设置另一个request对象进去的...这个情形下就不是共享同一个request对象了..
我用的是tomcat服务器,创建了两个jsp文件,第1个jsp写了如下内容
<%
System.out.println(request);
request.getRequestDispatcher("index2.jsp").forward(request, response);
%>
第2个jsp写了如下内容
<%
System.out.println(request);
%>
控制台输出的内容是
org.apache.catalina.connector.RequestFacade@54a9387
org.apache.catalina.core.ApplicationHttpRequest@a6a435f
如果两个页面共享同一个request对象,为什么控制台输出的内容不同?
这个request对象实际上是个类的实例,这个类它实现了接口javax.servlet.ServletRequest..不同的web服务器,request对象是属于不同的类。forward的方法定义如下::
public abstract interface javax.servlet.RequestDispatcher {
public abstract void forward(javax.servlet.ServletRequest arg0, javax.servlet.ServletResponse arg1) #--------
org.apache.catalina.connector.RequestFacade@54a9387
org.apache.catalina.core.ApplicationHttpRequest@a6a435f
这个控制台输出的确实不是同一个对象..因为地址不同...
准确的说是同一类对象,这俩个对象都是同样的ServletRequest接口实现,所以可以理解为可以互相转换的.....
俩个jsp的处理过程不是紧密地连接的,中间有其他的过程代码,所以有有些转换..
是不是同一个对象,,不同的web服务器处理机制不同,tomcat的不是同一个对象,而resin 带struts2框架 的输出 ,是同一个对象....
所以,通常也为了简单,,可以说是同一个对象#-----tomcat的 RequestFacade , ApplicationHttpRequest都是实现 ServletRequest 接口的...public class org.apache.catalina.connector.RequestFacade implements javax.servlet.http.HttpServletRequest
>>>public abstract interface javax.servlet.http.HttpServletRequest extends javax.servlet.ServletRequest class org.apache.catalina.core.ApplicationHttpRequest extends javax.servlet.http.HttpServletRequestWrapper
>>>>>>>>>public class javax.servlet.http.HttpServletRequestWrapper extends javax.servlet.ServletRequestWrapper implements javax.servlet.http.HttpServletRequest
>>>public abstract interface javax.servlet.http.HttpServletRequest extends javax.servlet.ServletRequest
#-----resin 的输出
com.caucho.server.http.HttpServletRequestImpl addr:9381576
com.caucho.server.webapp.ForwardRequest addr:17061149#------resin 的request继承体系public final class com.caucho.server.http.HttpServletRequestImpl extends com.caucho.server.http.AbstractCauchoRequest implements com.caucho.server.http.CauchoRequest, com.caucho.websocket.WebSocketServletRequest
>>>public abstract interface com.caucho.server.http.CauchoRequest extends javax.servlet.http.HttpServletRequest
>>>public abstract interface javax.servlet.http.HttpServletRequest extends javax.servlet.ServletRequest
public class com.caucho.server.webapp.ForwardRequest extends com.caucho.server.http.CauchoRequestWrapper
>>>>>public class com.caucho.server.http.CauchoRequestWrapper extends com.caucho.server.http.AbstractCauchoRequest
>>>public abstract class com.caucho.server.http.AbstractCauchoRequest implements com.caucho.server.http.CauchoRequest
>>>public abstract interface com.caucho.server.http.CauchoRequest extends javax.servlet.http.HttpServletRequest
>>>public abstract interface javax.servlet.http.HttpServletRequest extends javax.servlet.ServletRequest #----resin 带struts2框架 的输出,是同一个对象..
org.apache.struts2.dispatcher.StrutsRequestWrapper@1bb4f52
org.apache.struts2.dispatcher.StrutsRequestWrapper@1bb4f52
>>>>public class org.apache.struts2.dispatcher.StrutsRequestWrapper extends javax.servlet.http.HttpServletRequestWrapper
>>>>public class javax.servlet.http.HttpServletRequestWrapper extends javax.servlet.ServletRequestWrapper implements javax.servlet.http.HttpServletRequest
>>>public abstract interface javax.servlet.http.HttpServletRequest extends javax.servlet.ServletRequest