为什么jsp内置对象不能在jsp声明中使用?

原文:https://www.cnblogs.com/xuedexin/articles/5625533.html

这个是说jsp运行机理的:https://blog.csdn.net/hanxuemin12345/article/details/23831645

感觉原文写的还是有点深,比较全,我只是懂了一点点,但是这个问题也大致解决了,写下的思路是以这个问题为中心的

jsp运行流程:

1)首先,客户端发出请求(request ),请求访问JSP网页

2)接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)

3)然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行

4)最后把结果响应(response )给客户端

jsp内置对象使用时不需声明的原因

首先知道,jsp内置对象不用声明的原因是,在jsp文件转译成java文件时,会自动声明HttpServletRequest、HttpServletResponse,还有其他的内置对象,据说是因为使用次数多,为了方便才自动声明的。

jsp内置对象不能在jsp声明中使用的原因

在转译过程中,jsp文件的声明原封不动的移到了java文件中(在原文件中就是一个方法或变量),成了java文件的一个方法或变量。而不在声明中的jsp程序段也被封装到了一个名叫_jspService的方法中,HttpServletRequest、HttpServletResponse作为方法的参数生成,其他内置对象在方法执行过程中生成。最后,才会执行原jsp文件中的程序段。

总结一句,jsp声明九大内置对象是在原文件的jsp声明(即<%!      % >)之后,没有事先声明当然不能使用了

所以jsp内置对象不用声明和创建就可以在jsp文件中使用,但是不能写在声明中。

一个小小的解决办法

如果实在想在声明里边用application或config,可以这样写,相当于声明了一下,别的内置对象在声明里的写法还没有探索出来

ServletContext application=getServletContext();
ServletConfig config =getServletConfig(); 

 不要问我为什么非要在声明里用内置对象。。。web实验的网页计数器,老师就在声明里用了application还真运行通了?????我一度以为自己写错了

附上神秘的_jspService()函数:

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
      return;
    }

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;
}

如果想看看自己的jsp文件生成的java文件但是找不到,可以参考这篇文章:

https://blog.csdn.net/han_hhh/article/details/102905750 

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值