第二部分简单讲解:主要讲解el表达式,核心标签库。本章主要讲解:自定义标签库;404页面,505页面,错误页面配置方法html
所有代码下载:连接java
自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操做,即当servlet执行时Web container调用那些操做。JSP标签扩展可让你建立新的标签而且能够直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。你能够继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。web
下面的步骤创建一个自定义标签用于战术客户端的ip地址:服务器
public class ShowIp extends SimpleTagSupport { /** * 如下屏蔽的代码在SimpleTagSupport代码中已经作了!这里不须要重复再作! */ /*private JspContext context; *//** * 传入pageContext *//* @Override public void setJspContext(JspContext pc) { this.context = pc; }*/ @Override public void doTag() throws JspException, IOException { PageContext pageContext=(PageContext)this.getJspContext(); ServletRequest request = pageContext.getRequest(); String ip=request.getRemoteHost(); JspWriter out = pageContext.getOut(); out.write("使用自定义标签展现客户ip地址"+ip); List<String> a=null; } }
<?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"> <description>A tag library exercising SimpleTag handlers.</description> <!-- 标签库的版本 --> <tlib-version>1.0</tlib-version> <!-- 标签库前缀 --> <short-name>rlovep</short-name> <!-- tld文件的惟一标记 --> <uri>http://rlovep.com</uri> <!-- 定义标签,标签要放在方法前面 --> <tag> <!-- 标签名 --> <name>showIp</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.ShowIp</tag-class> <body-content>empty</body-content> </tag> <tag> </taglib>
在jsp页面的头部导入自定义标签库:url为你在tld中写的url,前缀也是你在tld文件中定义的app
<%@ taglib uri="http://rlovep.com" prefix="rlovep" %>
<%-- 测试简单的自定义标签,标签体(我是你)不显示 --%> <rlovep:showIp>我是你 </rlovep:showIp>
当访问:http://localhost:8080/stuJsp/Hellotags.jsp 时;要重启Tomcat使服务器启动时,加载每一个web应用的WEB-INF目录下的全部文件!!!例如。web.xml, tld文件!!!
步骤以下:less
你能够像标准标签库同样在标签中包含消息内容。如咱们要在咱们自定义的
<rlovep:showIp>我是你 </rlovep:showIp>
JspContext jspContext2 = this.getJspContext(); //显示标签体的两种方法 //方法1直接调用 //jspBody.invoke(null); //方法2经过输出到out //jspBody.invoke(jspContext2.getOut());
修改tld文件:ide
<tag> <!-- 标签名 --> <name>showIp</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.ShowIp</tag-class> <!-- 输出标签体的内容格式标签体不能够写jsp的java代码 --> <body-content>scriptless</body-content> </tag>
<%-- 标签提会显示 --%> <rlovep:showIp>我是你 </rlovep:showIp>
你能够在自定义标准中设置各类属性,要接收属性,值自定义标签类必须实现setter方法;测试
<!-- 测试带属性的标签,标签体显示经过类处理 --> <rlovep:AttributeTags name="peace" value="12345
添加俩个属性: //声明属性的成员变量 private Integer value; private String name; 并为两个成员属性写setter方法; public void setValue(Integer value) public void setName(String name)
在标签库文件tld注明此标签和属性:网站
<!-- 标签名 --> <name>AttributeTags</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.AttributeTags</tag-class> <!-- 输出标签体的内容格式标签体不能够写jsp的java代码 --> <body-content>scriptless</body-content> <!-- 配置属性name --> <attribute> <name>name</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <!-- 配置属性value --> <attribute> <name>value</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
就像核心标签库的choose标签同样咱们也能够定义嵌套的自定义标签,这部分咱们主要讲解本身建立一个相似核心标签库的choose标签。步骤以下:
//ChooseTag类: public class ChooseTag extends SimpleTagSupport{ //此去时变量不是标签属性,由when标签更改;othewise得到; private boolean flag; public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @Override public void doTag() throws JspException, IOException { // Choose标签做用显示标签体,以及做为其余两个标签的父标签; getJspBody().invoke(null); } } //whenTag类 public class whenTag extends SimpleTagSupport{ //增长test属性 private boolean test; public boolean isTest() { return test; } public void setTest(boolean test) { this.test = test; } @Override public void doTag() throws JspException, IOException { //若是标签属性为true,显示标签体 if(test){ getJspBody().invoke(null); } //设置父标签给otherwise用 ChooseTag parent=null; if(getParent() instanceof ChooseTag){ parent=(ChooseTag)getParent(); parent.setFlag(test); } } } //OtherWiseTag类: public class OtherWiseTag extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { boolean test=true; //获取父标签的test,由他的上一个when设置 if(getParent() instanceof ChooseTag) { //获取父标签的test,由他的上一个when设置 ChooseTag parent=(ChooseTag)getParent(); test=parent.isFlag(); } if(!test){ getJspBody().invoke(null); } } }
<!-- 定义标签,choose--> <tag> <!-- 标签名 --> <name>choose</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.ChooseTag</tag-class> <!-- 输出标签体的内容格式标签体不能够写jsp的java代码 --> <body-content>scriptless</body-content> </tag> <!-- 定义标签,when--> <tag> <!-- 标签名 when --> <name>When</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.whenTag</tag-class> <!-- 输出标签体的内容格式标签体不能够写jsp的java代码 --> <body-content>scriptless</body-content> <!-- 配置属性name --> <attribute> <name>test</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <!-- 定义标签,Otherwise--> <tag> <!-- 标签名 --> <name>otherwise</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.OtherWiseTag</tag-class> <!-- 输出标签体的内容格式标签体不能够写jsp的java代码 --> <body-content>scriptless</body-content> </tag>
<!-- 测试choose --> <rlovep:choose> <rlovep:When test="${10<5 }"> 条件成立执行when </rlovep:When> <rlovep:otherwise> 条件不成立执行otherwise </rlovep:otherwise> </rlovep:choose>
自定义标签就介绍到这里;
能够在web.xml中给你的网站配置全局的404页面,505页面,错误页面;配置方法以下:记得创建相应的跳转文件。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置空指针异常 --> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.jsp</location> </error-page> <!-- 配置505错误页面 --> <error-page> <error-code>500</error-code> <location>/common/500.jsp</location> </error-page> <!-- 配置404错误页面 --> <error-page> <error-code>404</error-code> <location>/common/404.html</location> </error-page> </web-app>
好的本章介绍到这里 JSP入门就介绍到这里,哟哟,切割闹; 来自一条小鲨鱼wpeace(rlovep.com)