JSP快速入门
2021/5/17 18:56:37
本文主要是介绍JSP快速入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JSP
文章目录
- JSP
- 一、概述
- 二、定义方式
- 2.1 注释
- 2.2 定义Java代码
- 2.3 指令
- 2.3.1 page指令
- 2.3.2 include指令
- 2.3.3 taglib指令
- 2.3.4 forward指令
- 三、内置对象
- 3.1 pageContext
- 3.2 request
- 3.3 application
- 3.4 session
- 3.5 response
- 3.6 page
- 3.7 out
- 3.8 config
- 3.9 exception
- 四、路径问题
- 4.1 相对路径
- 4.2 绝对路径
- 4.3 JSP中自带的全局路径声明
- 五、EL
- 5.1 概述
- 5.2 运算符
- 5.3 获取值
- 5.4 隐式对象
- 六、JSTL
- 6.1 概述
- 6.2 使用
- 6.3 常用JSTL标签
- out
- set
- remove
- if
- choose
- foreach
一、概述
JavaServerPages: Java服务器页面 ,是一个一种动态网页技术,既可以定义HTML页面,又可以定义Java代码;简化了Servlet中Responce :: getWriter().write(),便于书写展示页面。
JSP运行时自动创建了一个继承自HttpServlet的类,本质上是一个Servlet类。
- 服务器解析请求消息,查找是否有index.jsp资源
- 若找到,会将index.jsp转换为对应的index.java文件
- 编译index.java文件,生成index.class字节码文件
- 由字节码文件提供访问
二、定义方式
2.1 注释
//
- 只能注释java代码
- 还会被编译为字节码文件,但不会被加载到html页面中
<!-- -->
- 只能注释html代码片段
- 响应时还会向浏览器发送被注释的代码片段,但浏览器不解析
<%-- --%>
- 可以注释所有JSP代码
- 响应时不会发送代码片段
2.2 定义Java代码
<% %>
局部代码块
定义的java代码在service()方法中 ,service方法中可以定义什么,该脚本中就可以定义什么
<%! %>
全局代码块
定义的java代码在转换后的java类的成员位置 ,用于定义成员方法、成员变量(由于多线程安全问题不建议定义)、静态代码块…
<%= %>
脚本调用方式
out.print(代码 );
定义的java代码在service()方法的输出语句中 ,会输出到页面上,输出语句中可以定义什么,该脚本中就可以定义什么(可以放有返回值的方法)
2.3 指令
用于配置JSP页面,或导入资源文件,不同属性空格隔开
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
2.3.1 page指令
contentType : 等效于Response :: serContentType(); 设置响应体的MIME类型与字符集
<%@ page contentType="text/html,charset=GBK"%>
language :JSP页面要被转义成的语言,现在只支持Java
session : JSP页面中是否有session对象,默认为true
import :导包
<%@ page import="java.util.*"%>
errorPage : 指定当前页面出现异常后跳转的页面
<%@ page errorPage="error.jap"%>
isErrorPage : 赋值为[true] 标记标记当前JSP页面为错误页面,可以使用 exception 内置对象
isELIgnored :赋值为[true]时忽略整个JSP页面的EL表达式
2.3.2 include指令
导入页面的资源文件,如多个页面同时使用某一页面时
静态导入
<%@include file="相对位置"%>
被导入的页面不会被转换为新的Servlet文件,而是与当前页面直接合并;
运行效率高,但两个页面会耦合到一起,不利于维护;还会有命名重复的问题
动态导入
<jsp:include file="相对位置"></jsp:include>
被导入的页面被转换为新的Servlet文件,与当前页面解耦
2.3.3 taglib指令
导入资源,如标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:自定义的前缀名,使用标签库时用<前缀名:>
2.3.4 forward指令
实现JSP页面的请求转发
<jsp:forword page="相对位置"> <jsp:param name="key" value="value"> </jsp:param> </jap:forword>
注: forward标签中间除了parame标签外不能添加任何字符;
转发到的页面中通过Object << Request :: getParameter(String name)
方法获取属性键值对
三、内置对象
在JSP页面中不需要创建,可以直接使用的对象,JSP页面转换为Servlet后已经被声明并初始化,在JSP中使用时调用的是变量名。不能在全局代码块中使用。
3.1 pageContext
pageContext类 ,(域对象)【在当前页面共享数据】。表示页面上下文的对象,它封装了当前页面的运行信息,也封装了其他8个内置对象,可以通过pageContext :: getXxx()
方法获取。
生命周期与当前页面同步,随着页面的关闭而消亡。
3.2 request
HttpServletRequest 类 ,(域对象)【在一次请求访问的多个资源间共享数据】(请求转发)。由tomcat创建,一个请求对应一个request对象。
3.3 application
ServletContext 类 ,(域对象)【所有用户间共享数据】。一个web项目只有一个application对象。
生命周期与服务器同步,伴随着服务器的关闭而消亡。
3.4 session
HttpSession 类 ,(域对象)【在一次会话的多个请求间共享数据】。一次会话对应一个session对象。
3.5 response
HttpServletResponse 类 ,响应请求数据,将处理结果返回给浏览器、重定向
3.6 page
Object 类 ,代表当前Servlet类的对象,相当于this
3.7 out
JspWriter 类 ,带有缓冲区的字符输出流对象。可以将数据输出到页面上,效率高于Response ::getWriter().write()
在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据
response.getWriter()数据输出永远在out.write()之前
3.8 config
ServletConfig 类 ,Servlet的配置对象,可以用来获取web.xml中的配置数据
3.9 exception
Throwable 类 ,异常对象,存储当前运行的异常信息。必须在page指令中标记当前页面为异常页面才会有
四、路径问题
4.1 相对路径
相对于当前资源的路径。使用后,目标路径不能随便更改;使用[…/]方式退出目录时,如果位置比较深操作麻烦
4.2 绝对路径
在请求路径前加上[/]表示当前服务器的根路径,使用时需添加[/虚拟项目名/资源目录]
/Login/a/login_check
4.3 JSP中自带的全局路径声明
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName() +":"+request.getServerPort()+path+"/"; %> ----------------------------- <head> <base href="<%=basePath>"> </head>
添加资源路径时,从当前项目的web目录下添加即可
/Login/a/login_check >> a/login_check
五、EL
5.1 概述
ExpressionLanguage 表达式语言 ,用于简化JSP页面中获取作用域和请求数据的代码编写。使用EL表达式后JSP页面不用再导包或进行类型强制转换,使层次结构清晰。
JSP默认支持EL表达式语言。
语法:${expression}
忽略JSP页面的表达式:
- 在page指令中为isELIgnored属性赋值为“true”,来忽略整个页面的EL表达式
\${expression}
,来忽略一条特定的EL表达式,相当于将[$]字符进行了转义
5.2 运算符
算数运算符:
+ 、-、 *、 /、div、 %、mod
【+】只表示数值运算相加,不表示字符串拼接
&{1+“1”} == 2
比较运算符:
> 、<、 >=、 <=、 ==、 !=
逻辑运算符:
&&、and、 ||、or、 !、not
空运算符:
empty :用于判断字符串、集合、数组对象是否为null或者长度是否为0,返回Boolean类型
- ${empty list}:判断list集合是否为null或者长度为0
- ${not empty str}:判断字符串str是否不为null 并且 长度>0
5.3 获取值
EL表达式只能从域对象中获取值,没有获取到值时返回空字符串。
${域名称.键名}
:从指定的域对象中获取键的值
${键名}
:由作用域最小的域对象开始,依次查找键的值
域对象由小到大的域名称:
- pageScope
- requestScope
- sessionScope
- applicationScope
获取对象的属性: ${域名称.键名.属性名}
获取List集合的值: ${域名称.键名[索引]}
获取Map集合的值: ${域名称.键名.key名称}
或: ${域名称.键名["key名称"]}
获取用户请求数据: ${parame.键名}
未获取到值时返回null
获取请求头数据: Map<String,String> << ${header}
请求头的所有键值对映射
Map<String,String[ ]> << ${headerValues["accept-language"]}
请求头某一键对应的多个值
String << ${header["host"]}
请求头某一键的值
获取Cookie数据:
String << ${cookie.JSESSIONID. name}
String << ${cookie.JSESSIONID. value}
5.4 隐式对象
EL共有11个隐式对象, pageContext 获取jsp其他八个内置对象
${pageContext.request.contextPath}:动态获取虚拟目录
六、JSTL
6.1 概述
JavaServerPagesTagLibrary JSP标准标签库 ,由Apache开源组织提供,用于扩展EL表达式。
JSTL是标签语言,但不是JSP内置的,使用时需要导包并指定标签库。
6.2 使用
- 导入jstl相关jar包
- 引入标签库<%@ taglib prefix=“c” uri=" http://java.sun.com/jsp/jstl/core " %>
- 使用标签:< 前缀:标签名>< /前缀:标签名>
6.3 常用JSTL标签
out
将内容输出到页面上
<c:out value="PrintByJSTL" default="Default"></c:out >
value:要输出的内容;default:默认输出的内容
set
向四个域对象中赋值
<c: set var="key" value="value" scope="request"></c: set>
var:属性的键名;value:属性的值;scope:指定域对象,不赋值时默认为pageContext
remove
删除域对象中的值
<c:remove var="key" scpoe="request"></c:remove>
var:属性的键名;scope:指定删除的域对象,不赋值时默认将所有域对象中属性名为"key"的值删除
if
if语句,if标签没有else,可以定义多个if标签达到目的
<c:if test="${a>5}" var="falg" scope="request">执行</c:if>
test:填写逻辑表达式;var:条件表达式的结果存储变量名;scope:条件表达式的结果变量的作用域
choose
switch语句,多重判断
<c:choose> <c:when test="${age>10}"> 11 </c:when> <c:when test="${age>20}"> 21 </c:when> <c:otherwise> 1 </c:otherwise> </c:choose>
foreach
for 语句
循环重复操作
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s"> ${i} ${s.index} ${s.count}<br> </c:forEach>
遍历容器内容
<c:forEach items="${requestScope.list}" var="str" varStatus="s"> ${str} ${s.index} ${s.count}<br> </c:forEach>
- begin:开始值(包含)
- end:结束值(包含)
- var:迭代的变量名
- step:变量增长量 不赋值时默认为1
- items:容器对象
- varStatus:循环状态
- index:容器中元素的索引,从0开始
- count:循环次数,从1开始
这篇关于JSP快速入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04package.json 文件位置在哪?-icode9专业技术文章分享
- 2024-10-01Craco.js学习:从入门到实践指南
- 2024-10-01Create-React-App学习:入门与实践指南
- 2024-10-01CSS-in-JS学习:从入门到实践指南
- 2024-09-30JSX语法学习:从入门到初步掌握
- 2024-09-30Mock.js学习:入门教程与实战演练
- 2024-09-30React Hooks学习:从入门到实践
- 2024-09-30受控组件学习:React中的基础入门教程
- 2024-09-29JS定时器教程:初学者必看指南
- 2024-09-29JS对象教程:初学者的全面指南