本博客为原创:综合 尚硅谷(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 | 调用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模板