JSP详解(一):页面构成、EL表达式

什么是JSP?

  1. JSP:Java Server Pages,其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签

  2. Jsp是一种动态网页技术标准,也是JEE标准

  3. Jsp与Servlet一样,是在服务器端执行的

jsp就是servlet,servlet不是jsp

常见动态网站开发技术对比

  • Jsp:Java平台,安全性高,适合做大型开发,企业级的web程序。适合做企业级web开发。电子银行、网上证劵交易所,中国移动网上营业厅,中国铁路在线订票系统

  • Asp:.Net平台,简单易学。但是安全性以及跨平台性较差。asp.net托拉拽可视化开发,微软配套软件

  • Php:简单、高效、成本低、开发周期短,适合中小型企业的Web应用程序开发。

    开发组合:LAMP(操作系统Linux+服务器TomCat+数据库MySql+PHP)

都是server page sp。

JSP页面元素的构成

  • 静态内容:html元素

  • 小脚本: <% 在这之中的都是小脚本 %>

  • 注释:

    除了html注释(客户端可见)外,
    也有jsp注释<%-- jsp【注释】 --%>(客户端不可见),
    jsp脚本中的java注释  总共三种注释
  • 指令:

    <%@page import="java.util.ArrayList"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  • 声明

    <%!
    //【声明】(声明函数和变量)
    String s ="zhangsan";
    int add(int x, int y){ //计算x+y的值
        return x+y;
    }
    %>
  • 表达式

    <!--【表达式】,不需要分号 -->
    你好,<%=s %><br>
    x+y=<%=add(10,5) %><br>

sample:

指令

jsp指令有三种:

  • page指令

  • include指令

  • taglib指令

page指令

功能:用来描述页面的一些属性

  • language属性:指定脚本语言,只支持java

  • import属性:导入包的指令,唯一一个可以多次使用的属性,导入多包也可以用","分割包名

pageEncoding属性和contentType属性

都是设置编码解码方式,但是,pageEncoding是jsp页面保存到硬盘上,编码的码表。而contentType代表服务器给客户端发送jsp数据时,这个jsp的解码表,这两个码表应该相同,否则可能会出现乱码的情况。

注意:在设置其中一个属性后,另一个属性的值也会变为这个属性的值,即服务器自动将码表转换一致。

image-20211210110327855
  • autoFlush属性和buffer属性:jsp向浏览器输出内容,输出过程中,当缓冲区满了的时候,是否自动刷新出缓冲区中的数据。也可以使用buffer设置缓冲区的大小。具体查看内置out对象。

  • errorPage和isErrorPage:指定处理异常的页面,是否处理异常,具体请查看内置exception对象

    正确的异常处理方式

    上面的方式虽然可以使用,但是太过于繁琐了,我们可以在 web.xml 中根据http状态码设置转向页面。

    只要出现了404错误,就会跳转到 error.jsp 页面中去处理。

也可以根据异常作出相应的处理:

只要出现了 java.lang.Exception 就跳转到 error.jsp 页面

  • extends属性:继承属性,指定一个父类,必须是Servlet

  • info属性:指定jsp getServletInfo 的值

  • isELIgnored属性:EL表达式的开关,默认可以使用

  • session属性:boolean,是否使用session对象,如果为false,不能直接使用session内置对象

include指令

静态包含指令

  • file属性:

    静态包含原理:

所以合并,处于同一个Java类,注意变量的声明

作用:

  • 引入内容,合并页面

  • 引入代码,调用被引入代码中的方法。

动态包含原理:

taglib指令

导入标签指令

使用EL表达式,替代jsp表达式脚本

用来代替 <%= %> 表达式脚本的。

格式: &{表达式}

主要用于四个域中取出数据(application,request,session,page),即简化getAttribute…等操作的。

比如,

注意:

如果这样写 ${name},不指定域,则会从小域到大域依次查找。

最后更新于

这有帮助吗?