iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 8
0
自我挑戰組

30 days JSP & Servlet學習紀錄 系列 第 8

[Day 8] ServletConfig & ServletContent - part1

前言

今天來整理一下ServletConfig & ServletContent的用法
簡單來說就是預設參數
可以用來設定一些參數的方式

以先前的經驗來說,大部分還是會把這些參數設定在DB裡面
但預設參數的機制
可以避免以後要修改內容可以不需改程式(Hard Code),直接調整web.xml


ServletConfig

  • 定義:
    為Servlet自己所擁有,所以必須在init()才會取得ServletConfig物件
    即不能在Constructor去使用它
    若要在JSP使用,必須先在該Servlet存取

  • 表示方法:
    可在web.xml(DD)裡設定,也可以在Servlet裡設定
    在這先demo在DD的寫法

    web.xml

     <servlet>
      <servlet-name>LoginServlet</servlet-name>
      <servlet-class>com.servlet.LoginServlet</servlet-class>  
      <init-param>
    		<param-name>name</param-name>
    		<param-value>Zarek</param-value>
    </init-param>
    </servlet>
    

    因為ServletConfig是屬於Servlet的,所以必須寫在Servlet的tag裡面
    只有LoginServlet才能讀取
    且參數的tag為init-param

    而在Servlet要讀取這個參數
    有兩種方式

    • getServletConfig().getInitParameter(Key name)
      =>建議使用,以避免混淆是否為ServletConfig還是ServletContent
    • getInitParameter(Key name)
      這裡的key name就是在web.xml所設定的param-name(這個例子即"name"這個變數)

    MyFirstServlet.java

    String secretName = getServletConfig().getInitParameter("name");
    //String secretName =  getInitParameter("name"); 另一種方式
    

ServletContent

  • 定義:
    有點類似全域變數的概念
    只要整個Web application都可以存取
    而非針對一個Servlet,且也可以在JSP直接使用

  • 表示方法:
    由於是整個web都可以呼叫,因此只設定在web.xml

    web.xml

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0" metadata-complete="true">
    <context-param>
    	<param-name>ShowName</param-name>
    	<param-value>Chung</param-value>
    </context-param>
    

    在ServletContent裡,因是共用的概念
    所以必須要放在web-app的tag裡面,而不是Servlet裡
    另外參數的tag名稱開頭為context

    至於Servlet裡要取出該值為

    • getServletContext().getInitParameter(key name)
      這裡的key name和前面說的一樣
      就是在web.xml所設定的param-name(這個例子即"ShowName"這個變數)

    MyFirstServlet.java

    String secretName = getServletContext().getInitParameter("ShowName");
    

    小結

    一個Servlet會有一個ServletConfig
    整個web應用程式只會有一個ServletContext

    明天會利用今天所提到的
    加上getParameter()和setAttribute去取出相關的值
    用先前的的範例在稍作加工
    改寫簡易版小登入的功能


上一篇
[Day 7] Request & Response
下一篇
[Day 9 ] ServletConfig & ServletContent - part2
系列文
30 days JSP & Servlet學習紀錄 30

尚未有邦友留言

立即登入留言