目录

一、JSP指令

1.JSP指令概述

2.page指令

(1)pageEncoding和contentType

(2)import

(3)errorpage和isErrorpage

(4)web.xml中配置错误页面

(5)autoFlush和Buffer

(6)isELIgnored

(7)page指令的其他属性

3.include指令

4.taglib指令

二、JSP九大内置对象

1.JSP九大内置对象

2.pageContext对象

(1)域对象功能

(2)代理其他域对象功能

(3)获取其他内置对象

三、JavaBean

1.JavaBean概述

2.JavaBean属性

3.内省

4.commons-beanutils

5.JSP与JavaBean相关的动作标签

四、EL表达式

1.EL概述

2.EL表达式格式

3.EL内置对象(11个)

(1)四个域相关内置对象

(2)两个请求参数相关内置对象

(3)两个请求头相关内置对象

(4)应用初始化参数相关内置对象

(5)Cookie相关内置对象

(6)pageContext对象

五、EL函数库

1.什么是EL函数库

2.函数库的导入

3.上面fn函数库的常见方法

4.自定义函数库


一、JSP指令

1.JSP指令概述

JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的。

JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令了。

2.page指令

page指令是最为常用的指定,也是属性最多的属性!

page指令没有必须属性,都是可选属性。例如<%@page %>,没有给出任何属性也是可以的!

在JSP页面中,任何指令都可以重复出现!

<%@ page language=”java”%>

<%@ page import=”java.util.*”%>

<%@ page pageEncoding=”utf-8”%>

这也是可以的!

(1)pageEncoding和contentType

> pageEncoding:它指定当前jsp页面的编码。在服务器要把jsp编译成.java时需要使用pageEncoding!

> contentType:等同与response.setContentType("text/html;charset=utf-8")。

> 如果两个属性只提供一个,那么另一个的默认值为设置那一个。

> 如果两个属性都没有设置,那么默认为iso-8859-1。

(2)import

import是page指令中一个很特别的属性!

import属性值对应“真身”中的import语句。

import属性值可以使用逗号隔开:<%@page import=”java.net.*,java.util.*,java.sql.*”%>

import属性是唯一可以重复出现的属性:

<%@page import=”java.util.*” import=”java.net.*” import=”java.sql.*”%>

但是,我们一般会使用多个page指令来导入多个包:

<%@ page import=”java.util.*”%>

<%@ page import=”java.net.*”%>

<%@ page import=”java.text.*”%>

(3)errorpage和isErrorpage

我们知道,在一个JSP页面出错后,服务器会响应给用户错误信息(500页面)!如果你不希望Tomcat给用户输出错误信息,那么可以使用page指令的errorPage来指定错误页!也就是自定义错误页面,例如:<%@page errorPage=”xxx.jsp”%>。这时,在当前JSP页面出现错误时,会请求转发到xxx.jsp页面。

a.jsp

<%@ page import="java.util.*" pageEncoding="UTF-8"%>
<%@ page  errorPage="b.jsp" %><%if(true)throw new Exception("哈哈~");%>

b.jsp

<%@ page pageEncoding="UTF-8"%>
<html><body><h1>出错啦!</h1></body>
</html>

在上面代码中,a.jsp抛出异常后,会请求转发到b.jsp。在浏览器的地址栏中还是a.jsp,因为是请求转发!

而且客户端浏览器收到的响应码为200,表示请求成功!如果希望客户端得到500,那么需要指定b.jsp为错误页面。

<%@ page  isErrorPage="true"%>

注意:当isErrorPage为true时,说明当前JSP为错误页面,即专门处理错误的页面。那么这个页面中就可以使用一个内置对象exception了。其他页面是不能使用这个内置对象的!

(4)web.xml中配置错误页面

不只可以通过JSP的page指令来配置错误页面,还可以在web.xml文件中指定错误页面。

web.xml

  <error-page><error-code>404</error-code><location>/error404.jsp</location></error-page><error-page><error-code>500</error-code><location>/error500.jsp</location></error-page><error-page><exception-type>java.lang.RuntimeException</exception-type><location>/error.jsp</location></error-page>

<error-code>是指定响应码;

<location>指定转发的页面;

<exception-type>是指定抛出的异常类型。

在上例中:

当出现404时,会跳转到error404.jsp页面;

当出现RuntimeException异常时,会跳转到error.jsp页面;

当出现非RuntimeException的异常时,会跳转到error500.jsp页面。

(5)autoFlush和Buffer

> autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新!默认为true,如果为false,那么在缓冲区满时抛出异常!

> buffer:指定缓冲区大小,默认为8kb,通常不需要修改!

       (6)isELIgnored

            是否忽略el表达式,默认值为false,不忽略,即支持!

        (7)page指令的其他属性

> language:指定当前jsp编译后的语言类型,默认值为java。

> info:jsp说明性信息!

> isThreadSafe:当前的jsp是否支持并发访问!

> session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象!

> extends:让jsp生成的servlet去继承该属性指定的类!

3.include指令

include指令表示静态包含!即目的是把多个JSP合并成一个JSP文件!

include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。

静态包含:当hel.jsp页面包含了lo.jsp页面后,在编译hel.jsp页面时,需要把hel.jsp和lo.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)。

4.taglib指令

在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

其中prefix表示标签的前缀,这个名称可以随便起。uri是由第三方标签库定义的,所以你需要知道第三方定义的uri。

二、JSP九大内置对象

1.JSP九大内置对象

在JSP中无需创建就可以使用的9个对象,它们是:

out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;

config(ServletConfig):对应“真身”中的ServletConfig;

page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;

pageContext(PageContext):页面上下文对象;

exception(Throwable):只有在错误页面中可以使用这个对象;

request(HttpServletRequest):即HttpServletRequest类的对象;

response(HttpServletResponse):即HttpServletResponse类的对象;

application(ServletContext):即ServletContext类的对象;

session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。

2.pageContext对象

在JavaWeb中一共四个域对象,其中Servlet中可以使用的是request、session、application三个对象,而在JSP中可以使用pageContext、request、session、application四个域对象。

pageContext 对象是PageContext类型,它的主要功能有:

域对象功能;

代理其它域对象功能;

获取其他内置对象;

(1)域对象功能

pageContext也是域对象,它的范围是当前页面。它的范围也是四个域对象中最小的!

void setAttribute(String name, Object value);

Object getAttrbiute(String name, Object value);

void removeAttribute(String name, Object value);

     (2)代理其他域对象功能

可以使用pageContext向request、session、application对象中存取数据

void setAttribute(String name, Object value, int scope):在指定范围中添加数据;

Object getAttribute(String name, int scope):获取指定范围的数据;

void removeAttribute(String name, int scope):移除指定范围的数据;

Object findAttribute(String name):依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。

<%    //向pageContext中存储数据pageContext.setAttribute("x", "X");//向request中存储数据pageContext.setAttribute("x", "XX",PageContext.REQUEST_SCOPE);//向session中存储数据pageContext.setAttribute("x", "XXX",PageContext.SESSION_SCOPE);//向application中存储数据pageContext.setAttribute("x", "XXXX",PageContext.APPLICATION_SCOPE);
%>

(3)获取其他内置对象

一个pageContext对象等于所有内置对象。这是因为可以使用pageContext对象获取其它8个内置对象:

JspWriter getOut():获取out内置对象;

ServletConfig getServletConfig():获取config内置对象;

Object getPage():获取page内置对象

ServletRequest getRequest():获取request内置对象;

ServletResponse getResponse():获取response内置对象;

HttpSession getSession():获取session内置对象;

ServletContext getServletContext():获取application内置对象;

Exception getException():获取exception内置对象;

三、JavaBean

1.JavaBean概述

JavaBean是一种规范,也就是对类的要求。它要求Java类的成员变量提供getter/setter方法,这样的成员变量被称之为JavaBean属性。

JavaBean还要求类必须提供仅有的无参构造器,例如:public User() {…}

2.JavaBean属性

JavaBean属性是具有getter/setter方法的成员变量。

也可以只提供getter方法,这样的属性叫只读属性;

也可以只提供setter方法,这样的属性叫只写属性;如果属性类型为boolean类型,那么读方法的格式可以是get或is。例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc();

注意:

(1)JavaBean属性名要求:前两个字母要么都大写,要么都小写:

private String iD;      //错误的JavaBean属性

(2)JavaBean可能存在属性,但不存在这个成员变量

public class User {
                        public String getUsername() {
                        return "zhangSan";
                        }

}

该User类有一个Username的只读属性,但并没有Username这个成员变量

3.内省

内省的目标是得到JavaBean属性的读、写方法的反射对象,通过反射对JavaBean属性进行操作的一组API。例如User类有名为username的JavaBean属性,通过两个Method对象(一个是getUsername(),一个是setUsername())来操作User对象。

(1)内省之获取BeanInfo

通过java.beans.Introspector的getBeanInfo()方法来获取java.beans.BeanInfo实例。

BeanInfo beanInfo = Introspector.getBeanInfo(User.class);

(2)得到所有属性描述符(PropertyDescriptor)

通过BeanInfo可以得到这个类的所有JavaBean属性的PropertyDescriptor对象。然后就可以通过PropertyDescriptor对象得到这个属性的getter/setter方法的Method对象了。

PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

每个PropertyDescriptor对象对应一个JavaBean属性:

String getName():获取JavaBean属性名称;

Method getReadMethod:获取属性的读方法;

Method getWriteMethod:获取属性的写方法。

(3)完成Map数据封装到User中

 @Testpublic void fun1() throws Exception {Map<String, String> map = new HashMap<String, String>();map.put("username", "admin");map.put("password", "admin123");BeanInfo beanInfo = Introspector.getBeanInfo(User.class);// 获取User类型的BeanInfo实例PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();// 获取User类型的所有JavaBean属性的属性描述符对象User user = new User();// 创建User实例// 循环遍历每个属性描述符对象for (PropertyDescriptor pd : pds) {String name = pd.getName();// 获取JavaBean属性名String value = map.get(name);// 获取Map中对应属性的值// 如果在Map中存在这个属性的值if (value != null) {Method writeMethod = pd.getWriteMethod();// 获取该属性的写方法writeMethod.invoke(user, value);// 把Map中的值写入到user对象的对应属性中}}System.out.println(user);}

4.commons-beanutils

它底层使用了内省,对内省进行了大量的简化!

使用beanutils需要的jar包:

commons-beanutils.jar;

commons-logging.jar

        (1)设置JavaBean属性

     User user = new User();BeanUtils.setProperty(user, "username", "admin");BeanUtils.setProperty(user, "password", "admin123");System.out.println(user);

       (2)获取JavaBean属性

     User user = new User("admin", "admin123");String username = BeanUtils.getProperty(user, "username");String password = BeanUtils.getProperty(user, "password");System.out.println("username=" + username + ", password=" + password);

        (3)封装Map到JavaBean对象中

     Map<String, String> map = new HashMap<String, String>();map.put("username", "admin");map.put("password", "admin123");User user = new User();// 把map中的数据封装到user对象中,要求user的属性名要与map的key一致。BeanUtils.populate(user, map);System.out.println(user);

5.JSP与JavaBean相关的动作标签

在JSP中与JavaBean相关的标签有:
            <jsp:useBean>:创建JavaBean对象;
            <jsp:setProperty>:设置JavaBean属性;

<jsp:getProperty>:获取JavaBean属性;

(1)<jsp:useBean>

<jsp:useBean id="user1" class="cn.yfy_01.User" />

上面代码表示在当前JSP页面中创建User类型的对象,并且把它保存到page域中了。

可以通过scope标签属性来指定保存的范围:

<jsp:useBean id="user2" class="cn.yfy_01.User" scope="request"/>

注意:<jsp:useBean>标签其实不一定会创建对象!!!它会先在指定范围中查找这个对象,如果对象不存在才会创建。

  (2)<jsp:setProperty>和<jsp:getProperty>

<jsp:setProperty>标签的作用是给JavaBean设置属性值,而<jsp:getProperty>是用来获取属性值。在使用它们之前需要先创建JavaBean:

<jsp:useBean id="user1" class="cn.yfy_01.User" />
<jsp:setProperty property="username" name="user1" value="admin"/>
<jsp:setProperty property="password" name="user1" value="admin123"/>用户名:<jsp:getProperty property="username" name="user1"/><br/>
密 码:<jsp:getProperty property="password" name="user1"/><br/>

四、EL表达式

1.EL概述

    (1)EL的作用

JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。

JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>

EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。

     (2)关闭EL

如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。

如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}。

      (3)EL运算符

2.EL表达式格式

操作List和数组:${list[0]}、${arr[0]};

操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;

操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。

3.EL内置对象(11个)

    (1)四个域相关内置对象

pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”);

requestScope:${requestScope.name}等同与request.getAttribute(“name”);

sessionScope: ${sessionScope.name}等同与session.getAttribute(“name”);

applicationScope:${applicationScope.name}等同与application.getAttribute(“name”);

如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。

${requestScope.emp.address.street }

等同于request.getAttribute("emp").getAddress().getStreet()

全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。

    (2)两个请求参数相关内置对象

param和paramValues这两个内置对象是用来获取请求参数的。

param:Map<String,String>类型,param对象可以用来获取参数。

paramValues:Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它。

注意:在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。

    (3)两个请求头相关内置对象

header和headerValues是与请求头相关的内置对象:

header: Map<String,String>类型,用来获取请求头。

headerValues:Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象。

    (4)应用初始化参数相关内置对象

initParam:Map<String,String>类型。它对应web.xml文件中的<context-param>参数。

    (5)Cookie相关内置对象

cookie:Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。

  (6)pageContext对象

pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,获取其他内置对象。

${pageContext.request.contextPath}

等同于pageContext.getRequest().getContextPath()

五、EL函数库

1.什么是EL函数库

EL函数库是由第三方对EL的扩展,EL函数库是由JSTL添加的。

EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!当然,不只是JSTL可以定义EL函数库,我们也可以自定义EL函数库。

  EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)}会输出3,即字符串的长度。

2.函数库的导入

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

3.上面fn函数库的常见方法

String toUpperCase(String input):把参数转换成大写

String toLowerCase(String input):把参数转换成小写

int indexOf(String input, String substring):从大串,输出小串的位置!

boolean contains(String input, String substring):查看大串中是否包含小串

boolean containsIgnoreCase(String input, String substring):忽略大小写的,是否包含

boolean startsWith(String input, String substring):是否以小串为前缀

boolean endsWith(String input, String substring):是否以小串为后缀

String substring(String input, int beginIndex, int endIndex):截取子串

String substringAfter(String input, String substring):获取大串中,小串所在位置后面的字符串

substringBefore(String input, String substring):获取大串中,小串所在位置前面的字符串

String escapeXml(String input):把input中“<”、">"、"&"、"'"、""",进行转义

String trim(String input):去除前后空格

String replace(String input, String substringBefore, String substringAfter):替换

String[] split(String input, String delimiters):分割字符串,得到字符串数组

int length(Object obj):可以获取字符串、数组、各种集合的长度!

String join(String array[], String separator):联合字符串数组!

4.自定义函数库

写一个类,写一个有返回值的静态方法;

编写itcast.tld文件,可以参考fn.tld文件来写,把itcast.tld文件放到/WEB-INF目录下;

在页面中添加taglib指令,导入自定义标签库。

package cn.yfy.el.function;public class Test {public static String show(){return "骑士总冠军";}
}
<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>yfy</description><display-name>yfy-function</display-name><tlib-version>1.0</tlib-version><short-name>fy</short-name><uri>http://java.yfy.com/jsp/jstl/functions</uri><function><name>show</name><function-class>cn.yfy.el.function.Test</function-class><function-signature>java.lang.String show()</function-signature></function>
</taglib>
<%@ taglib prefix="fy" uri="http://java.yfy.com/jsp/jstl/functions" %><body><h1>${fy:show()}</h1></body>

Java-Web JSP指令、javabean和EL表达式相关推荐

  1. Java Web Jsp

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

  2. Java/web/jsp根据pdf模板生成荣誉证书PDF文件

    Java/web/jsp根据pdf模板生成荣誉证书PDF文件 1.前言 最近博主在开发一个大学生学分管理系统,按照对方用户的要求,他们需要一个生成PDF荣誉证书的功能. 于是Java根据pdf模板生成 ...

  3. #java #web jsp开发入门(web应用概述、tomcat简介、编写步骤)

    #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 目录 #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 1.w ...

  4. 基于ssm影视论坛系统java web jsp电影评价影评系统源码和文档

    开发环境: jdk 8 intellij idea tomcat 8.5.40 mysql 5.7 所用技术: Spring+SpringMVC+MyBatis layui jsp 演示视频: 基于s ...

  5. 企业员工管理系统java web jsp javaee项目

    企业员工管理系统java web jsp javaee项目 [源码+数据库+文档+PPT]齐全 企业员工信息管理系统主要用于实现公司的员工相关信息管理,基本功能包括:密码修改.员工管理.部门管理.出勤 ...

  6. JSP学习 三大指令、九个内置对象、JavaBean、EL表达式

    1.page-->最复杂:<%@page language="java" info="xxx"...%>* pageEncoding和cont ...

  7. JSP复习(二):EL表达式

    2019独角兽企业重金招聘Python工程师标准>>> EL表达式:从JSP2.0开始成为规范,是的原来用scriptlet和表达式完成的事情,EL都能完成 1.配置相关 ${app ...

  8. 五、Web服务器——MVC开发模式 EL表达式 JSTL 学习笔记

    今日内容 1. JSP:1. 指令2. 注释3. 内置对象2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令* 作用:用于配置JSP页面,导入资源文件* ...

  9. jsp脚本、jsp标准动作、EL表达式、JSTL标签

    https://blog.csdn.net/gx_hxl/article/details/79032331 https://blog.csdn.net/a731604348/article/detai ...

最新文章

  1. 线程 信号量 java_JAVA多线程-Semaphore信号量
  2. Python3 正则表达式特殊符号及用法(详细列表)
  3. 33、Power Query-统计员工完成业绩的记录
  4. python调用c++类内静态函数_Python与C++混合编程 - 2.4 - 使用局部静态对象
  5. 05 state与setState、单向数据流
  6. Android获取手机联系人或通讯录的基本信息(如姓名、电话)
  7. 【Python学习】内置函数(不断更新)
  8. 【Python】一种pyahocorasick库安装方法
  9. 点击换衣html js代码,js实现网页跳转脚本
  10. A Comprehensive Introduction to Torchtext
  11. 调用百度地图 API 移动地图时 maker 始终在地图中间 并根据maker 经纬度 返回地址...
  12. Pyspark学习入门二:sort排序学习
  13. html文本框能不能粘贴图片,[免费开源]wangEditor富文本框解决方案,粘贴自动上传图片(截图上传神器啊!),可嵌入视频,vue和jquery的BS框架都能用,不能用在cs哦!...
  14. 本模型基于Cruise软件搭建整车模型,基于Matlab/Simulink软件搭建整车控制模块,包括整车模式控制、扭矩分配
  15. WinCC 扇形旋转制作
  16. 【Ignite】使用数据库软件DBeaver管理Apache Ignite
  17. vv7无法启动显示发动机故障_启动系统故障引起的发动机无法启动诊断方法
  18. 机器学习期末考试满分试卷答案
  19. 个人笔记:kali firefox安装hackbar插件
  20. 使用remoting 代替c# web service实现航班eterm命令发送和接收

热门文章

  1. 数学建模——主成分分析算法详解Python代码
  2. AI扫雷有多牛?他国纷纷来求师学艺(附完整教程)
  3. git——远程库和本地库
  4. 树hash树BtreeB+tree
  5. 合并odex和少dex的apk为完整的apk文件
  6. android记录登录状态
  7. 第四章 数学知识【完结】
  8. SQL99标准中的查询(MySQL)
  9. Spring boot排除依赖
  10. Synchronize对象属性改变