一、jsp概述
1、JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。
JSP其实就是在HTML页面中嵌入Java代码。
代码
html:静态内容
servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容--苦逼。
jsp:适合编写输出动态内容,但不适合编写java逻辑。
2、JSP与Servlet的关系是什么?
是JSP的前身,本质上是一样的。
页面在运行时由Web容器先转换成Servlet类, 然后编译,再运行编译好的.class文件,最终转换成HTML代码发送给客户端浏览器。Servlet:控制器。重点编写java代码逻辑 (获取表单数据、处理业务逻辑、分发转向)
JSP:代码显示模板。重点在于显示数据
二、jsp原理(*)
三、jsp语法
、JSP模版元素
网页的静态内容。如:html标签和文本。
2、JSP的脚本
2.1、小脚本 <% java代码 %>
2.1、表达式 <%= 2+3 %> 等价于out.print(2+3);
、JSP注释
JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量
网页注释:<!-- 网页注释 --> 特点:不安全,费流量
、3指令
5、6动作
6、9内置对象
四、Jsp的三个指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 2.0规范中共定义了三个指令:
page指令
Include指令
taglib指令
语法:
<%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”。。。%>
或者:
<%@ 指令名称 属性1=“属性值1”%>
<%@ 指令名称 属性2=“属性值2”%>
如:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" %>
<%@ page import="java.util.*" %>
1、page:
作用:用于定义JSP页面的各种属性
属性:
1.1、 import 和java代码中的import是一样的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
JSP会自动导入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
1.2、 session: 是否会自动创建session对象。默认值是true;
1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb.
1.4 errorPage: 如果页面中有错误,则跳转到指定的资源。
errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。
如果不写“/”则代表相对路径。
、 isErrorPage: 是否创建throwable对象。默认是false;
1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8");
1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。
1.8、 isELIgnored: 是否支持EL表达式。 默认是false
<%@ page pageEncoding="gbk" %>
、include:
静态包含:把其它资源包含到当前页面中。
<%@ include file="/include/header.jsp" %>
动态包含:
<jsp:include page="/include/header.jsp"></jsp:include>
两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静的就不用动的。
、taglib
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
五、jsp的6个动作
使用标签的形式来表示一段java代码。
如:
1)<jsp:include > 动态包含
2)<jsp:forward> 请求转发
3)<jsp:param> 设置请求参数
4)<jsp:useBean> 创建一个对象
5)<jsp:setProperty> 给指定的对象属性赋值
6)<jsp:getProperty> 取出指定对象的属性值
六、JSP的9个内置对象
指在JSP的<%=%> 和<% %>中可以直接使用的对象
在JSP中为了简化用户的开发,提供了九个内置对象,这些内置对象将由容器为用户进行实例化,而用户直接使用即可,而不用像在java中那样,必须通过关键字new进行实例化对象之后才可以使用。
对象名
类型
说明
request
javax.servlet.http.HttpServletRequest
response
javax.servlet.http.HttpServletResponse
session
javax.servlet.http.HttpSession
由session="true"开关
application
javax.servlet.ServletContext
exception
java.lang.Throwable
由isErrorPage="false"开关
page
java.lang.Object当前对象this
当前servlet实例
config
javax.servlet.ServletConfig
java管理系统基础源代码
out
javax.servlet.jsp.JspWriter
字符输出流,相当于 printWriter对象
pageContext
javax.servlet.jsp.PageContext
pageContext(重要)
1、本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据
void setAttribute(String name,Object o);
Object getAttribute(String name);
void removeAttribute(String name);
操作其它域对象的方法
void setAttribute(String name,Object o,int Scope);
Object getAttribute(String name,int Scope);
void removeAttribute(String name,int Scope);
scpoe的值:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
findAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找。
2、它可以创建其它的8个隐式对象
在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。
3、提供了的简易方法
pageContext.forward("2.jsp");
pageContext.include("2.jsp");
七、四大域对象
存放的数据在当前页面有效。开发时使用较少。
ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。
八、EL表达式语言
1、
EL概述与基本语法表达式语言(Expression Language)是JSP2.0中新增的功能。使用表达式语言(EL)可以在JSP页面进行方便地输出内容。EL语法为:${表达式}
EL表达式:expression language 表达式语言
要简化jsp中java代码开发。
它不是一种开发语言,是jsp中
获取数据的一种规范
2、
EL具体功能1) 获取数据
EL表达式只能获取存在4个作用域中的数据
${u} 原理: pageContext.findAttribute("u");
url?name=tom ${param.name}
EL获取对于null这样的数据,在页面中表现为空字符串
${u.name} == u.getName()方法
点(.) 运算符相当于调了getter方法,点后页面跟的是属性名。
属性导航
运算符:点能做的,它也能做; 它能做的,点不一定能做
${student.name}== ${student['name']} == ${student["name"]}
2) 运算
算数运算符
+ - * /(div) %(mod)
参数相加
关系运算符
< (lt) > (gt) == (eq) !=(ne) >=(ge) <=(le)
逻辑运算符
&&(and) ||(or) !(not)
运算符
表达式} 判断是否为null或空字符串””
5. 三目运算符
返回true或false的表达式 ? "为true时输出的内容":"为false时输出的内容"}
6. 括号运算符
用来改变运算顺序的
3) 使用EL访问不同的属性范围
${pageScope.属性名}
属性名}
属性名}
属性名}
注意:
如果使用 "${属性名}" 的方式访问属性范围,
则属性范围的访问顺序是pageContext、request、session、application。
4) 使用EL访问JSP内置对象
使用EL的pageContext内置对象访问JSP的内置对象。
对应的jsp内置对象}
例如:
获取上下文路径:
特殊:
${pageContext.servletContext.contextPath}
访问session的ID:
${pageContext.session.id}
5) EL访问参数(访问客户端发送的参数、全局参数、 一组参数)
用途一:
使用EL的param内置对象访问客户端发送的参数
参数名}
用途二:
使用EL的initParam内置对象访问上下文参数(全局参数)
在web.xml中配置上下文参数:
<context-param>
<param-name>admin</param-name>
<param-value>Obama</param-value>
</context-param>
用途三:
使用EL的paramValues访问一组参数
${paramValues.参数名[0]} 获取提交来的第一个参数值
${paramValues.参数名[n]} 获取提交来的第(n+1)个参数值
6) 访问cookie
举个例子:
通过EL的cookie内置对象访问JSESSIONID名称的 cookie的语法:
${cookie["JSESSIONID"].name}
${cookie["JSESSIONID"].value}
7) 访问header
使用EL的header内置对象访问请求header信息
比如:
${header["cookie"]}
3、
EL的11个隐式对象EL隐式对象引用名称
类型
JSP内置对象名称
说明
pageContext
javax.servlet.jsp.PageContext
pageContext
一样的
pageScope
java.util.Map<String,Object>
没有对应的
pageContext范围中存放的数据,页面范围
requestScope
java.util.Map<String,Object>
没有对应的
请求范围数据
sessionScope
java.util.Map<String,Object>
没有对应的
会话范围数据
applicationScope
java.util.Map<String,Object>
没有对应的
应用范围数据
param
java.util.Map<String,String>
没有对应的
一个请求参数
paramValues
java.util.Map<String,String[]>
没有对应的
重名请求参数
header
java.util.Map<String,String>
没有对应的
一个请求消息头
headerValues
java.util.Map<String,String[]>
没有对应的
重名请求消息头
initParam
java.util.Map<String,String>
没有对应的
web.xml中全局参数
cookie
java.util.Map<String,Cookie>
没有对应的
key:cookie对象的name值
br>
br>
br>
br>
br>
br>
br>
br>
JSTL概述与作用:
/strong>JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
引入JSTL的步骤:
/strong>第一步:将jstl-xx.jar导入/WEB-INF/lib文件夹下。
使用JSTL
/strong>JSP页面使用taglib指令引入xxx.tld文件
常用标签
/strong>1.输出标签
/strong>设置对象的属性值
br>
JSP其实就是在HTML页面中嵌入Java代码。
代码
br>
col>
col>
col>
对象名
类型
说明
request
javax.servlet.http.HttpServletRequest
response
javax.servlet.http.HttpServletResponse
session
javax.servlet.http.HttpSession
由session="true"开关
application
javax.servlet.ServletContext
exception
java.lang.Throwable
由isErrorPage="false"开关
page
java.lang.Object当前对象this
当前servlet实例
config
javax.servlet.ServletConfig
out
javax.servlet.jsp.JspWriter
字符输出流,相当于 printWriter对象
pageContext
javax.servlet.jsp.PageContext
EL隐式对象引用名称
类型
JSP内置对象名称
说明
pageContext
javax.servlet.jsp.PageContext
pageContext
一样的
pageScope
java.util.Map<String,Object>
没有对应的
pageContext范围中存放的数据,页面范围
requestScope
java.util.Map<String,Object>
没有对应的
请求范围数据
sessionScope
java.util.Map<String,Object>
没有对应的
会话范围数据
applicationScope
java.util.Map<String,Object>
没有对应的
应用范围数据
param
java.util.Map<String,String>
没有对应的
一个请求参数
paramValues
java.util.Map<String,String[]>
没有对应的
重名请求参数
header
java.util.Map<String,String>
没有对应的
一个请求消息头
headerValues
java.util.Map<String,String[]>
没有对应的
重名请求消息头
initParam
java.util.Map<String,String>
没有对应的
web.xml中全局参数
cookie
java.util.Map<String,Cookie>
没有对应的
key:cookie对象的name值
九、JSTL
1、JSTL概述与作用:
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
2、引入JSTL的步骤:
第一步:将jstl-xx.jar导入/WEB-INF/lib文件夹下。
第二步:将jstl-xx.jar解压后的META-INF文件夹下的xxx.tld文件拷贝到/WEB-INF/的某目录下
第三步:在JSP页面使用taglib指令引入xxx.tld文件。
3、使用JSTL
JSP页面使用taglib指令引入xxx.tld文件
指向xxx.tld文件的路径" prefix="JSTL标签前缀"%>
注意:uri中指向xxx.tld文件的路径有两种写法:
第一种:直接指向xxx.tld文件的路径
第二种:在web.xml中配置taglib的uri
<jsp-config>
<taglib>
<taglib-uri>http://www.xxx.com</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
4、常用标签
1.输出标签
输出的内容,支持EL" default=" 默认值,支持EL"/>
2.设置标签
设置属性范围的属性值
属性名" value="属性值,支持EL" scope="属性范围"/>
设置对象的属性值
“${perObj}” property=“对象的属性名” value=“支持EL"/>
3.捕获异常标签
保存异常信息的属性名">
有可能发生异常的代码
</c:catch>
4.判断标签
判断表达式,支持EL">
判断结果为true,执行此处
</c:if>
5.forEach标签(遍历list集合或Map集合)
当前正在遍历的对象,作为属性用(msg)" items="要遍历的集合,支持EL">
${msg}
</c:forEach>
6.choose标签
<c:choose>
<c:when test="${param.score>=90}">
优秀</h3>
</c:when>
<c:when test="${param.score>=80}">
良好</h3>
</c:when>
<c:otherwise>
不及格,要加油!</h3>
</c:otherwise>
</c:choose>
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/20080.html