博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb之Jsp/EL(八)
阅读量:5273 次
发布时间:2019-06-14

本文共 7174 字,大约阅读时间需要 23 分钟。

JSP(Java Server Page)

 

1. jsp简单介绍

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术JSP这门技术的最大的特点在于,写jsp就像在写html,但:它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版

 

2. jsp应用

servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。其原因为,程序的数据通常要美化后再输出:让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做即Servlet不再负责显示页面,而由JSP来完成!而Servlet专注与控制层内容!

3. jsp原理

当客户请求的是JSP页面时,服务器会查看JSP对应的Servlet是否存在,如果存在,那么直接调用Servlet的service()方法来处理请求。如果不存在,那么服务器会先把JSP编译成.java,再把.java编译成.class,然后调用service()方法。当这个JSP页面,第二处理请求时,就直接调用直身的service()方法了

4. jsp代码块

<%...%>:代码片段。代码片段会原模原样的出现在真身中,不会有变动。正常的Java代码都可以在代码片段中出现;<%=…%>:表达式。表达式会在“真身”中输出,例如:<%=a%>,对应真身中的out.print(a)<%!...%>:声明。声明对应“真身”中的属性和方法jsp注释<%-- … --%>,注释中的内容会被JSP编译系统忽略!HTML的注释:
,因为最终向客户端响应的内容还是HTML,所以在HTML注释中的内容还是看不到的

5. JSP隐藏(隐含、内置)对象

隐藏对象是在JSP页面中无需创建就可以直接使用的变量Request		javax.servlet.http.HttpServletRequestResponse	javax.servlet.http.HttpServletResponseConfig		javax.servlet.ServletConfigPage		当前Servlet实例thissession		javax.servlet.http.HttpSessionapplication	java.servlet.ServletContextexception	java.lang.ThrowableOut		javax.servlet.jsp.JspWriterpageContext	javax.servlet.jsp.PageContext

6. Jsp四大域对象

pageContext 对象是PageContext类型,本身是域对象,而且还可以操作所有域对象,还可以获取其他隐藏对象操作所有域(四个域):可以使用pageContext对象操作所有域对象,在getAttribute()、setAttribute()、removeAttribute()三个方法中多添加一个参数,int scope来指定范围。在PageContext类中包含四个int类型的常量表示四个范围:REQUEST_SCOPE:request范围SESSION_SCOPE:session范围APPLICATION_SCOPE:application范围

7. pageContext对象获取隐藏对象

获取其他隐藏对象:可以使用pageContext获取其他隐藏对象。JspWriter getOut():获取out隐藏对象;ServletConfig getServletConfig():获取config隐藏对象;Object getPage():获取page隐藏对象;ServletRequest() getRequest():获取request隐藏对象;ServletResponse() getResponse:获取response隐藏对象;HttpSession getSession():获取session隐藏对象;ServletContext getServletContext():获取application隐藏对象;JspException getException():获取exception隐藏对象转换后的JspException对象

8. jsp指令

<%@指令名  属性名="值"  属性名="值"  %>一般都会把JSP指令放到JSP文件的最上方,但这不是必须的JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令注意: Tomcat编译系统会根据JSP的指令信息来编译JSP,生成Java文件。在生成的Java文件中,不存在指令信息!---------------page指令-->import属性---------------	import="java.util.*,java.text.*"	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>	errorPage="error.jsp"	还可以配置web.xml配error-page,如果都配置了并且能处理,那么用errorPage	isErrorPage="false"  是一个exception开关,改为true就有	isELIgnored="false"不会忽略EL,	contentType="text/html; charset=UTF-8"与response.setContentType()一样	pageEncoding="UTF-8":指明了保存和读取jsp页面时采用什么编码	在没有contentType时,同时还有contentType的作用	autFlush和buffer一般我们也不会去特意设置,都是保留默认值	常用的属性:	import pageEncoding ---------------iweb.xml配置error页面---------------
500
/error500.jsp
java.lang.Exception
/error.jsp
---------------include指令---------------include指令表示静态包含!include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。两个页面合并成一个文件,然后再编译成Servlet(Java文件)**动态包含是会为两个JSP页面都生成servlet,然后1.jsp的“真身”中会调用2.jsp的“真身”的_jspService()方法而已例如1.jsp
---------------taglib指令---------------JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>其中prefix表示标签的前缀,这个名称可以随便起。uri是由第三方标签库定义的,所以你需要知道第三方定义的uri

13. Jsp动态标签

JSP动态标签是JSP自己的标签,不是由第三方提供的,所以使用JSP动态标签时无需使用taglib指令“导包”。JSP动态标签的格式为:
无论是自定义的JSP标签,还是JSP自己的动态标签,还有第三方的标签,最终都会对应一组方法的调用include动态标签include标签是动态包含,与include指令不同,include标签与RequestDispatcher.include()方法的功能是相同的用法:
forward动态标签forward标签的作用是请求转发!forward标签的作用与RequestDispatcher.forward()方法相同用法
useBean、setProperty、getProperty动态标签
<%=p1%>

 

EL

1. JSP2.0简介

JSP2.0要把html和css分离、要把html和javascript分离、要把Java代码块替换成标签。标签的好处是非Java人员都可以使用。JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>

2. 什么是EL?

EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出EL表达式的格式:${…},例如:${1+2}在使用EL表达式时,要求page指令的isELIgnored属性为false。这样JSP在编译成.java时,才不会忽略EL表达式如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“\”,例如:\${1+2}

3. EL中隐藏对象

EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐含、内置)对象。在EL中一共有11个隐藏对象,它们都与Map相似----------------操作操作对象的方式----------------1). 操作List和数组:${list[0]}、${arr[0]};2). 操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;3). 操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)----------------隐式对象----------------隐式对象名称		类型pageContext		javax.servlet.jsp.PageContext	和jsp隐式对象完全一样pageScope		java.util.Map			页面范围中的数据requestScope		java.util.Map	sessionScope		java.util.Map	applicationScope	java.util.Map	header			java.util.Map	headerValues		java.util.Map	param			java.util.Map	paramValues		java.util.Map	intiParam		java.util.Map	cookie			java.util.Map
key:是cookie的name,value是cookie对象本身----------------隐式对象说明----------------1). param:param是Map
类型!param对象可以用来获取参数,与request.getParameter()方法相同 注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而 不是null。这一点与使用request.getParameter()方法是不同的2). paramValues:paramValues是Map
类型,当一个参数名,对应多个参数值时可以使用它3). headerValues:headerValues是Map
类型。当一个请求头名称,对应多个值时,使用该对象4). initParam:initParam是Map
类型。它对应web.xml文件中的
参数5). cookie:cookie是Map
类型,其中key是Cookie的名字,而值是Cookie对象本身----------------操作所有域(四个域)----------------可以使用pageContext对象操作所有域对象,在getAttribute()、setAttribute()、removeAttribute()三个方法中多添加一个参数,int scope来指定范围。在PageContext类中包含四个int类型的常量表示四个范围: REQUEST_SCOPE:request范围; SESSION_SCOPE:session范围; APPLICATION_SCOPE:application范围示例: pageContext.setAttribute("user",user,pageContext.REQUESTSCOPE);----------------获取其他隐藏对象----------------可以使用pageContext获取其他隐藏对象。JspWriter getOut(): 获取out隐藏对象;ServletConfig getServletConfig(): 获取config隐藏对象;Object getPage(): 获取page隐藏对象;ServletRequest getRequest(): 获取request隐藏对象;ServletResponse getResponse(): 获取response隐藏对象;HttpSession getSession(): 获取session隐藏对象;ServletContext getServletContext(): 获取application隐藏对象;JspException getException(): 获取exception隐藏对象转换后的JspException对象示例,如何调用: pageContext.request.contextPath

4. EL函数库

EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是由JSTL添加的EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!当然,不只是JSTL可以定义EL函数库,我们也可以自定义EL函数库导入函数库<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>EL函数库介绍<%String[] strs = {"a", "b","c"};List list = new ArrayList();list.add("a");pageContext.setAttribute("arr", strs);pageContext.setAttribute("list", list);%>${fn:length(arr) }
${fn:length(list) }
${fn:toLowerCase("Hello") }
${fn:toUpperCase("Hello") }
${fn:contains("abc", "a")}
${fn:containsIgnoreCase("abc", "Ab")}
${fn:contains(arr, "a")}
${fn:containsIgnoreCase(list, "A")}
${fn:endsWith("Hello.java", ".java")}
${fn:startsWith("Hello.java", "Hell")}
${fn:indexOf("Hello-World", "-")}
${fn:join(arr, ";")}
${fn:replace("Hello-World", "-", "+")}
${fn:join(fn:split("a;b;c;", ";"), "-")}
${fn:substring("0123456789", 6, 9)}
${fn:substring("0123456789", 5, -1)}
${fn:substringAfter("Hello-World", "-")}
${fn:substringBefore("Hello-World", "-")}
${fn:trim(" a b c ")}
${fn:escapeXml("")}

转载于:https://www.cnblogs.com/codingpark/p/4242989.html

你可能感兴趣的文章
面试试题 一 (排列组合)
查看>>
CString转char*实现方法
查看>>
Go直接调用C函数
查看>>
Mac 系统环境变量配置
查看>>
《你的灯亮着吗?:发现问题的真正所在》读书笔记2
查看>>
Winform开发框架之权限管理系统功能介绍
查看>>
从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境
查看>>
视图的定义、更新、撤销
查看>>
iOS之页面传值-----单例传值、通知传值
查看>>
数组换位子
查看>>
软件测试草图
查看>>
一个App项目设计开发完整流程
查看>>
如何使用iClap创建普通批注
查看>>
用Java编写自己的机器人,为你承担苦力
查看>>
第四章App4_3,懂得了抛出异常 throws Exception,read为读取键盘输入数,学会了switch循环...
查看>>
从零开始——MySql01
查看>>
基于线程池的线程管理(BlockingQueue生产者消费者方式)实例
查看>>
sqlmap
查看>>
给出随机存储器(RAM)和只读存储器(ROM)的差别
查看>>
CSS3 3D Transform
查看>>