Java Server Pages: java 服务器端⻚⾯(JSP)
JSP概念
JSP是一个特殊的⻚⾯,其中既可以指定定义 html 标签,也可以定义 java 代码,可⽤于简化书写
原理:JSP本质上就是⼀个Servlet
JSP在第⼀次被访问时会被Web容器翻译成servlet,再执⾏,过程:
第⼀次访问 → helloServlet.jsp → helloServlet_jsp.java → 编译运⾏
PS:被翻译后的servlet在 IDEA编译的 Tomcat 的 work ⽬录中可以找到
具体可以在Tomcat启动的时候直接看到文件的绝对路径
JSP脚本
JSP的脚本:JSP定义Java代码的⽅式
- <%java代码%>:内部的Java代码翻译后,在service⽅法中。service⽅法中可以定义什么,该脚本中就可以定义什么。
- <%=表达式%>:内部的Java代码翻译后,会输出到⻚⾯上【out.print()】。输出语句中可以定义什么,该脚本中就可以定义什么。
- <%!类的成员 %>:内部的Java代码翻译后,在jsp转换后的java类的成员位置。
<div><% pageContext.setAttribute("name","zhangsan"); %></div>
<div><%=pageContext.getAttribute("name") %></div>
<div><%! int a=0;int b=0; %></div>
JSP注释
JSP注释: 不同的注释可⻅范围是不同
- html注释: :可⻅范围 JSP源码、翻译后的servlet、⻚⾯显示html源码
- java注释://单⾏注释 /多⾏注释/ :可⻅范围 JSP源码、翻译后的servlet
- JSP注释:<%–注释内容–%>:可⻅范围 JSP源码
jsp | java |
---|---|
html元素 | out.write(“html元素”) |
<%%> | service方法中的java代码 |
<%=表达式%> | out.print(表达式); |
<%!类的成员 %> | 类的成员 |
JSP指令 <%@指令 %>
-
page: language - 只支持java
extends
isELIgnored - 是否忽略EL表达式,false-不忽略
errorPage - 相当于出现异常后转发
-
include: 静态页面包含 file=“服务器端path”
特点: 被包含的页面[demo7]不会翻译成java文件, 直接将内容嵌入包含页面[demo6]中
-
taglib: 引入标签库[类库] url=“类库地址” prefix=“前缀”
JSP内置对象
- 参数: request, response, config
- 域对象: application, session(session=true), pageContext
- 输出: out - JspWriter(自带8kb缓冲区,关闭缓冲区 buffer=none)
- 异常: exception(isErrorPage=true)
- 自己: page
- pageContext:
- 作用1: 作为域对象使用, 可以操作其他三个域对象
- 作用2: 可以获得其他8个内置对象 getXXX()
- 作用3: findAttribute(name)
<%-- <%=1+2%> empty: 元素为null 或者 内容是空("", 空集合/数组) --%>
普通表达式: ${1+2 }, ${empty ""}, ${empty param.age} <br>
<%-- request.getParameter("username") --%>
获得参数: ${param.username} <br>
<%-- request.getAttribute("name") --%>
使用域对象: ${requestScope.name}, ${requestScope['name']}<br>
<%-- request.getHeader("user-agent") --%>
获得请求头: ${header['user-agent']} <br>
<%-- request.getServletContext().getInitParameter("driver") --%>
获得初始化参数: ${initParam.driver}<br>
<%-- request.getCookies() cookie.getName() cookie.getValue() --%>
获得cookie: ${cookie.username.value}<br>
<%-- session.getAttribute("user").getName() .getAge() --%>
session域中存的是user对象: ${sessionScope.user.age}
JSP标签(动作)
-
jsp:include 动态包含 <jsp:include page=“被包含的⻚⾯”/>
特点: 被包含的页面[demo8]会翻译成java文件, 通过一个include方法引入到包含页面[jsptag]中
-
jsp:forward 转发, <jsp:forward page=“要转发的资源” />