Java之JSP页面基础详解

JSP 详解

简介

JSP(全称Java Server Pages)是一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准是运行在服务端的语言

JSP文件后缀名为 .jsp

JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上。

JSP输出Hello World

<html>
    <head>
           <title>第一个 JSP 程序</title>
    </head>
    <body>
           <%
                  out.println("Hello World!");
           %>
    </body>
</html>

JSP 语法

脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

方式一

<% 代码片段 %>

方式二

<jsp:scriptlet>
   代码片段
</jsp:scriptlet>

声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用

方式一

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

方式二

<jsp:declaration>
   代码片段
</jsp:declaration>

表达式

方式一

<%= 表达式 %>
<%= (new java.util.Date()).toLocaleString()%>

方式二

<jsp:expression>
   表达式
</jsp:expression>

注释

JSP注释的语法格式

<%-- 该部分注释在网页中不会被显示--%> jsp
<!-- 注释 --> Httml

指令

JSP指令用来设置与整个JSP页面相关的属性

定义页面

<%@ page errorPage="/error/500.jsp" %>		//指向自定义的报错页面
<%@ page isErrorPage="true" %>						//是否为错误页面

引入文件

<%@ include file="common/header.jsp"%>		//在该位置包含jsp文件

引入标签库的定义

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> //导入JSTL核心标签库

行为

行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签

语法描述
jsp:include用于在当前页面中包含静态或动态资源
jsp:useBean寻找和初始化一个JavaBean组件
jsp:setProperty设置 JavaBean组件的值
jsp:getProperty将 JavaBean组件的值插入到 output中
jsp:forward从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element动态创建一个XML元素
jsp:attribute定义动态创建的XML元素的属性
jsp:body定义动态创建的XML元素的主体
jsp:text用于封装模板数据
<jsp:include page="common/footer.jsp"></jsp:include>

指令和标签引用的区别

指令标记是静态包含所包含的文件没有经过转译运行,静态插入。在JSP页面编译生成java代码时,变成了一个方法调用每次运行这个jsp页面,这个方法都会被执行一次。

动作标签在运行时才加入被包含文件,在JSP页面编译生成java代码时将JSP中内容作为自己一部分直接编译了

隐含对象

JSP支持九个自动定义的变量,又称内置变量

对象描述
requestHttpServletRequest类的实例
responseHttpServletResponse类的实例
outPrintWriter类的实例,用于把结果输出至网页上
sessionHttpSession类的实例
applicationServletContext类的实例,与应用上下文有关
configServletConfig类的实例
pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page类似于Java类中的this关键字
exceptionexception 类的对象,代表发生错误的 JSP 页面中对应的异常对象

存储属性

<%--内置对象--%>
<%--    4个存东西的对象--%>
<%
	//保存的数据在一个页面中有效
    pageContext.setAttribute("name1", "value");     
    //保存的数据在一次请求中有效,请求转发会携带这个数据
    request.setAttribute("name2", "value");  
    //保存的数据在一次会话中有效,从打开浏览器到关闭
    session.setAttribute("name3", "value");   
    //保存的数据在服务器中有效,服务器崩了才丢数据
    application.setAttribute("name4", "value");     
%>

<%
    //通过find寻找到Attribute
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");     //不存在
%>

<%--EL表达式输出 ${}}--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3>

其中 pagecontext的作用域是在当前页面上下文,request的作用域是一次请求中,后面的session和application算是最大的了

作用域从低到高:pageContext ==> request ==> session ==> application

EL

EL(Express Lanuage)表达式将自动搜索四大作用域并获得数据。可以减少繁琐的JSP小脚本片段的书写。

需要添加头部信息

<%@ page isELIgnored="false" %>

使用格式:

${key};

JSTL

JSTL (Java server pages standarded tag library,即JSP标准标签库),它封装了JSP应用的通用核心功能。

常用核心标签

输入标签

//相当于<%= %> 当value为空时,输出默认值;escapeXml为判断是否可识别转义符(&lt)
<c:out value="${null}"  default="000"  escapeXml="true" ></c:out>  

设置/移除标签

//默认域为page
<c:set var="salary" scope="session" value="${2000*2}"/>
//也可执行scope
<c:remove var="salary"  />

判断标签

<c:if test="${salary>300}">test is true</c:if>

选择标签

<c:choose>  
	<c:when test="${salary==100}">Pay is equal to 100</c:when>  
	<c:when test="${salary>100}">Pay is more than 100</c:when>  
	<c:otherwise>this is the third option</c:otherwise>  
</c:choose>  

循环标签

// items循环体 step步长 特别说明status还具有current 当前值相当于num;index从0开始迭代;count从1开始迭代,以及其它循环体可选参数
<c:forEach  items="${numbers}" var="num" step="2" varStatus="status"  >  
	<c:out value="${num}"></c:out>  
</c:forEach> 

非数组定义循环

//items为内容 delims为分割符 name是临时变量
<c:forTokens items="google,runoob,taobao" delims="," var="name">  
   			<c:out value="${name}"/><p>  
</c:forTokens> 

跳转

//会直接跳转到指定网页
<c:redirect url="http://www.runoob.com"/>

格式化标签

处理数字

//具体使用 https://www.runoob.com/jsp/jstl-format-formatnumber-tag.html
<fmt:formatNumber value="${salary}" type="currency"></fmt:formatNumber>

处理日期

标签 | 菜鸟教程 (runoob.com)

//2019-12-28 13:50:30  type="time、date、both" 分别显示时间、日期、两者  
<c:set var="date" value="<%=new java.util.Date()%>"></c:set>

//2016年6月26日 上午11时19分43秒 E显示星期
<fmt:formatDate value="${date}" type="both" pattern="yyyy-MM-dd HH:mm:ss E"/>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ABright.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值