哪个类有getSession()方法的实现?

时间:2012-01-24 14:56:27

标签: servlets

我对各种方法的实现有点困惑。  实际上,我正在学习Servlet和JSP,我找到了很多像

这样的方法
request.getSession(); 
response.getWriter();

所以请问,任何人都能告诉我方法(getSession()getWriter()等)的实施在哪里(在哪个班级)?

2 个答案:

答案 0 :(得分:2)

它们存在于servlet容器本身中。更重要的是,servletcontainer实际上是Servlet API的整个具体实现。

如果是Tomcatopen source),则request.getSession()类会提供2288 @Override 2289 public HttpSession getSession() { 2290 Session session = doGetSession(true); 2291 if (session == null) { 2292 return null; 2293 } 2294 2295 return session.getSession(); 2296 } 的实现。在当前的Tomcat 7.0.25版本中,它看起来像这样:

response.getWriter()

等效地,628 @Override 629 public PrintWriter getWriter() 630 throws IOException { 631 632 if (usingOutputStream) { 633 throw new IllegalStateException 634 (sm.getString("coyoteResponse.getWriter.ise")); 635 } 636 637 if (ENFORCE_ENCODING_IN_GET_WRITER) { 638 /* 639 * If the response's character encoding has not been specified as 640 * described in <code>getCharacterEncoding</code> (i.e., the method 641 * just returns the default value <code>ISO-8859-1</code>), 642 * <code>getWriter</code> updates it to <code>ISO-8859-1</code> 643 * (with the effect that a subsequent call to getContentType() will 644 * include a charset=ISO-8859-1 component which will also be 645 * reflected in the Content-Type response header, thereby satisfying 646 * the Servlet spec requirement that containers must communicate the 647 * character encoding used for the servlet response's writer to the 648 * client). 649 */ 650 setCharacterEncoding(getCharacterEncoding()); 651 } 652 653 usingWriter = true; 654 outputBuffer.checkConverter(); 655 if (writer == null) { 656 writer = new CoyoteWriter(outputBuffer); 657 } 658 return writer; 659 660 } 实现由org.apache.catalina.connector.Request类提供,在Tomcat 7.0.25中看起来像这样:

{{1}}

所以彼此的servletcontainer / appserver(org.apache.catalina.connector.ResponseGlassfishJBoss ASJettyWebLogic等)都有自己的实现(尽管它们主要是使用Tomcat的分支。)

答案 1 :(得分:0)

HttpServletRequest包含您感兴趣的getSession()的实施,由HttpServletRequestWrapper及其父SerlvetRequestWrapper实施。

不出所料,HttpServletResponsegetWriter()的起点,但实现位于HttpServletResponseWrapper(实际上在其超类ServletResponseWrapper中)。

然而,这应该是可搜索的:你从servlet中调用它们。如果你打电话给他们,你已经导入了它们。如果您已导入它们,则您具有完全限定的类名。如果你有FQN,你可以查找班级的Javadocs。如果您有Javadoc,则可以链接到超类/接口。