[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/> - " + hello + "<br/>");
out.println("<b>注入的整數</b>: <br/> - " + i + "<br/>");
out.println("<b>注入的字串數組</b>: <br/>");
for (String person : persons.split(",")) { //將字串以","分割,並走訪所有persons的字串
out.println(" - " + 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>
留言
張貼留言