自定義標籤 實現頁面顯示properties中key對應的屬性值

實例

1.要用到 properties屬性文件,定義一個message.properties文件放在WEB-INF目錄下

message.properties

title=hello

body=world


2.定義一個Servlet,初始化的時候加載 屬性文件

InitServlet2.java 只起到初始化作用會被運行

 
  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>

 
  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

 
  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.   


4.創建標籤庫描述文件 myTag.tld ,如果有屬性tag內要加屬性attribute

 
  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>

5.JSP頁面 

 

  1.  <%@page language="java" contentType="test/html;charset=GB2312" pageEncoding="GB2312"%> 

  2. <!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"http://www.w3.org/TR/heml4/loose.dtd"><%@ taglib uri="/myTag" prefix="hello" %>  
  3.   
  4. <html>  
  5.   <head>  
  6.   
  7.   </head>  
  8.     
  9.   <body>  
  10.     <!-- key的值 傳到 標籤處理類的 setKey() -->  
  11.     <hello:message key="title"/><br/>  
  12.     <hello:message key="body"/>  
  13.       
  14.       
  15.       
  16.   </body>  
  17. </html>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章