JavaWeb之Jsp/EL(八)

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.HttpServletRequest
Response	javax.servlet.http.HttpServletResponse
Config		javax.servlet.ServletConfig
Page		当前Servlet实例this
session		javax.servlet.http.HttpSession
application	java.servlet.ServletContext
exception	java.lang.Throwable
Out		javax.servlet.jsp.JspWriter
pageContext	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页面---------------
<error-page>
	<error-code>500</error-code>
	<location>/error500.jsp</location>
</error-page>
<error-page>
	<exception-type>java.lang.Exception</exception-type>
	<location>/error.jsp</location>
</error-page>

---------------include指令---------------
include指令表示静态包含!
include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。两个页面合并成一个文件,然后再编译成Servlet(Java文件)

**动态包含是会为两个JSP页面都生成servlet,然后1.jsp的“真身”中会调用2.jsp的“真身”的_jspService()方法而已例如1.jsp<jsp:include page="2.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:xxx …>
无论是自定义的JSP标签,还是JSP自己的动态标签,还有第三方的标签,最终都会对应一组方法的调用

include动态标签
include标签是动态包含,与include指令不同,include标签与RequestDispatcher.include()方法的功能是相同的
用法: <jsp:include page="1/jsp"/>

forward动态标签
forward标签的作用是请求转发!forward标签的作用与RequestDispatcher.forward()方法相同
用法<jsp:forward page="1.jsp"/>

useBean、setProperty、getProperty动态标签
<jsp:userBean id="p1" class="com.itheima.domain.Person"/>
<jsp:setProperty property="*" name="p1"/>
<%=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<String,Cookie>	key:是cookie的name,value是cookie对象本身

----------------隐式对象说明----------------
1). param:param是Map<String,String>类型!param对象可以用来获取参数,与request.getParameter()方法相同
	注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而	不是null。这一点与使用request.getParameter()方法是不同的
2). paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它
3). headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象
4). initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数
5). cookie:cookie是Map<String,Cookie>类型,其中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
时间: 2024-07-30 13:46:24

JavaWeb之Jsp/EL(八)的相关文章

JavaWeb-11 (JSP&amp;EL表达式)

JavaWeb-11 JSP&EL表达式 JSP 四.JSP语法(学好的关键:对应的Servlet) JavaWeb-10 总结:session技术也是cookie的一种.服务器给浏览器创建一个篮子,并加上编号,这编号会存储到客户端上,当客户端再次访问服务器时,服务器会读取客户端的ID号,如果服务器找得到,就在篮子中拿出该客户端的session,若没有就新建一个 重点:URL重写. 1.JSP模版元素 JSP模板元素:HTML页面 JSP页面中的HTML内容称之为JSP模版元素. JSP模版元素

jsp&amp;el&amp;jstl-01

案例1-在页面中展示所有商品信息,不要使用jsp的脚本技术分析: jsp/el/jstl jsp: java 服务器页面 作用: 将内容的生成和信息的展示相分离 运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.jsp脚本: <%..%> java代码片段 <%=..%> 输出表达式 相当于out.print(); <%!...%> 声明成员jsp的指令 作用:声明jsp页面的一些属性和动作 格式: <

JSP EL

一.JSP EL语言定义 E L(Expression Language)  目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法.它是一种简单的语言,基于可用的命名空间(PageContext 属性).嵌套属性和对集合.操作符(算术型.关系型和逻辑型)的访问符.映射到 Java 类中静态方法的可扩展函数以及一组隐式对象. EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能.脚本编制元素

JSP EL表达式使用

JSP EL表达式使用: Servlet: package com.stono.servlet; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import

JSP&amp;EL 内置对象

JSP&EL 内置对象 转载▼ 具体的JSP和El中的内置对象见下表,由于我写在了excel中,也不知道怎么把excel发出来,就截了图. 相关问题: Q1: JSP:EL中 pageContext.request 和 requestScope 的区别? A: pageContext.request是一个具体的对象,在你的http请求过程中存在.requestScope是一个Map,这个Map中存放了在request作用域中的属性键值对,就这么简单而已,它不是request对象,而是reques

JSP EL简介

JSP EL简介:1.语法:    ${expression} 2.[ ]与.运算符    EL 提供“.“和“[ ]“两种运算符来存取数据.     当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“.例如:         ${user.My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值.例如:         ${sessionScope.user[data]

JSP EL表达式详细介绍

一.JSP EL语言定义 E L(Expression Language)  目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法.它是一种简单的语言,基于可用的命名空间(PageContext 属性).嵌套属性和对集合.操作符(算术型.关系型和逻辑型)的访问符.映射到 Java 类中静态方法的可扩展函数以及一组隐式对象. EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能.脚本编制元素

oozie错误:javax.servlet.jsp.el.ELException: variable [***] cannot be resolved

完整错误: javax.servlet.jsp.el.ELException: variable [compute] cannot be resolved at org.apache.oozie.util.ELEvaluator$Context.resolveVariable(ELEvaluator.java:106) at org.apache.commons.el.NamedValue.evaluate(NamedValue.java:124) at org.apache.commons.e

Java web基础总结十之—— jsp EL表达式

Java web基础总结十之-- jsp EL表达式 一.EL表达式简介 EL 是Expression Language的缩写.在jsp中有很大的作用,EL主要有以下一些作用:获取数据,替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象.获取数据.还可以执行运算,利用EL表达式可以在JSP页面中执行一些基本的关系运算.逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算,例如 ${user==null}.还可以获取web开发常用的jsp的隐式对象,利用这些隐式对象,we