[Java][Servlet] @Resource annotation 註解用法

在 java檔使用 @Resource,可以在 Servlet 執行的時候動態注入(injection) web.xml 裡的參數

也就是不需要將數字、字串等值寫在 java檔內,而是寫在 web.xml 當中



一、 程式結果
二、 程式碼



一、 程式結果



二、 程式碼

Project 類型: Dynamic Web Project
Project 名稱: servlet
Package 名稱: idv.ycc.servlet
Class 類型: Servlet
Class 名稱: InjectionServlet.java

InjectionServlet.java

package idv.ycc.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class InjectionServlet
 */
@WebServlet("/InjectionServlet")
public class InjectionServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
       
private @Resource(name="hello") String hello; //注入字串。一行寫法
private @Resource(name="i") int i; //注入整數

@Resource(name="persons") //兩行寫法
private String persons; //註解與程式分開

    /**
     * @see HttpServlet#HttpServlet()
     */
    public InjectionServlet() {
        super();
    }
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); //設定request編碼
response.setCharacterEncoding("UTF-8"); //設定response編碼
response.setContentType("text/html"); //設定response輸出類型

PrintWriter out = response.getWriter(); //取得可以將字元傳給 client 的PrintWriter
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("<HEAD><TITLE>Resource 資源註解注入</TITLE></HEAD>");
out.println("<style>body {font-size: 12px;} </style>");
out.println("<b>注入的字串</b>: <br/>&nbsp;&nbsp;-&nbsp;" + hello + "<br/>");
out.println("<b>注入的整數</b>: <br/>&nbsp;&nbsp;-&nbsp;" + i + "<br/>");
out.println("<b>注入的字串數組</b>: <br/>");

for (String person : persons.split(",")) { //將字串以","分割,並走訪所有persons的字串
out.println("&nbsp;&nbsp;-&nbsp;" + person + "<br/>");
}

out.println("<BODY>");
out.println("</BODY>");
out.println("</HTML>");
out.flush(); //輸出緩衝區,避免滿出造成error
out.close(); //關閉 PrintWriter,釋放系統資源
}
}


web.xml

<env-entry-name>hello</env-entry-name> 對應 InjectionServlet.java 帶有 @Resource 的 hello 變數

<env-entry-value>Hello, 來自 web.xml 的Resource</env-entry-value> 對應 InjectionServlet.java 帶有 @Resource 的 hello 值

<env-entry-type>java.lang.String</env-entry-type> 對應 InjectionServlet.java 帶有 @Resource 的 hello 型態
但僅能使用 java.lang 裡面的類型
java.lang.Byte
java.lang.Boolean
java.lang.Character
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <servlet>
        <servlet-name>InjectionServlet</servlet-name>
        <servlet-class>idv.ycc.servlet.InjectionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>InjectionServlet</servlet-name>
        <url-pattern>/servlet/injectionservlet</url-pattern>
    </servlet-mapping>
    <!-- 下面是資源配置 -->
    <env-entry>
        <env-entry-name>hello</env-entry-name>                          <!-- 對應 java檔內@Resource的hello變數 -->
        <env-entry-type>java.lang.String</env-entry-type>               <!-- 對應 java檔內@Resource的hello型態 -->
        <env-entry-value>Hello, 來自 web.xml 的Resource </env-entry-value> <!-- 對應 java檔內@Resource的hello值 -->
    </env-entry>
    <env-entry>
        <env-entry-name>i</env-entry-name>
        <env-entry-type>java.lang.Integer</env-entry-type>
        <env-entry-value>30</env-entry-value>
    </env-entry>
    <env-entry>
        <env-entry-name>persons</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value> Apple, Pieapple, Banana, Grape</env-entry-value>
    </env-entry>
    
</web-app>

留言

這個網誌中的熱門文章

[面試] 日月光 設備工程師

[日文] Google日文輸入法 簡單安裝說明

[Windows] 還我 win7 相片檢視器!!