[Java Web]Servlet 的學習

Servlet 的學習

Servlet的開發

  • Servlet是運行在服務器端的程序,用於處理及響應客戶端的請求。
  • Servlet是個特殊的Java類,必須繼承HttpServlet。每一個Servlet能夠響應客戶端的請求。

Servlet相應客戶端請求的方法:html

  • doGet():響應客戶端的Get請求
  • doPost():響應客戶端的POST請求
  • doPut():響應客戶端的PUT請求
  • doDelete():響應客戶端的DELETE請求

大部分時候,Servlet對於全部請求的響應都是同樣的,因此能夠只重寫service()方法。java

另外HttpServlet還包含兩個方法:web

init(ServletConfig config):建立Servlet實例<br/>
destroy():銷燬Servlet實例服務器

不須要爲Servlet編寫構造器,若是須要對Servlet進行初始化的操做,能夠重寫init方法。app

例子:學習

//Servlet必須繼承HttpServlet類
@WebServlet(name="firstServlet"
    ,urlPatterns={"/firstServlet"})
public class FirstServlet extends HttpServlet
{
    //客戶端的響應方法,使用該方法能夠響應客戶端的全部類型請求
    public void service(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException,java.io.IOException
    {
        //設置解碼方式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //獲取name的請求參數
        String name = request.getParameter("name");
        //獲取gender的請求參數
        String gender = request.getParameter("gender");
        //獲取color的請求參數
        String[] color = request.getParamterValues("color");
        //獲取country的請求參數
        String national = request.getParameter("national");
        //獲取頁面輸出流
        PrintStream out = new PrintStream(response.getOutputStream());
        //輸出HTML頁面標籤
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet測試</title>");
        out.println("</head>");
        out.println("<body>");
        //輸出請求參數:name
        out.println("name "+name + "<hr/>");
        //輸出請求參數:gender
        out.println("gender "+gender + "<hr/>");
        //輸出請求參數:color
        for(String c:color)
        {
            out.println("color " + c +"<hr/>");
        }
        //輸出請求參數:national
        out.println("national "+national);
        out.println("</body>");
        out.println("</html>");
    }
}

Servlet和JSP的區別在於:測試

  • Servlet中沒有內置對象,原來JSP中的內置對象都必須由程序顯式建立
  • 對於靜態的HTML標籤,Servlet都必須使用頁面輸出流逐行輸出

Servlet的配置

編輯後的Servlet文件要編譯成class文件,而後將文件放在WEB-INF/classes中才可以響應用戶請求。並且還要將Servlet配置在web應用中(修改web.xml)url

配置Servlet的方式有兩種(Servlet3.0開始):spa

  • 在Servlet類中使用@WebServlet註解進行配置
  • 經過在web.xml文件中進行配置

@WebServlet註解最經常使用的屬性code

  • name:指定Servlet的名稱
  • urlPatterns:指定Servlet處理的url

配置Servlet的注意事項:

使用註解來配置Servlet:

一、不要在web.xml文件的根元素<web-app>中制定metadata-complete="true"
二、不要在web.xml文件中配置該文件

使用web.xml配置Servlet須要配置兩個部分:

一、配置Servlet的名字:對應web.xml文件中的<servlet/>元素
二、配置Servlet的URL:對應web.xml文件中的<servlet-mapping/>元素

經過配置web.xml文件的例子(經過註解的方式的例子在上面的代碼中):

<!--配置Servlet的名字-->
<servlet>
    <!--指定Servlet的名字-->
    <servlet-name>firstServlet</servlet-name>
    <!--指定Servlet的實現類-->
    <servlet-class>FirstServlet</servlet-class>
</servlet>
<!--配置Servlet的URL-->
<servlet-mapping>
    <!--指定Servlet的名字-->
    <servlet-name>firstServlet</servlet-name>
    <!--指定Servlet映射的URL地址-->
    <url-pattern>/firstServlet</url-pattern>
</servlet-mapping>

JSP/Servlet的生命週期

生命週期:

  • (1)建立Servlet實例
  • (2)Web容器調用Servlet的init方法,對Servlet進行初始化
  • (3)Servlet初始化後,將一直存在於容器中,響應用戶請求。
  • (4)調用Servlet的destroy方法銷燬Servlet。

圖片描述

load-on-startup Servlet

load-on-startup Servlet的是Web應用啓動時馬上建立Servlet實例。

配置load-on-startup的Servlet的方式有兩種:

  • web.xml文件中經過<servlet../>元素的子元素<load-on-startup.../>進行配置
  • 經過@WebServlet註解的loadOnStartup屬性指定<br/><br/>
    (無論經過哪一種方式,都之接收一個整型值,數字越小表明優先級越高)

註解配置:

@WebServlet(loadOnStartup=1)
public class TimerServlet extends HttpServlet
{
    public void init(ServletConfig config)throws ServletException
    {
        super.init(config);
        Timer t = new Timer(1000.new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                System.out.println(new Date());
            }
        });
    }
}

web.xml配置:

<servlet>
    <!--Servlet名-->
    <servlet-name>timerServlet</servlet-name>
    <!--Servlet的實現類-->
    <servlet-class>hsr.TimerServlet</servlet-class>
    <!--應用啓動就建立實例-->
    <load-on-startup>1</load-on-startup>
</servlet>

訪問Servlet的配置參數

爲Servlet配置參數的方法:

  • 經過@WebServletinitParam屬性指定
  • web.xml文件的<serlvet../>的子元素<init-param../>指定

經過@WebServlet指定:

@WebServlet(name="testServlet",
    urlPatterns={"/testServlet"},
    initParam={
        @WebInitParam(name="Param_name1",value="Param_value1"),
        @WebInitParam(name="Param_name2",value="Param_value2")
    })

經過wel.xml指定:

<init-param>
    <param-name>param_name</param-name>
    <param-name>param_name</param-name>
</init-param>

訪問配置參數:

//獲取ServletConfig對象
ServletConfig config = getServletConfig();
//經過ServletConfig對象獲取參數
String param = config.getInitParameter("param_name");
相關文章
相關標籤/搜索