官术网_书友最值得收藏!

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)求。

主站蜘蛛池模板: 望奎县| 德昌县| 东山县| 仲巴县| 象山县| 孟津县| 马关县| 读书| 宜黄县| 甘肃省| 麟游县| 岐山县| 吉安市| 麦盖提县| 秭归县| 平度市| 界首市| 手游| 来宾市| 永清县| 湄潭县| 龙南县| 张家口市| 陕西省| 吉林市| 元江| 岚皋县| 柳河县| 岢岚县| 中山市| 汤原县| 江津市| 香港| 奇台县| 宝山区| 天全县| 舟曲县| 莱西市| 东明县| 英德市| 周口市|