- Java EE 程序設(shè)計(jì)
- 郝玉龍編著
- 1099字
- 2019-07-01 10:16:05
3.6 Servlet配置
3.6.1 初始化參數(shù)
Servlet除了從請(qǐng)求對(duì)象中獲取信息以外,還可以從配置文件中獲取配置參數(shù)信息。與請(qǐng)求中的動(dòng)態(tài)信息不同,配置文件中的參數(shù)信息與具體的請(qǐng)求無(wú)關(guān),而是Servlet初始化時(shí)調(diào)用的。通過(guò)配置信息來(lái)初始化Servlet可以有效避免硬編碼,提高Servlet的可移植性。
Servlet配置參數(shù)保存在ServletConfig對(duì)象中。在Servlet被實(shí)例化后,ServletConfig對(duì)象對(duì)任何客戶端在任何時(shí)候的訪問(wèn)都有效,但一個(gè)Servlet的ServletConfig對(duì)象不能被其他Servlet訪問(wèn)。
在Servlet中調(diào)用getServletConfig方法可直接獲取ServletConfig對(duì)象。
在“項(xiàng)目”視圖中選中Web應(yīng)用程序Chapter3,右擊,在彈出的快捷菜單中選擇“新建”→Servlet命令,彈出New Servlet對(duì)話框。在“類名”文本框中輸入Servlet名稱InitParamServlet。在“包”文本框中輸入Servlet類所在的java包名稱com.servlet。單擊“下一步”按鈕,得到如圖3-26所示的對(duì)話框。選中“將信息添加到部署描述符(web.xml)”復(fù)選框。

圖3-26 配置Servlet的初始化參數(shù)
單擊“新建”按鈕,在“初始化參數(shù)”列表中將新增一項(xiàng)。在“名稱”單元格中輸入Servlet初始化參數(shù)名稱FileType,在“值”單元格中輸入初始化參數(shù)的值image。默認(rèn)其他選項(xiàng)設(shè)置,單擊“完成”按鈕,NetBeans自動(dòng)生成InitParamServlet的框架源文件。主要代碼如程序3-20所示。
程序3-20:InitParamServlet.java
package com.servlet; … public class InitParamServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); try { response.setContentType("text/html; charset=UTF-8"); for (Part p : request.getParts()) { String ftype=this.getInitParameter("FileType"); if (p.getContentType().contains(ftype)) { String fname = getFileName(p); p.write(fname); System.out.println(fname); System.out.println(p.getContentType()); } } } catch (Exception e) { System.out.println(e.toString()); } finally { out.close(); } } private String getFileName(Part part) { String header = part.getHeader("Content-Disposition"); String fileName = header.substring(header.indexOf("filename=\"") + 10, header.lastIndexOf("\"")); fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); return fileName; } … }
程序說(shuō)明:首先需要注意的是,由于示例選擇將在web.xml中保存配置信息,因此,代碼中便沒有了注解@WebServlet。程序中通過(guò)調(diào)用Servlet的getInitParameter方法可以方便地獲得Servlet的初始化參數(shù)。若Servlet有多個(gè)初始化參數(shù),則可調(diào)用getInitParameter獲得代表初始化參數(shù)列表的枚舉。
Servlet在web.xml中的配置信息如程序3-21所示。
程序3-21:web.xml(片段)
<servlet> <servlet-name>InitParamServlet</servlet-name> <servlet-class>com.servlet.InitParamServlet</servlet-class> <init-param> <param-name>FileType</param-name> <param-value>image</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>InitParamServlet</servlet-name> <url-pattern>/InitParamServlet</url-pattern> </servlet-mapping>
修改程序3-11,將文件上傳表單的action屬性指向Servlet組件InitParamServlet,重新運(yùn)行程序3-11,看看會(huì)得到什么結(jié)果。
說(shuō)明:Servlet的初始化參數(shù)也可以通過(guò)注解@WebInitParam在Servlet實(shí)現(xiàn)代碼中進(jìn)行配置,但是將Servlet的初始化參數(shù)配置在部署描述文件中,如果在部署Servlet組件時(shí)需要調(diào)整初始化參數(shù),可直接編輯部署描述文件,而不需要重新編譯代碼,從而大大提高了程序部署的靈活性。
3.6.2 URL模式
在Servlet配置中,除了初始化參數(shù)外,還有一個(gè)重要的工作便是配置Servlet對(duì)應(yīng)的URL地址信息,又稱為URL模式。這里之所以稱之為URL模式而不是URL地址,是因?yàn)橥粋€(gè)Servlet可以被映射到多個(gè)URL地址上。
另外,在Servlet映射到URL中也可以使用*通配符,但是只能有兩種固定的格式:一種格式是“*.?dāng)U展名”,另一種格式是以正斜杠(/)開頭并以“/*”結(jié)尾。如下所示:
<servlet-mapping> <servlet-name>First</servlet-name> <url-pattern>/First/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>First</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
3.6.3 默認(rèn)Servlet
特別值得一提的是,如果某個(gè)Servlet的映射路徑僅僅為一個(gè)正斜杠(/),那么這個(gè)Servlet就成為當(dāng)前Web應(yīng)用程序的默認(rèn)Servlet。
凡是在當(dāng)前Web應(yīng)用上下文找不到匹配的組件的URL,它們的訪問(wèn)請(qǐng)求都將交給默認(rèn)Servlet處理,也就是說(shuō),默認(rèn)Servlet負(fù)責(zé)處理所有其他Servlet都不處理的訪問(wèn)請(qǐng)求。
- ThinkPHP 5實(shí)戰(zhàn)
- HTML5 移動(dòng)Web開發(fā)從入門到精通(微課精編版)
- Visual Basic程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)(第4版)
- Learning Raspbian
- 大數(shù)據(jù)分析與應(yīng)用實(shí)戰(zhàn):統(tǒng)計(jì)機(jī)器學(xué)習(xí)之?dāng)?shù)據(jù)導(dǎo)向編程
- SQL Server數(shù)據(jù)庫(kù)管理與開發(fā)兵書
- Learning Apache Karaf
- Visual Foxpro 9.0數(shù)據(jù)庫(kù)程序設(shè)計(jì)教程
- AutoCAD 2009實(shí)訓(xùn)指導(dǎo)
- Hadoop 2.X HDFS源碼剖析
- TypeScript 2.x By Example
- Java 從入門到項(xiàng)目實(shí)踐(超值版)
- 深入分析GCC
- 美麗洞察力:從化妝品行業(yè)看顧客需求洞察
- SAP HANA Cookbook