天天看點

servlet 學習筆記1、servlet基礎知識2、servlet程式設計

servlet學習筆記

  • 1、servlet基礎知識
    • 1.1、什麼是servlet?(what)
    • 1.2、為什麼要使用servlet?(why)
    • 1.3、怎麼使用servlet?(how)
    • 1.4、servlet知識點
  • 2、servlet程式設計
    • 2.1、我們編寫一個簡單的servlet
    • 2.2、我們繼續建立一個難度增加的項目
    • 2.3、我們繼續更新一下
    • 2.4、我們繼續更新一下

1、servlet基礎知識

1.1、什麼是servlet?(what)

Servlet是運作在伺服器上的一個Java程式,可以接收用戶端發來的請求,并響應資料給用戶端。

Servlet是JavaWeb三大元件之一,三大元件分别是Servlet程式、Filter過濾器、Listener監聽器

1.2、為什麼要使用servlet?(why)

我們是web容器的元件之一,既然學習web,那麼三大元件必不可少。而我們之前所學的jsp本質上是一個java類。

舉個例子:demo.jsp,編譯後生成了demo.java和demo.class檔案,而這兩個檔案中會導入有關于servlet的包,那麼學習servlet就必不可少了。

1.3、怎麼使用servlet?(how)

我們可以繼承HttpServlet類或者實作Servlet類來實作這個類servlet化。

1.4、servlet知識點

  1. servlet的生命周期
  1. 執行Servlet程式的構造方法
  2. 執行init方法
  3. 執行service方法
  4. 執行destroy方法

    注意:其中1和2是在初次通路并建立Servlet程式時會執行(每次啟動服務隻執行一次),第3步每次重新整理 (通路)都會執行,第4步點選停止時會執行一次

  1. servlet的繼承關系:
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
  2. servletConfig接口:
  1. 從名字來看,得知此接口中是Servlet程式的配置資訊:

    (1) Servlet程式和ServletConfig對象都是由Tomcat負責建立,程式設計人員負責使用

    (2) Servlet程式預設是第一次通路時建立,每個Servlet程式建立時對應的建立ServletConfig對 象,二者互相對應,某個Servlet程式隻可以獲得他對應的ServletConfig對象,無法獲得别的 Servlet程式的ServletConfig對象

  1. ServletConfig接口的三大作用:

    (1) 可以擷取Servlet程式的别名(即web.xml的的内容)

    (2) 可以擷取web.xml的初始化參數的值

    (3) 可以擷取ServletContext對象

  1. servletContext接口:
  1. ServletContext接口表示Servlet上下文對象
  2. 一個web工程隻有一個ServletContext對象執行個體
  3. ServletContext是在web工程啟動時建立,在web工程停止時銷毀
  4. ServletContext對象是一個域對象
  1. 常見的響應碼

200 表示請求成功

302 表示請求重定向

404 表示伺服器收到請求,但是請求的資料不存在(請求位址錯誤)

500 表示伺服器收到請求,但是伺服器内部錯誤(代碼錯誤)

  1. HttpServletRequest類:
每次隻要有請求進入Tomcat伺服器,Tomcat伺服器就會把請求發來的HTTP協定資訊解析好封裝到Request對象中,然後傳遞到service方法中(調用doGet或doPost方法)供程式設計人員使用,程式設計人員通過HttpServletRequest對象,可以擷取到請求的所有資訊

HttpServletRequest類的常用方法:

getRequestURI():擷取請求的資源路徑

getRequestURL():擷取請求的絕對路徑

getRemoteHost():擷取用戶端的ip位址

getHeader():擷取請求頭

getParameter():擷取請求的參數

getParameterValues():擷取請求的參數(多個值時使用)

getMethod():擷取請求的方式(GET或POST)

setAttribute(key, value):設定域資料

getAttribute(key):擷取域資料

getRequestDispatcher():擷取請求轉發對象

  1. HttpServletResponse類
每次隻要有請求進入Tomcat伺服器,Tomcat伺服器就會建立一個Response對象傳遞給Servlet程式。HttpServletResponse表示所有響應的資訊(HttpServletRequest表示請求發來的資訊),可以通過HttpServletResponse對象設定傳回給用戶端的資訊

兩個輸出流的說明:

位元組流 getOutputStream(); 常用于下載下傳(傳遞)二進制資料

字元流 getWriter(); 常用于回傳字元串

從伺服器往用戶端(浏覽器)回傳字元串資料

  1. 請求轉發
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
請求轉發指的是伺服器收到請求之後,從一個資源跳轉到另一個資源的操作。
  1. 重定向
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
請求重定向指的是用戶端給伺服器發送請求,然後伺服器通知用戶端去通路自己的新位址(之前的位址可能被廢棄)叫請求重定向
  1. “/”的含義:

“/”若被浏覽器解析,得到的位址是:http://ip:port/

(1) /

“/”若被伺服器解析,得到的位址是:http://ip:port/工程路徑

(1) /servlet1

(2) servletContext.getRealPath(“/”);

(3) request.getRequestDispatcher(“/”);

2、servlet程式設計

2.1、我們編寫一個簡單的servlet

  1. 建立一個web項目。
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
  2. 建立一個servlet類,起名加WebDemo1.
package com.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

public class WebDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("這個是get方法1");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("這個是post方法1");
    }
}

           
  1. 配置web.xml檔案。
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_4_0.xsd"
         version="4.0">

        <servlet>
            <servlet-name>webDemo1</servlet-name>
            <servlet-class>com.controller.WebDemo1</servlet-class>
        </servlet>
      
    <servlet-mapping>
        <servlet-name>webDemo1</servlet-name>
        <url-pattern>/web1</url-pattern>
    </servlet-mapping>

</web-app>
           
  1. 啟動項目,并通路網站,可以看出結果。
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計

2.2、我們繼續建立一個難度增加的項目

先建立一個jsp頁面,有一個按鈕,點選這個按鈕可以在控制台出現一行字“你成功了”。
  1. 建立一個servlet類,起名WebDemo1,并寫出内容。
package com.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

public class WebDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("這個是get方法1");
        System.out.println("你成功啦");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("這個是post方法1");
    }
}

           
  1. 修改web.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_4_0.xsd"
         version="4.0">

        <servlet>
            <servlet-name>webDemo1</servlet-name>
            <servlet-class>com.controller.WebDemo1</servlet-class>
        </servlet>
      
    <servlet-mapping>
        <servlet-name>webDemo1</servlet-name>
        <url-pattern>/web1</url-pattern>
    </servlet-mapping>

</web-app>
           
  1. 建立一個jsp頁面,名稱叫index1.jsp頁面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/web1" >
    <input type="submit" value="送出">
</form>
</body>
</html>

           
  1. 通路并檢視結果
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計

2.3、我們繼續更新一下

我們在一個頁面上輸入一些資訊,控制台進行列印。
  1. 建立一個index.jsp頁面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
        <form action="${pageContext.request.contextPath}/web1" method="post">
            姓名:<input type="text" name="userName"><br>
            密碼:<input type="password" name="password"><br>
            性别:<input type="radio" value="男" name="sex">男 <input type="radio" value="女" name="sex">女<br>
            位址:<select name="address">
                <option value="北京">北京</option>
                <option value="南京">南京</option>
        </select><br>
            愛好:<input type="checkbox" name="hobby" value="籃球">籃球
            <input type="checkbox" name="hobby" value="足球">足球
            <input type="checkbox" name="hobby" value="羽毛球">羽毛球<br>
            <input type="submit" value="送出"/>
        </form>



  </body>
</html>
           
  1. 建立一個servlet類
package com.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

public class WebDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post2");
        //解決中文亂碼
        resp.setContentType("text/html;charset=utf-8");
        //請求解決亂碼
        req.setCharacterEncoding("utf-8");
        //響應解決亂碼
        resp.setCharacterEncoding("utf-8");


        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        String address = req.getParameter("address");
        String sex = req.getParameter("sex");
        String[] hobbies = req.getParameterValues("hobby");


        System.out.println("姓名:"+ userName);
        System.out.println("密碼:"+ password);
        System.out.println("性别:"+ sex);
        System.out.println("愛好:"+ Arrays.toString(hobbies));
        System.out.println("位址:"+ address);


        req.getRequestDispatcher("/result/result1.jsp").forward(req, resp);
    }
}

           
  1. 修改web.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_4_0.xsd"
         version="4.0">

        <servlet>
            <servlet-name>webDemo1</servlet-name>
            <servlet-class>com.controller.WebDemo1</servlet-class>
        </servlet>

        <servlet>
              <servlet-name>webDemo2</servlet-name>
               <servlet-class>com.controller.WebDemo2</servlet-class>
         </servlet>

         <servlet-mapping>
             <servlet-name>webDemo2</servlet-name>
              <url-pattern>/web2</url-pattern>
          </servlet-mapping>

    <servlet-mapping>
        <servlet-name>webDemo1</servlet-name>
        <url-pattern>/web1</url-pattern>
    </servlet-mapping>

</web-app>
           
  1. 運作、檢視結果。
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
servlet 學習筆記1、servlet基礎知識2、servlet程式設計

2.4、我們繼續更新一下

從一個頁面擷取到資訊轉發到另一個頁面顯示
  1. 寫出index.jsp頁面(2.3有)
  2. 修改web.xml檔案(2.3有)
  3. 修改servlet類
package com.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

public class WebDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post2");
        //解決中文亂碼
        resp.setContentType("text/html;charset=utf-8");
        //請求解決亂碼
        req.setCharacterEncoding("utf-8");
        //響應解決亂碼
        resp.setCharacterEncoding("utf-8");


        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        String address = req.getParameter("address");
        String sex = req.getParameter("sex");
        String[] hobbies = req.getParameterValues("hobby");


        System.out.println("姓名:"+ userName);
        System.out.println("密碼:"+ password);
        System.out.println("性别:"+ sex);
        System.out.println("愛好:"+ Arrays.toString(hobbies));
        System.out.println("位址:"+ address);

        req.setAttribute("userName", userName);
        req.setAttribute("password", password);
        req.setAttribute("sex", sex);
        req.setAttribute("hobbies", Arrays.toString(hobbies));
        req.setAttribute("address", address);

        req.getRequestDispatcher("/result/result1.jsp").forward(req, resp);
    }
}

           
這裡我們用到了一個請求轉發。
  1. 建立一個result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    姓名:${userName}
    性别:${sex}
    密碼:${password}
    愛好:${hobbies}
    位址:${address}
</body>
</html>

           
這裡我們用到了el表達式進行取出資料。
  1. 運作、檢視結果
    servlet 學習筆記1、servlet基礎知識2、servlet程式設計
這裡一部分内容借鑒别的部落格,作者在這裡表示衷心感謝。
ssm

繼續閱讀