[原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法

时间:2021-04-11 05:10:38

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.JSP的9个隐式对象: 参考HttpJspBase  ,源码为tomcat源码

  1)对象存在的位置

 public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { 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;   //... }

  2)对象的使用 

    ①使用位置<% %> 中编写java代码,可以使用 : request ,  response ,  pageContext ,  session , application , page  ,out  ,config  ,(exception)

request
HttpServletRequest对象
 响应请求
response 
HttpServletResponse对象
在JSP页面中几乎不会调用response的任何方法
pageContext 
PageContext对象  
页面上下文。可以从该对象获取到其他8个隐含对象,也可以从中获取到当前页面的其他信息。自定义标签
session 
HttpSession对象
代表浏览器和服务器的一次回话
application 
ServletContext对象
代表当前 WEB 应用,是 ServletContext 对象
config  
ServletConfig对象
 代表当前JSP对应的Servlet 的ServletConfig 对象(几乎不用)
out  

JspWriter对象

 调用out.println() 可以直接把字符串打印到浏览器
page  
final java.lang.Object page = this
 指向当前的JSP 对应的Servlet 对象的引用, 但为Object 类型,只能调用 Object 类的方法(几乎不用)
exception  
<%@ page isErrorPage="true" %> 只有在JSP 页面中声明了才可以使用此对象

2.JSP的基本语法:

  1)JSP模版元素:JSP页面中的静态HTML内容称之为JSP模版元素。在静态的HTML内容之中可以嵌套JSP的其他各种元素来产生动态内容和执行业务逻辑

    JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观  

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> </body>
</html>

  

  2)JSP表达式:

  ① 提供了将一个java变量或表达式的计算结果输出到客户端的简化方式,它将要输出的变量或表达式直接封装在<%= 和 %>之中;

  ② JSP表达式中的变量或表达式的计算结果将被转换成一个字符串,然后被插入进整个JSP页面输出结果的相应位置处;

  ③ JSP表达式中的变量或表达式后面不能有分号(;),JSP表达式被翻译成Servlet程序中的一条out.print(…)语句。

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- JSP表达式:可以将页面的一个对象输出到客户端的浏览器上 -->
<%=new java.util.Date()%> <%
Date date = new Date();
out.println(date);
%> </body>
</html>

  3)JSP脚本片断

  ①JSP脚本片断(scriptlet)是指嵌套在<% 和 %>之中的一条或多条Java程序代码;

  ②在JSP脚本片断中,可以定义变量、执行基本的程序运算、调用其他Java类、访问数据库、访问文件系统等普通Java程序所能实现的功能;

  ③在JSP脚本片断可以直接使用JSP提供的隐式对象来完成WEB应用程序特有的功能;

  ④JSP脚本片断中的Java代码将被原封不动地搬移进由JSP页面所翻译成的Servlet的_jspService方法中,所以,JSP脚本片断之中只能是符合Java语法要求的程序代码,除此之外的任何文本、HTML标记、其他JSP元素都必须在脚本片断之外编写;

  ⑤JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每条命令执行语句后面必须用分号(;)结束;

  ⑥在一个JSP页面中可以有多个脚本片断(每个脚本片断代码嵌套在各自独立的一对<% 和 %>之间),在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素

  ⑦多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况;*

  ⑧在脚本片断中可以使用条件、循环、选择等流程控制语句来创建其周围的其他元素的执行逻辑,因此,在编写JSP页面时应考虑各个元素之间的先后顺序和相互关系,特别是将循环、条件判断等语句分布在若干个脚本片断中编写时对其邻近的其他JSP元素产生的影响

  

 <%@page import="com.jason.javaweb.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>hello</title>
</head>
<body> <%
String moneyStr = request.getParameter("money");
int money = Integer.parseInt(moneyStr); if (money >= 1000) {
%>
高收入啊!!!!!
<%
} else {
%>
太低了 <%
}
%> </body>
</html>

  4)JSP声明(了解, 基本不使用)

  ①JSP声明将Java代码封装在<%!和 %>之中,它里面的代码将被插入进Servlet的_jspService方法的外面,所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法

  ②多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中;

  ③JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象;

  

 <%!
static { System.out.println("loading Servlet!"); }
private int globalVar = 0;
public void jspInit()
{
System.out.println("initializing jsp!");
}
%>
<%!
public void jspDestroy()
{
System.out.println("destroying jsp!");
}
%>
<%
int localVar = 0;
%>
globalVar:<%= ++globalVar %><br>
localVar:<%= ++localVar %>

  5)JSP注释

  ①JSP注释的格式: <%-- 注释信息 --%>

  ②JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。

  

     <%-- 这个就是jsp的注释格式,

         JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容 --%>

 

3.总结

1)掌握JSP的原理

2)掌握隐式对象:pageContext , request  ,  session , application  page  ,out  ,config  ,(exception),response 

3)jsp的语法: jsp表达式,jsp脚本,jsp注释jsp声明,jsp模板