本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.JSP的9个隐式对象: 参考HttpJspBase ,源码为tomcat源码
1)对象存在的位置
1 public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) 2 throws java.io.IOException, javax.servlet.ServletException { 3 4 final javax.servlet.jsp.PageContext pageContext; 5 javax.servlet.http.HttpSession session = null; 6 final javax.servlet.ServletContext application; 7 final javax.servlet.ServletConfig config; 8 javax.servlet.jsp.JspWriter out = null; 9 final java.lang.Object page = this; 10 11 //... 12 13 }
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模版元素定义了网页的基本骨架,即定义了页面的结构和外观
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 </body> 12 </html>
2)JSP表达式:
① 提供了将一个java变量或表达式的计算结果输出到客户端的简化方式,它将要输出的变量或表达式直接封装在<%= 和 %>之中;
② JSP表达式中的变量或表达式的计算结果将被转换成一个字符串,然后被插入进整个JSP页面输出结果的相应位置处;
③ JSP表达式中的变量或表达式后面不能有分号(;),JSP表达式被翻译成Servlet程序中的一条out.print(…)语句。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.util.Date"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <!-- JSP表达式:可以将页面的一个对象输出到客户端的浏览器上 --> 12 <%=new java.util.Date()%> 13 14 <% 15 Date date = new Date(); 16 out.println(date); 17 %> 18 19 </body> 20 </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元素产生的影响
1 <%@page import="com.jason.javaweb.Person"%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 9 <title>hello</title> 10 </head> 11 <body> 12 13 <% 14 String moneyStr = request.getParameter("money"); 15 int money = Integer.parseInt(moneyStr); 16 17 if (money >= 1000) { 18 %> 19 高收入啊!!!!! 20 <% 21 } else { 22 %> 23 太低了 24 25 <% 26 } 27 %> 28 29 30 </body> 31 </html>
4)JSP声明(了解, 基本不使用)
①JSP声明将Java代码封装在<%!和 %>之中,它里面的代码将被插入进Servlet的_jspService方法的外面,所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法;
②多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中;
③JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象;
1 <%! 2 static { System.out.println("loading Servlet!"); } 3 private int globalVar = 0; 4 public void jspInit() 5 { 6 System.out.println("initializing jsp!"); 7 } 8 %> 9 <%! 10 public void jspDestroy() 11 { 12 System.out.println("destroying jsp!"); 13 } 14 %> 15 <% 16 int localVar = 0; 17 %> 18 globalVar:<%= ++globalVar %><br> 19 localVar:<%= ++localVar %>
5)JSP注释
①JSP注释的格式: <%-- 注释信息 --%>
②JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。
1 <%-- 这个就是jsp的注释格式, 2 3 JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容 --%>
3.总结
1)掌握JSP的原理
2)掌握隐式对象:pageContext , request , session , application page ,out ,config ,(exception),response
3)jsp的语法: jsp表达式,jsp脚本,jsp注释,jsp声明,jsp模板