Java基础83 JSP标签及jsp自定义标签(网页知识)
1、JSP标签
替代jsp脚本,用于jsp中执行java代码
1.1、内置标签:
<jsp:forward></jsp:forward> 相当于:request.getReuquestDispacher(“路径”).forWard(request,response);
<jsp:param></jsp:param> 参数标签
<jsp:include></jsp:include> 包含其他页面,动态包含
静态包含:先合并在翻译.不能传递参数
动态包含:先翻译在合并.可以传递参数
1.2、jstl标签库(java标准标签库)
使用步骤:
1) 确保jstl支持的jar包在项目中
2) 在jsp中导入标签库
3) 使用标签库里面额标签
核心标签库:
<c:set></c:set> 保存数据
<c:out/> 取出数据
<c:if/> 单条件判断
<c:choose/>+<c:when/><c:otherwise/> 多条件判断
<c:forEach/> 变量数据
<c:forTokens/> 遍历特殊字符的字符串
<c:redirect/> 重定向
1.3、实例
<%@page import="com.shore.taglib.Student"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--导入标签库core,即导入一个c标签--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>核心标签库</title>
</head> <body>
<%--使用标签 --%>
<%--set标签:保存数据:(保存到域中)默认保存到page域 --%>
<c:set var="name" value="rose" scope="request"></c:set>
${name} <br/>
<%
String str="hllo";
pageContext.setAttribute("str", str);
%>
${str}
<hr/> <%
String msg="null";
pageContext.setAttribute("msg", msg);
%>
${msg }<br/>
<%--out标签:获取数据(从域中)
30 default:当value值为null时,使用默认值
31 escapeXml:是否对value进行转义;false:不转义,true:转义(默认)。
32 --%>
<c:out value="${msg }" default="<h3>标题1</h3>" escapeXml="false"></c:out>
<hr/> <%
String vars="jack";
pageContext.setAttribute("vars", vars);
%>
${vars }
<br/>
<%--if标签:但条件判断 --%>
<c:if test="${!empty vars }">条件成立</c:if> <%-- 如果vars这个实体/对象非空字符串时,则向页面输出“条件成立”,否则输出空白--%>
<hr/> <%--choose表+when标签+otherwise标签 --%>
<c:set var="score" value="56"></c:set>
<c:choose>
<c:when test="${score>=90 && score<=100 }">学霸</c:when>
<c:when test="${score>=80 && score<90 }">优秀</c:when>
<c:when test="${score>=70 && score<=79 }">良好</c:when>
<c:when test="${score>=60 && score<=69 }">及格</c:when>
<c:when test="${score>=50 && score<=59 }">不及格</c:when>
<c:otherwise>
你的输入有误!
</c:otherwise>
</c:choose>
<hr/> <%--forEach标签:循环--%>
<%
//list
List<Student> list=new ArrayList<Student>();
list.add(new Student("mark",19));
list.add(new Student("lili",30));
list.add(new Student("narci",40));
//放入域中
pageContext.setAttribute("list", list); //map
Map<String,Student> map=new HashMap<String,Student>();
map.put("100",new Student("rose",18));
map.put("101",new Student("jack",20));
map.put("102",new Student("Lucy",21));
//放入域对象中
pageContext.setAttribute("map",map);
%>
<%--
79 begin=""从那一个元素开始遍历
80 end=""到哪个元素结束.默认到最后一个元素结束的
81 step="" 步长 (每次加几) 默认1
82 items="" 需要遍历的数据(集合)
83 var=""; 每个元素的名称
84 varStatus=""当前正在遍历的元素的状态对象.(count 属性:当前位置,从1开始)
85 --%>
<c:forEach items="${list }" var="student" varStatus="varSta">
序号:${varSta.count } -姓名:${student.name } -年龄:${student.age }<br/>
</c:forEach>
<hr/>
<c:forEach items="${map }" var="entry">
${entry.key } -姓名:${entry.value.name } -年龄:${entry.value.age }<br/>
</c:forEach>
<hr/> <%--forToken标签:循环特殊的字符串 --%>
<%
String strs="java-php-net-android";
pageContext.setAttribute("strs",strs);
%>
<c:forTokens items="${strs }" delims="-" var="st">
${st }<br/>
</c:forTokens>
<hr/> <%--redirect重定向 --%>
106 <%-- <c:redirect url="http://www.baidu.com"></c:redirect> --%> </body>
</html>
实例结果图:
2、自定义标签
2.1、
1、编写一个普通的java类,继承SimpleTagSupport类(标签处理器类)
2、在web-INF的目录下建立shore.tld文件,这个叫标签库的文件声明.(参考核心标签tld文件编写的)
3、在jsp页面的头部导入自定义标签,并且在jsp中使用该自定义标签:
<shore:showIp> </shore:showIp> 注:如果不使用,页面端是不会显示你需要显示的东西,比如下面的实例,我要显示当前用户的IP地址。
shore.tld文件创建的路径:
2.2、实例
1、编写Java类:ShowIpTag 类
package com.shore.customtag; import java.io.IOException; import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport; /**
* @author DSHORE/2019-2-1
* (自定义)标签处理类:
* 1.继承SimpleTagSupport
* 2.重写doTag()方法
*/
public class ShowIpTag extends SimpleTagSupport{
@Override
public void doTag() throws JspException, IOException {
//调用getJspContext()方法,来获取pageContext(Context)
PageContext pageContext=(PageContext) this.getJspContext();
//获取Request
HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();
//获取IP
String ip=request.getRemoteHost();
//向浏览器输出客户的ip地址
JspWriter out=pageContext.getOut();
out.write("使用自定义标签输出客户的ip地址:"+ip);
}
}
2、编写配置文件:shore.tld(标签库的声明文件)
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<!-- 标签的版本 -->
<tlib-version>1.1</tlib-version>
<!--标签库的前缀 -->
<short-name>shore</short-name>
<!--tld文件的唯一标识符-->
<uri>http://com.shore.customtag.ShowIpTag</uri> <tag>
<!--标签的名字 -->
<name>showIp</name>
<!-- 标签处理器的类的全名 -->
<tag-class>com.shore.customtag.ShowIpTag</tag-class>
<!--输出标签体内容的格式 -->
<body-content>scriptless</body-content>
<!--属性的声明 -->
<attribute>
<!-- 属性名称 -->
<name>var</name>
<!-- 是否必填 -->
<required>false</required>
<!-- 是否支持El表达式 -->
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag> </taglib>
3、编写页面端:ShowCustomerIp.jsp 【“页面端”通过“配置文件”去调用“Java类”】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--导入自定义的标签 --%>
<%@taglib uri="http://com.shore.customtag.ShowIpTag" prefix="shore" %> <head>
<title>自定义标签</title>
</head> <body>
<%-- 使用jsp的方法获取 --%>
<%
//获取当前用户的ip
//String ip=request.getRemoteHost();
//向浏览器输出
//out.write("当前客户的ip是:"+ip);
%> <%--使用标签库的标签 的方法获取--%>
<shore:showIp>xxxxxxxx</shore:showIp><%-- 只要使用到该自定义标签下的showIp,就会调用ShowIpTag类 并返回给调用者相关信息 --%>
</body>
</html>
实例结果图:
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/10339770.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
Java基础83 JSP标签及jsp自定义标签(网页知识)的更多相关文章
- java基础65 JavaScript中的Window对象(网页知识)
1.javaScript组成部分 1.EMCAScript(基本语法) 2.BOM(Browser Object Model):浏览器对象模型 浏览器对象模型中的浏览器的各 ...
- java基础60 JavaScript字符串转换成数字(网页知识)
1.字符串转换成数字 <!doctype html> <html> <head> <meta charset="utf-8"> &l ...
- java:jsp: 一个简单的自定义标签 tld
java:jsp: 一个简单的自定义标签 tld 请注意,uri都是:http://www.tag.com/mytag,保持统一,要不然报错,不能访问 tld文件 <?xml version=& ...
- 在jsp页面中使用自定义标签
在某些场景中,自定义标签可封装大量代码,使页面变得更简洁,标签也可以很方便地在不同页面中实现通用而不必去粘贴大量的js代码.现在把最近做的一个自定义标签在这里总结一下.首先总结一下关于自定义标签的一些 ...
- [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架
JSTLApache提供的标签库 jar包:jstl-1.2.jar,如果传MyEclipse,他会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入.--------- ...
- Spring源码分析(九)解析默认标签中的自定义标签元素
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 到这里我们已经完成了分析默认标签的解析与提取过程,或许涉及的内容太多,我 ...
- jsp的三种自定义标签 写法示例
1.自定义方法标签 引入方式示例: <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %> 写 ...
- 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签
学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分 ...
随机推荐
- 第五周linux学习笔记
第五章 系统调用 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个. 它为用户空间提供了一种硬件的抽象接口. 系统调用保 证了系统的毡定和安全. 在第 3 ...
- 20135239 益西拉姆 linux内核分析 扒开系统调用的三层皮(下)
一. 给MenuOS增加time-asm命令 代码解释 1.-rf:强制删除 2.clone :重新克隆 3.time-asm:显示系统时间的汇编形式 给MenuOS增加time和time-asm命令 ...
- 解题:POI 2011 Strongbox
首先洛谷的题面十分的劝退(至少对我这个菜鸡来说是这样),我来解释一下(原来的英文题面): 有一个有若干个密码(每个密码都可以开箱子)的密码箱,密码是在$0$到$n-1$的数中的,且所有的密码都满足一个 ...
- bzoj 4451 : [Cerc2015]Frightful Formula FFT
4451: [Cerc2015]Frightful Formula Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 177 Solved: 57[Sub ...
- 特征降维之PCA
目录 PCA思想 问题形式化表述 PCA之协方差矩阵 协方差定义 矩阵-特征值 PCA运算步骤 PCA理论解释 最大方差理论 性质 参数k的选取 数据重建 主观理解 应用 代码示例 PCA思想 PCA ...
- java基础-迭代器(Iterator)与增强for循环
java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...
- 笔记 oracle 创建主键自增长
笔记 (1) 创建表 create table test( id number(18,2) primary key, -- 主键(unique+not null) name varchar2(100) ...
- JavaScript中replace()方法的第二个参数解析
语法 string.replace(searchvalue,newvalue) 参数值 searchvalue 必须.规定子字符串或要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则 ...
- Centos7远程桌面 vnc/vnc-server的设置
Centos7与Centos6.x有了很大的不同. 为了给一台服务器装上远程桌面,走了不少弯路.写这篇博文,纯粹为了记录,以后如果遇到相同问题,可以追溯. 1.假定你的系统没有安装vnc的任何软件,那 ...
- [网络流24题] 最长k可重区间集
https://www.luogu.org/problemnew/show/3358 以区间(1,5),(2,6),(7,8)为例 建模方法一: 建模方法二: 离散化区间端点 相当于找k条费用最大的不 ...