为什么Java Server Pages(jsp)具有隐式对象但java servlet不具有?
答案 0 :(得分:5)
Servlet代码通过service
或doGet
,doPost
,do...
方法之一执行。这些方法采用HttpServletRequest
和HttpServletResponse
参数,因此在某种意义上,请求和响应是隐式对象。您可以通过HttpServletRequest
(即getSession()
)或servlet上下文(servlet中的getServletContext()
方法)访问JSP页面上可用的其他隐式对象 - 这对应于{{1}在JSP页面中。一个缺少的隐式对象是application
,它在普通的servlet中不可用。 JSP页面自己提供这个。
答案 1 :(得分:0)
我们没有得到servlet中的所有隐式变量,因为有一些隐式变量,例如页面和页面上下文,它们只属于jsp。默认情况下,我们可以获得一些隐式变量,如请求,响应,会话,输出,配置,应用程序和异常。
要在servlet中获取所有这些隐式变量,我们使用请求和响应隐式变量。如果您想要获得会话,我们正在使用方法request.getSession(true)
或request.getSession(false)
。
答案 2 :(得分:0)
JSP隐式对象是JSP容器在每个页面中可用的Java对象,我们可以直接调用它们而无需显式声明。 JSP隐式对象也称为预定义变量。
Jsp中的示例 1)请求类似于HttpServletRequest 2)响应类似于HttpServletResponse 3)应用程序类似于ServletContext 4)config类似于ServletResponse 5)out类似于JspWriter对象 等
但是在servlet中我们可以通过doGet(HttpServlet请求,HttpServletResponse响应)方法或doPost方法访问请求,响应,因为它们可以作为容器的参数使用。
servlet中的config可以通过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页面作者自动使用!这些对象称为隐式对象