爲什麼Java服務器頁面(jsp)具有隱式對象但是java servlet不這樣做?在servlet中缺少隱式對象
回答
Servlet代碼通過service
或doGet
,doPost
,do...
方法之一執行。這些方法採取HttpServletRequest
和HttpServletResponse
參數,因此在某種意義上請求和響應是隱式對象。您可以通過HttpServletRequest
(即getSession()
)或通過servlet上下文(servlet中的getServletContext()
方法)訪問JSP頁面上可用的其他隱式對象 - 這對應於JSP頁面中的application
。一個缺少隱式對象是page
,它在純servlet中不可用。 JSP頁面自己提供了這個頁面。
我們沒有得到servlet中的所有隱式變量,因爲有一些隱式變量,比如頁面和頁面上下文,它們只屬於jsp。默認情況下,我們可以獲得一些隱含的變量,如請求,響應,會話,輸出,配置,應用程序和異常。
爲了獲得servlet中的所有這些隱式變量,我們使用了請求和響應隱式變量。例如,如果你想獲得會議,我們正在使用方法request.getSession(true)
或request.getSession(false)
。
JSP隱式對象是JSP容器在每個頁面中提供的Java對象,我們可以在不明確聲明的情況下直接調用它們。 JSP隱式對象也稱爲預定義變量。 JSP中
實施例 1)請求類似於HttpServletRequest的 2)響應類似於HttpServletResponse的 3)應用類似於ServletContext的 4)配置類似於ServletResponse的 5)出類似於的JspWriter對象 等
但在小服務程序就可以訪問請求,通過doGet(HttpServlet請求,HttpServletResponse響應)方法或doPost方法響應,因爲這些方法可作爲容器的參數使用。
servlet中的配置可以通過servlet中的init(ServletConfig config)方法獲得。 應用程序或servlet中的ServletContext對象可以從請求中檢索,比如request.getServletContext();
實際上所有的jsps在內部都被轉換爲servlet。生成的servlet代碼會產生隱式對象。 檢查了生成的JSP servlet源代碼後,您知道該代碼在其_jspService方法中包含多個對象聲明。
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
String _value = null;
try {
.
.
.
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html;charset=ISO-8859-1");
pageContext = jspxFactory.getPageContext(this,
request, response, "", true, 8192, true);
application =pageContext.getServletContext();
config = pageContext.getServletConfig(); pageContext.getServletConte
session = pageContext.getSession();
out = pageContext.getOut();
.
.
.
}
您會看到有對象引用,如pageContext,session,application,config,out等等。無論是從頁面內部使用這些對象引用,都會被創建。它們自動供JSP頁面作者使用!這些對象被稱爲隱式對象
- 1. WADL中缺少對象
- 2. SimpleXMLElement對象缺少節點
- 3. GitX-L:缺少對象0000000000000000000000000000000000000000
- 4. API ref缺少DataFrameGroupBy對象?
- 5. 返回缺少NONE對象
- 6. XMLHttpRequest對象上缺少onreadystatechange()
- 7. Ecore TreeIterator缺少根對象
- 8. NSFetchedResultsController缺少一些對象
- 9. Xcode 8.1缺少對象庫
- 10. InstallShield 2011中缺少installshield對象
- 11. 在android中缺少樣式
- 12. Javascript對象 - 功能缺少整體對象,但存在
- 13. ColorBox - 錯誤:cboxElement缺少設置對象
- 14. Python 2.7.11套接字庫缺少對象?
- 15. WPF錯誤「缺少的對象
- 16. 缺少對象的ActiveRecord方法(find_by)
- 17. JSON缺少'}'或對象成員名稱
- 18. Rails,production-env,「對象不缺少常量」
- 19. 的HttpClient對象方法缺少
- 20. JasperReports的HTML缺少的對象
- 21. jibx:缺少所需的對象異常
- 22. Spyder缺少對象檢查器
- 23. 蟒對象的成員變量缺少
- 24. 蒙戈查詢對象缺少關鍵
- 25. 新的ActiveXObject(「InternetExplorer.Application」)缺少window.document對象
- 26. factory_boy對象似乎缺少主鍵
- 27. Bing「地址對象」缺少adminDistrict或postalCode
- 28. Enum.Parse不能隱式地將類型'對象'轉換爲存在顯式轉換(你缺少一個轉換嗎?)
- 29. 在類中使用隱式對象
- 30. Crystal Reports中缺少模式