zoukankan      html  css  js  c++  java
  • 你不得不知道的JSP知识点

    “拥有梦想只是一种智力,实现梦想才是一种能力”
    你好,我是梦阳辰!期待与你相遇!

    在这里插入图片描述

    01.JSP概述

    在Java程序中存在前端的代码。扩展功能时,改变前端代码时,需要重新编译。而JSP可以很好的解决了这个问题。

    JSP是什么?
    JavaServer Pages
    基于java语言实现的服务器端页面。
    JSP是JavaEE规范之一。

    JSP文件通常存放在什么位置?
    JSP可以放到WEB-INF目录外。
    在实际开发中,有很多是将JSP放到WEB-INF目录中,保护JSP。
    WEB-INF目录中的数据是相对安全的。

    JSP文件的后缀。
    默认是.jsp
    但是jsp文件的后缀也可以修改的,通过CATALINA_HOME/conf/web.xml文件。

    JS和JSP的区别
    JS:javaScript,运行在浏览器中,和服务器没有关系。

    JSP:JavaServer Pages,运行在服务器中,JSP底层就是java程序,运行在JVM中。其翻译生成的class文件,在CATALINA_HOME/work目录下。

    JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

    JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

    JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

    JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

    JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

    02.JSP的执行原理

    浏览器上访问的路径虽然是.jsp结尾,访问的是jsp文件,其实底层执行的是jsp对应的java程序。
    Tomcat服务器负责将jsp文件翻译生成.java源文件,并且将java源文件编译生成.class字节码文件。
    Tomcat服务器内置了一个JSP翻译引擎,专门负责翻译JSP文件,编译java源文件。

    index.jsp会被翻译生成index_jsp.java,编译生成index_jsp.class
    index_jsp这个类继承了HttpJspBase,而HttpJspBase继承了HttpServlet。
    所以说JSP就是Servlet,只不过职责不同,JSP强项是做页面展示。

    通过学习JSP语法,你就可以在JSP中写java程序,比如:

    //_jspService方法中
    <%
    java程序
    %>
    //出现在类中
    <!%
    java程序
    %>
    

    在JSP文件中编写的HTML,CSS,JavaScript都以字符串的形式被翻译到:out.wirter(“这里”)。将其翻译成.java源代码,就是JSP规范。

    与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
    与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。

    与静态HTML相比:静态HTML不包含动态信息。

    第一次访问jsp文件
    启动JSP翻译引擎
    需要一个翻译的过程
    需要一个编译的过程
    需要Servlet对象创建的过程
    init方法调用
    service方法调用…

    jsp也是单实例多线程环境下运行的一个Servlet对象。

    只要jsp文件改动,就会被重新翻译(根据最后修改时间)。

    03.JSP语法

    小脚本
    1.jsp注释(不会翻译到java源文件中)

    <%--
    --%>
    

    2.关于jsp的小脚本scriptlet:

    <%
    java语句
    %>
    

    小脚本的java语句被翻译到Servlet的service方法中,所以小脚本必须编写“java语句”,java语句以分号结尾。

    3.在JSP文件中编写的HTML,CSS,JavaScript都以字符串的形式被翻译到:out.wirter(“这里”)。

    4.jsp规范,就是sun公司制定好的一些翻译规则,按照翻译规则进行翻译,生成对应的java源程序。不同的web服务器,翻译的结果是完全相同的。

    5.小脚本的数量随意,可以多个,小脚本中编写的java程序出现在service方法中,service方法的代码时有执行顺序的,所以小脚本的程序也是有顺序的。

    6.方法不可以嵌套,方法中的局部变量不能用pritvate,public修饰,不能编写静态语句块。

    声明语法格式

    1.jsp的声明语法格式:

    <%!
    实例变量
    静态变量
    方法
    静态语句块
    构造函数
    ......
    %>
    注:声明块中的java程序会被jsp翻译引擎翻译到service方法之外。
    声明块中不能直接编写java语句(因为在类中)。
    可以定义方法,声明变量。 
    

    2.关于jsp的九大内置对象
    1.什么是内置对象?
    可以在jsp文件中拿来使用的引用。

    2.九大内置对象名称。

    内置对象名称               完整类名
    pageContext(页面范围)    javax.servlet.jsp.PageContext
    request(请求范围)       javax.servlet.http.HttpServletRequest
    session(会话范围)       javax.servlet.hhtp.HttpSession
    out (应用范围)          javax.servlet.jsp.JspWriter
    response(响应)                 javax.servlet.http.HttpServletResponse
    config(Servlet配置信息对象)                  javax.servlet.ServletConfig
    exception                java.lang.Throwable 异常引用(isErrorPage="true")
    page                     java.lang.Object[page=this] 很少用
    

    以上内置对象只能在service方法中直接使用。

    3.<% out.print();%>
    等同于
    <%= %>
    

    4.动态的输出h1到h6标题字

    <% 
    for(int i=1;i<=6;i++){
    	
    %>
    <h<%=i %>>标题字</h<%=i 5>>
    <% 
    }
    %>
    

    04.jsp指令

    1.指令的作用
    指导jsp的翻译引擎如何翻译jsp代码。

    2.jsp中共三个指令。

    *page              页面指令
    *include           包含指令
    *taglib            标签库指令
    
    

    3.指令的使用语法格式:

    <%@指令名 属性名=属性值 属性名=属性值......%>
    

    4.page指令,常用的属性
    contentType(设置jsp的响应内容类型)
    pageEncoding(设置jsp响应时的 字符编码方式)

    <%@page contentType="text/html; pageEncoding=UTF-8"%>
    

    import(组织导入)

    <%@page import="java.util.Date" %>
    

    session(设置当前jsp页面中是否可以直接使用session内置对象)

    <%=session %>
    关于page指令中的session属性:
    -session="true"
    表示在当前JSP中可以直接使用内置对象session
    
    程序执行的时候获取当前的session会话对象,若获取不到则新建session对象。
    -session="false"
    表示在当前JSP中不可以直接使用内置对象session
    
    
    

    errorPage(错误页面)
    当前页面出错之后要跳转的页面。

    <%@page contentType="text/html; charset=UTF-8" errorPage="页面地址" %>
    

    isErrorPage(是否是错误页面)
    isErrorPage=“false” 表示内置对象exception无法使用。【缺省情况位false】
    isErrorPage=“true” 表示内置对象exeption可以使用。

    使用内置对象exception打印异常堆栈追踪信息。

    <%
    exception.printStackTrace();
    

    isELIgnored(是否是EL表达式)

    include指令

    <body>       
    <%@include file="地址" %>
    </body>
    包含展示地址页面的内容
    
    

    优点:便与维护。
    在网页中有一些主体框架,例如:网页头、网页脚,这些都是固定不变的。
    我们可以将网页头和网页脚等固定不变的单独编写到某个jsp文件中。

    底层实现原理
    include实现原理:
    1.编译器包含
    2.a.jsp包含b.jsp,底层功一个java源文件,一个class字节码文件,翻译器包含/编译器包含/静态联编
    3.静态联编的时候,多个jsp中可以共享同一个局部变量。
    因为最终翻译之后service方法只有一个。

    jsp的动作

    语法格式:<jsp:动作名 属性名=属性值 属性名=属性值...>
    </jsp:动作名>
    

    转发(是一次请求)

    <jsp:forward page="/index2.jsp"></jsp:forword>
    

    重定向

    //java实现
    response.serdRedirect(request.getContextPath()+"/index2.jsp");
    

    jsp主要用于页面展示,最好在jsp文件中少的编写java源代码。以后会通过EL表达式+JSEL标签库来代替jsp的java源代码。当然使用某些动作也能代替java源代码。

    include动作
    1.a.jsp包含b.jsp,底层分别生成两个java源文件,两个class字节码文件。
    2.编译阶段并没有包含,编译阶段是两个独立的class字节码文件,生成两个Servlet,两个独立的service方法。
    3.使用include动作属于运行阶段包含,实际上是在运行阶段a中的service方法调用了b中的service方法,达到了包含效果。
    4.a.jsp包含b.jsp,若两个jsp文件中有重名的变量,只能使用动态包含。其余都可以使用静态包含。
    5.include动作完成的动态包含,被称位动态编联。

    ” 你怎么过一天,就怎么过一生“

    关注公众号【轻松玩编程】回复关键字“电子书”,“计算机资源”,“Java从入门到进阶”,”JavaScript教程“,“算法”,“Python学习资源”,“人工智能”等即可获取学习资源。
    在这里插入图片描述

    以梦为马,不负韶华。
  • 相关阅读:
    Bitmap和Drawable浅谈
    自定义圆边图片控件
    JAVA入门到精通-第62讲-复杂查询
    JAVA入门到精通-第61讲-复杂查询
    JAVA入门到精通-第60讲-sqlServer基本查询
    JAVA入门到精通-第58讲-SQLserver数据类型
    JAVA入门到精通-第59讲-sqlServer基本查询
    JAVA入门到精通-第56讲-查询分析器
    JAVA入门到精通-第57讲-SQLserver数据类型
    JAVA入门到精通-第55讲-sql server基本使用
  • 原文地址:https://www.cnblogs.com/huangjiahuan1314520/p/13212307.html
Copyright © 2011-2022 走看看