JSP
java server page :是Java的一种服务器端页面的技术。
就是为了解决Servlet处理HTML的不方便(是Java代码中夹杂着HTML,以Java代码为主体)。
本质上: 是HTML代码中夹杂着Java代码,它是以HTML为主体。其实,JSP也是Servlet。
- 文件的后缀名是
.jsp
JSP的处理逻辑
- 当浏览器第一次请求某个 .jsp 文件的时候
- Tomcat会找到对应的 .jsp 文件,然后自动将其翻译为一个 .java 文件
- 继而自动编译 .java 文件为 .class 文件
idea下的目录:
C:\Users\Administrator.IntelliJIdea2019.1\system\tomcat\
Unnamed_code2
\work\Catalina\localhost\0731\org\apache\jsp
我idea下的目录
C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_8_5_57_MyJavaCode_3\work\Catalina\localhost\JSP\org\apache\js
可见 jsp 文件编译完 就是一个 Serlvet 。 它方便了以Servlet来基础的动态页面技术的开发。
Page指令
用于进行JSP页面的一些相关的设置。
<%@ page 属性名1="属性值1" %>
<!--
pageEncoding: 属性用于告诉JSP的翻译器(翻译.java)文件此.jsp文档使用的编码方式。
contentType: 设置resp的 contentType。
-->
<%@ page pageEncoding="UTF-8"
contentType="text/html; utf-8" %>
scriptlets 语法
格式:
<% java代码; %>
本质上是 _jspService 方法体的一部分。
申明语法
<%!
java代码
%>
注意: 它的内容会放置在Java类的成员位置。
JSP表达式
<%= Java代码 %>
作用就是调用输出流进行回写。
- 不能以分号结束。
- 代码要作为参数传递。
JSP注释
格式:
<%-- jsp的注释内容 --%>
这种JSP注释,会在翻译为java文件的时候,被忽略。
在JSP页面中可以存在以下形式的注释:
注释格式 | 最终效果 |
---|---|
<!--原生的HTML注释--> | 在生成的.java文件中可以看到,浏览器中通过html源码会看到。 |
<%--jsp的注释内容--%> | 在生成的.java文件中看不到,浏览器通过html源码也看不到。 |
代码中的Java单行或多行注释 | 在生成的.java文件中能看到,浏览器通过html源码看不到。 |
https://blog.csdn.net/u014785687/article/details/74078512
JSP的内置对象(必须背会)
JSP规范中规定了一些固定的名称的变量,这些变量称为内置对象
。我们在JSP代码中,可以直接使用。
注意: 只有 isErrorPage = “true” 的时候,当前页面中才能访问到全部的 9个内置对象。
- request : 当前http请求对象
- response : 当前http响应对象
- session: 当前的session会话
- application : 当前的ServletContext域对象
- pageContext: 当前的页面域对象
- page : 当前jsp生成的java对象
- out: 输出对象
- config: 当前对应的serlvetConfig对象。
- exception: 异常页面中,表示当前发生的异常对象。
<!--典型的在jsp页面中获取当前项目的名称-->
<%=request.getContextPath()%>
<%
//pageContext对象是四(域对象)合一的对象
// 表示将数据存放到对应的域对象中。
// pageContext.setAttribute("name" , "value"); //就是往PageContext中放置内容
// 它的 setAttribute 还支持第三个int型的值:
// PageContext.PAGE_SCOPE =1 ---> pageContext.setAttribute("name" , "value",PageContext.PAGE_SCOPE) 等价于 pageContext.setAttribute("name" , "value");
// PageContext.REQUEST_SCOPE=2 ---> pageContext.setAttribute("name" , "value",PageContext.REQUEST_SCOPE) 等价于 request.setAttribute("name" , "value");
// PageContext.SESSION_SCOPE=3 ---> pageContext.setAttribute("name" , "value",PageContext.SESSION_SCOPE) 等价于 session.setAttribute("name" , "value");
// PageContext.APPLICATION_SCOPE = 4 ---> pageContext.setAttribute("name" , "value",PageContext.APPLICATION_SCOPE) 等价于
// application.setAttribute("name", "value");
//该对象的getAttribute方法也支持传递范围去查询。
// pageContext.getAttribute(, )
//该对象的removeAttribute方法也支持传递范围去移除。
// pageContext.removeAttribute(, );
//返回指定范围域对象中的 name 名称列表
// pageContext.getAttributeNamesInScope(int);
//【特色功能】: 它可以自动根据范围,从小-> 到大 获取对应的 key 的值。如果能找到就返回。
// pageContext.findAttribute("key");
out.print(pageContext.findAttribute("aaa"));
%>
常规的开发模式
JSP页面主要负责数据的展现。 通过借助 9大内置对象。操作后台Servlet传递过来的各种数据,进行展示的逻辑书写。