1.概念:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>jsp(输出时间)</title>
</head>
<body>
当前时间值:
<%
Date date = new Date();
out.write(date.toLocaleString());
%>
</body>
</html>
2.JSP调用 和 运行原理:
tomcat服务器调用jsp时会先转成一个servlet(里面包含了out(JspWriter),request,response,session,application(ServletContext),config(ServletConfig),page(this)等九大隐式对象,源码在服务器work目录),并调用这个servlet的server方法,把内容out给页面,把java代码原封不动的给页面。
部分源码:
3.JSP最佳实践:
4.JSP语法:
①模板元素:控制数据的显示样式
②脚本表达式:用户向浏览器输出数据,内部翻译成了java代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>jsp(输出时间)</title>
</head>
<body>
当前时间值:
<%=new Date().toLocaleString()%>
</body>
</html>
③脚本片段:
④JSP声明
⑤JSP注释: <%- - - -%>
html,xml注释 : <!– –> 注释内容会回给浏览器,不显示而已
⑥JSP指令
page指令:
使用page指令解决JSP中文乱码问题:
记事本开发JSP设置:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312" contentType="text/html; charset=gb2312"%>
Eclipse开发JSP设置:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" > 或者(response默认设置为UTF-8)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
include指令:
静态(编译时)包含:只转换成一个servlet(效率更好)
动态(运行时)包含:转换成多个Servlet,当调用主Servlet的时候再进行其他调用。
5.JSP九大隐式对象
1.request(HttpServletRequest)
2.response(HttpServletResponse )
3.session(HttpSession)
4.application(ServletContext)
5.config(ServletConfig)
6.page(this)
7.exception
JSP独有的两个:
8.out(JspWriter)
9.pageContext(PageContext)
①out隐式对象:out的数据在自己的缓冲区里,当满足条件后再将数据写给response。jsp的内容都是通过out输出的,先保存在out缓存里。
建议:用JSP通过out输出。
②pageContext对象:
(1)应用1:获取其它8大对象
意义:用在自定义标签开发技术里面,移除java代码
(一个合格的JSP不允许存在java代码的。)
自定义标签代码后续。
(2)应用2:pageContext也是域对象(page域是request,session,servletContext四个域中最小的一个域)
page域:生命周期是整个页面范围。可以访问其他域
request域:一个请求范围
session域:一个会话范围
servletContext域:整个应用范围
可以访问其他域(其他域定义为了常量):管理所有域的一个入口
PAGE_SCOPE:默认自己,page域
REQUEST_SCOPE :request域
SESSION_SCOPE :session域
APPLICATION_SCOPE: application域
(3)重点:
findAttribute()方法,在四个域中依次查找。
EL表达式${data} ,内部依赖的也是findAttribute()方法
(4)pageContext其他应用:引入和跳转到其他资源(第三种方式了)
6.JSP标签:
<jsp:forward page="/index.jsp">
<jsp:param name="username" value="xxx"/> 负责带数据过去
</jsp:forward>
应用场景:在web.xml中配置首页的时候,不允许配servlet,所以可以配置一个jsp,然后在jsp中跳转到首页的servlet中去。
<jsp:include page="/1.jsp"></jsp:include> 动态包含 用的不多
8.映射JSP
9.JSP页面 查错:
还有一种错误情况:
正确的JSP第一次运行成功翻译成Servlet,后来又改动JSP,如果改动后JSP语法有问题,不会翻译成新的Servlet, 再次运行的时候,会报JSP语法错误。
这个时候,如果快速刷新,浏览器因为刚刚帮你翻译了一次,又发现jsp没有改动,会调用原来第一次翻译的的正确Servlet,显示正常。
如果过一小段时间再刷新的话,浏览器会重新翻译jsp,又报错。