【JavaWeb】JSP
前言
本文为JavaWeb基础JSP相关知识详细介绍~,Java全栈学习路线可参考: 【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
一、什么是JSP
- Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态web技术!
- JSP的主要作用是代替Servlet程序回传HTML页面的数据
JSP的特点:
- 写JSP就像在写HTML
JSP与HTML的区别:
- HTML只给用户提供静态的数据
- JSP页面中可以嵌入JAVA代码,为用户提供动态数据
二、JSP原理
1.JSP原理简介
- JSP是在服务器内部工作的
- IDEA中使用Tomcat会在IDEA的Tomcat中产生一个work目录,在电脑中的地址:
C:\Users\J\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\bd396c0d-06d6-4a53-b293-bb717de8947c\work\Catalina\localhost\ROOT\org\apache\jsp
- JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏输入路径),Tomcat服务器会将此JSP页面翻译成为一个Java源文件,并对其进行编译成为.class字节码文件(一个.java,一个.class),如下图:
当打开.java文件时发现其中的内容如下图(继承了HttpJsBase类):
- 而HttpJspBase类直接继承于HttpServlet类,即JSP翻译出来的Java类间接继承于HttpServlet类,证明JSP页面是一个Servlet程序JSP页面实际上会转变成java程序。
- 浏览器向服务器发送请求,不管访问什么资源,其实都在访问Servlet!JSP最终也会被转换成java类!
- JSP本质上就是Servlet!包含以下方法:
//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//JSPService
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
2.一个JSP做了什么
(1)判断请求
(2)内置一些对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //application
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //当前 page
HttpServletRequest request //请求
HttpServletResponse response //响应
(3)输出页面前增加的代码
response.setContentType("text/html"); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
(4)以上的这些对象可以在JSP页面中直接使用
- 在JSP页面中只要是JAVA代码就会原封不动的输出
- 如果是HTML代码,就会被转换为:
out.write("<html>\r\n"); // 以这样的格式,输出到前端
三、JSP基础语法
1.JSP表达式
<%--JSP表达式
<%= 变量或者表达式%>
作用:用来将程序的输出,输出到客户端
--%>
<%= new java.util.Date()%>
2.JSP脚本片段
<%--jsp脚本片段--%>
<%
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum += i;
}
out.println("<h1>Sum=" +sum+ "<h1>" );
%>
脚本片段的再实现
<%
int x = 10;
out.println(x);
%>
<p>这是一个JSP文档</p>
<%
int y = 20;
out.println(y);
%>
<%--在代码中嵌入HTML元素--%>
<%
for (int i = 0; i < 5; i++) {
%>
<h1>Hello world <%=i%></h1>
<%
}
%>
3.JSP声明
- JSP声明:在JSP中嵌入Java代码即可,会被编译到JSP生成Java的类中!非JSP声明的代码会被生成到_jspService方法中!
<%!
static{
System.out.println("Loading Servelet!");
}
private int globalVar = 0;
public void oi(){
System.out.println("进入了方法oi");
}
%>
- JSP的注释不会在客户端显示,HTML的注释会显示!
<%片段%>
<%=表达式%>
<%!声明%>
<%--JSP注释--%>
<!--HTML注释-->
四、JSP指令
1.page指令
- page指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用域被它所在的JSP页面和其包含的文件。页面指令一般位于JSP页面的顶端,但是可以放在JSP页面的任何位置,无论把<%@page%>指令放在JSP文件中的哪个地方,它的作用范围都是整个JSP页面。
以定制错误页面为例使用JSP指令
<%--定制错误页面--%>
<%@ page errorPage="error/500.jsp" %>
2.include指令
- include指令用于在当前JSP页面中加载需要插入的文件代码,即为页面插入一个静态文件,如JSP页面、HTML页面、文本文件或一段Java程序,这些加载的代码和原有的JSP代码合并成一个新的JSP文件。
<%--
@include:会将两个页面合二为一
--%>
<%@include file="common/header.jsp"%>
<hr>
<h1>网页主体</h1>
<hr>
<%@include file="common/footer.jsp"%>
3.taglib指令
- taglib指令用来指定页面中使用的标签库以及自定义标签的前缀。taglib指令语法格式:
<%@taglib uri="tagLibraryURI" prefix="tagPrefix" %>
- uri(统一资源标识符)属性用于指定标记库的存放位置,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签,无默认值。uri属性可以是在TLD(标记库描述符)文件或web.xml文件中定义的标记库的符号名,也可以是TLD文件或JAR文件的相对路径。
- prefix属性用于指定标记库中所有动作元素名中使用的前缀,无默认值。
五、9大内置对象
- request:请求对象
- response:响应对象
- pageContext:JSP的上下文对象
- session:会话对象
- application:ServletContext对象
- config:ServletConfig对象
- out:JSP输出流对象
- page:指向当前JSP的对象
- exception:异常对象
4大域对象
- pageContext:客户端向服务器发送请求,产生的数据只在当前的页面中有效
- request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的
- session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
- application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据
<%
pageContext.setAttribute("name1","oi1号");//保存的数据只在一个页面中有效
request.setAttribute("name2","oi2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","oi3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","oi4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
后记
Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154190.html