Servlet之自定义标签(二)

实例二

1.要用到 properties属性文件,定义一个message.properties文件放在WEB-INF目录下

message.properties

title=hello
body=ok


2.定义一个Servlet,初始化的时候加载 属性文件

InitServlet2.java 只起到初始化作用会被运行

[java]  view plain copy
  1. package com.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.PrintWriter;  
  6. import java.util.Properties;  
  7.   
  8. import javax.servlet.ServletConfig;  
  9. import javax.servlet.ServletContext;  
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.http.HttpServlet;  
  12. import javax.servlet.http.HttpServletRequest;  
  13. import javax.servlet.http.HttpServletResponse;  
  14.   
  15. public class InitServlet2 extends HttpServlet {  
  16.   
  17.     @Override  
  18.     public void init(ServletConfig config) throws ServletException {  
  19.           
  20.         Properties ps = new Properties() ;  
  21.           
  22.           
  23.         ServletContext context = config.getServletContext() ;  
  24.         //获取 message.properties文件的输入流  
  25.         InputStream is = context.getResourceAsStream("/WEB-INF/message.properties");  
  26.           
  27.         try {  
  28.               
  29.             ps.load(is); //把获取的流加载到 ps对象中  
  30.               
  31.         } catch (IOException e) {  
  32.               
  33.             e.printStackTrace();  
  34.         }  
  35.         //把ps对象放在 全局的application中,达到共享作用  
  36.         context.setAttribute("ps", ps);  
  37.           
  38.           
  39.     }  
  40.       
  41.   
  42. }  

对应的web.xml文件,没有 <servlet-mapping></servlet-mapping>

[html]  view plain copy
  1. <servlet>  
  2.   <servlet-name>InitServlet2</servlet-name>  
  3.   <servlet-class>com.servlet.InitServlet2</servlet-class>  
  4.   <load-on-startup>3</load-on-startup>  
  5. </servlet>  

3.创建标签的处理类 MyTag2.java

对于标签中涉及到属性的一定要在处理类中 定义 setXXX , getXXX

[java]  view plain copy
  1. package com.tag;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.Properties;  
  5.   
  6. import javax.servlet.jsp.JspException;  
  7. import javax.servlet.jsp.PageContext;  
  8. import javax.servlet.jsp.tagext.TagSupport;  
  9.   
  10.   
  11. public class MyTag2 extends TagSupport{  
  12.       
  13.     private String key ;  
  14.       
  15.       
  16.     public String getKey() {  
  17.         return key;  
  18.     }  
  19.       
  20.     //接收页面 传过来的值 也就是属性的值比如  key="title"  
  21.     public void setKey(String key) {  
  22.         this.key = key;  
  23.     }  
  24.   
  25.   
  26.     @Override  
  27.     public int doEndTag() throws JspException {  
  28.           
  29.           
  30.           
  31.         try {  
  32.               
  33.             Properties ps = (Properties)this.pageContext.getAttribute("ps", PageContext.APPLICATION_SCOPE);  
  34.               
  35.             String message = ps.getProperty(key); // key对应 自动调用 getKey()  
  36.             this.pageContext.getOut().println(message);  
  37.               
  38.         } catch (IOException e) {  
  39.               
  40.             e.printStackTrace();  
  41.         }  
  42.           
  43.         return EVAL_PAGE;  
  44.     }  
  45.   
  46. }  


4.创建标签库描述文件 myTag.tld ,如果有属性tag内要加属性attribute

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  3.   
  4. <taglib>  
  5.    <tlib-version>1.0</tlib-version>  
  6.    <jsp-version>1.1</jsp-version>  
  7.    <short-name>myTag</short-name>  
  8.    <uri>/myTag</uri> <!-- 这个是 uri 而不是 url -->  
  9.      
  10.    <tag>  
  11.        <name>message</name>  
  12.        <tag-class>com.tag.MyTag2</tag-class>  
  13.        <body-content>empty</body-content>  
  14.          
  15.        <attribute>  
  16.            <name>key</name> <!-- 该属性的名字 key要和 处理类的成员变量相对应 -->  
  17.            <required>true</required>   <!-- required = true 说明该属性是必填的,反之false-->  
  18.        </attribute>  
  19.      
  20.    </tag>  
  21.   
  22.   
  23. </taglib><pre name="code" class="html"><pre></pre>  
  24. <pre></pre>  
  25. <p></p>  
  26. <pre></pre>  
  27. <pre></pre>  
  28. <p></p>  
  29. <p><strong><span style="font-family:FangSong_GB2312; font-size:18px"><strong><span style="font-family:FangSong_GB2312; font-size:18px"></span></strong></span></strong></p>  
  30. <p><strong><span style="font-family:FangSong_GB2312; font-size:18px"><strong><span style="font-family:FangSong_GB2312; font-size:18px">5.<strong><span style="font-family:FangSong_GB2312; font-size:18px"><strong><span style="font-family:FangSong_GB2312; font-size:18px"><strong><span style="font-family:FangSong_GB2312; font-size:18px">tag2.jsp</span></strong></span></strong>文件中引入标签库,然后插入标签</span></strong></span></strong></span></strong></p>  
  31. <p><strong><span style="font-family:FangSong_GB2312; font-size:18px"><strong><span style="font-family:FangSong_GB2312; font-size:18px"></span></strong></span></strong></p>  
  32. <pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  33. <%@ taglib uri="/myTag" prefix="hello" %>  
  34.   
  35. <html>  
  36.   <head>  
  37.   
  38.   </head>  
  39.     
  40.   <body>  
  41.     <!-- key的值 传到 标签处理类的 setKey() -->  
  42.     <hello:message key="title"/><br/>  
  43.     <hello:message key="body"/>  
  44.       
  45.       
  46.       
  47.   </body>  
  48. </html>  
  49. </pre><br>  
  50. <br>  
  51. <p></p>  
  52. <p><br>  
  53. </p>  
  54. <pre></pre>  
  55. <pre></pre>  
  56.      
  57. </pre>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值