初识JSP

JSP运行原理

1.第一次向JSP页面发送请求时JSP引擎会将jsp页面翻译成java文件
2.java虚拟机将java文件编译成class文件
3.Servlet容器根据对应的类创建对象处理用户的请求

JSP脚本片段

作用:在里面写java代码
格式:<% java代码 %>

JSP表达式

作用:用来向浏览器输出对象
格式:<%= %>

JSP注释

格式:<%-- --%>
jsp中允许有html、java、jsp3种注释,在生成的java文件中,不显示JSP注释,但是可以看到另外两种注释;java虚拟机在编译文件的时候会忽略java的注释,通过out.write写到浏览器页面的时候,浏览器会忽略html注释。

JSP的隐含对象

JSP的隐含对象又成为JSP内置对象,也就是在JSP脚本片段中不用再声明了,可以直接用的对象。JSP中共有9个隐含对象。

①out(JspWriter):相当于response.getWriter()获取的对象,用于在页面中显示信息。

②config(ServletConfig):对应Servlet中的ServletConfig对象。用来获取配置信息

③page(Object):对应当前Servlet对象,实际上就是this。

pageContext(PageContext):当前页面的上下文,也是一个域对象。

⑤exception(Throwable):错误页面中异常对象

request(HttpServletRequest):HttpServletRequest对象

⑦response(HttpServletResponse):HttpServletResponse对象

application(ServletContext):ServletContext对象

session(HttpSession):HttpSession对象

其中pageContext(PageContext)可以通过方法来获得其他8个对象。

其中JSP的4个域对象

  1. page域,范围:当前页面。对应的域对象:pageContext(PageContext),域对象类型:PageContext
  2. request域:范围:当前请求(一次请求)。对应的域对象:request(HttpServletRequest),域对象类型:HttpServletRequest
  3. session域。范围:当前会话(一次会话)。对应的域对象:session(HttpSession),域对象类型:HttpSession
  4. application域,范围:当前Web应用。对应的域对象:application(ServletContext),域对象类型:ServletContext
四个域对象都有以下三个方法:

void setAttribute(String key , Object value);
Object getAttribute(String key);
void removeAttribute(String key);

四个域对象的使用规则:

能用小的就不用大的

EL表达式

作用:用来输出域对象中的属性值。所以,要想让EL表达式可以取到值,必须得先把值放到域中。
EL表达式的查询规则:

①EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。

②EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。

③EL表达式仅仅用来读取数据,而不能对数据进行修改。

④使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。

⑤EL表达式的语法:
${ EL表达式(可完成取值、简单的判断、简单的运算等)}

EL表达式的查询规则:
默认进行全域查找,先从page域中开始查找,找到后直接返回,不再去其他域中查找,如果在page域中找不到再去request域中查找,在requet域中找到后也是直接返回,以此类推...如果在application域中也找不到则什么也不输出

⑥EL取值的四个域:
EL给我们提供了四个Scope对象,用来精确获取指定域中的属性值,可以在EL表达式中直接使用:

  1. pageScope
    -获取page域中的属性值

  2. requestScope
    -获取request域中的属性值

  3. sessionScope
    -获取session域中的属性值

  4. applicationScope
    -获取application域中的属性值

特别说明:

  • 通过EL表达式获取JavaBean的属性值
    通过 对象.属性名 的方式获取,注意!!!!这里虽然是通过对象.属性名获取JavaBean的属性值,底层实际调用的是对应的getXxx方法,比如:${student.name},实际是调用Student对象的getName()方法,而属性名可以为name2,只要getName()方法名称不变,就依然可以取到值。只不过一般我们的get方法后面的内容就是我们的属性值,所以看形式像是对象.属性名的方式获取的值。
  • 其中,pageContext既是JSP的隐含对象,也是EL的隐含对象
    比如,在EL表达式中获取项目虚拟路径和JSP表达式获取虚拟路径的对比:
    在JSP表达式中:
    <%=request.getContextPath() %>
    在EL表达式中:
    ${pageContext.request.contextPath} 原理也很好理解,即通过pageContext对象来获取request,通过request.contextPath来调用etContextPath()进而获得虚拟路径。

注意:一般情况在,在后台的Servlet中放置信息,然后在前端同过EL表达式来取值,比如在Servlet中,request.SetAttribute("msg","用户名密码错误!");

在前端通过EL表达式获取msg:${requsetScope.msg}

原文地址:https://www.cnblogs.com/zhqin/p/11710629.html