【JavaWeb】之JSP

简介: 【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),如下图:

ab7156db40c24497ad268872cbbbb70e.png


 

当打开.java文件时发现其中的内容如下图(继承了HttpJsBase类):

999c390dbc5b4a37a3dccd5d077cc9d5.png

而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)

16dd108232b64a489e0425b8775cd86f.png

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全栈学习技术清单~

相关文章
|
3月前
|
存储 前端开发 Java
JavaWeb基础6——Request,Response,JSP&MVC
Request继承体系、获取请求头行体的方法、IDEA使用模板创建Servlet、请求参数中文乱码解决、请求转发、Respones重定向、Response响应字节字符数据、JSP、EL 表达式、JSTL标签、MVC模式和三层架构
JavaWeb基础6——Request,Response,JSP&MVC
|
6月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
46 0
|
6月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
29 0
|
7月前
|
前端开发 JavaScript Java
Jsp在Javaweb中扮演什么角色?
Jsp在Javaweb中扮演什么角色?
|
7月前
|
SQL 缓存 Oracle
JavaWeb之JSP(下)
这篇文档是关于Java Web中JSP(Java Server Pages)技术的主要内容包括:JSP的常用命令使用,EL表达式的概念,和使用,JSTL表达式的概念和使用方式的总结.
|
7月前
|
开发框架 前端开发 Java
JavaWeb之JSP(上)
这篇文档是关于Java Web中JSP(Java Server Pages)技术的介绍。作者首先说明了内容来源于个人在CSDN的原创文章,并遵循CC 4.0 BY-SA版权协议。文档主要内容包括:JSP的基本概念,它是一种动态网页技术,用于将页面逻辑与设计分离,便于开发快速、跨平台的Web应用。接着,讨论了JSP出现的原因,即为了改进servlet展示信息的不便。文档还详细介绍了如何在JSP中嵌入Java代码,包括声明、表达式和程序代码标签的使用,以及page指令的示例。
|
7月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
185 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
7月前
|
XML 安全 Java
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
106 1
|
7月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
106 0
|
7月前
|
测试技术 数据库 数据安全/隐私保护
JavaWeb+JSP+SQL server学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)
JavaWeb+JSP+SQL server学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)
231 0