iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Software Development

從Servlet到Spring MVC系列 第 5

Day04 Servlet - Hello Servlet

  • 分享至 

  • xImage
  •  

前言

前一天我們介紹了tomcat與IDEA的整合,從無到有架構了web的項目從開發->構建->佈署走了一回,今天我們正式踏入Servlet的領域。

靜態資源與動態資源

介紹Servlet前我們先來看一下在Server上的兩種資源

  • 靜態資源
    就是不會變動的資源,例如html、css、js、image等這些我們放在static資料夾的東西
  • 動態資源
    Server運行時需透過程式碼動態生成的資源,例如Servlet、Thymeleaf等
    https://ithelp.ithome.com.tw/upload/images/20240919/20128084B1bkJ4Chyi.png

maven專案建置

File -> New -> module
https://ithelp.ithome.com.tw/upload/images/20240919/20128084yn8zUnJz5J.png
輸入專案名稱,選擇Archetype為webapp的選項
https://ithelp.ithome.com.tw/upload/images/20240919/20128084xaXOKMQv0j.png
建立後maven跑完就會有以下路徑了,是不是很快呢
https://ithelp.ithome.com.tw/upload/images/20240919/20128084nPcwqfpCQC.png
接著src資料夾右鍵
https://ithelp.ithome.com.tw/upload/images/20240919/20128084GaKlmjkHVR.png
創建java資料夾作為撰寫servlet的路徑,其他標準Maven資料夾可按需創建
https://ithelp.ithome.com.tw/upload/images/20240919/20128084AAvC8DIvgr.png
Edit configuration
https://ithelp.ithome.com.tw/upload/images/20240919/20128084MNo9szrqzh.png
加入day04:war exploded,修改Application Context
https://ithelp.ithome.com.tw/upload/images/20240919/20128084Tg2W6HOMON.png
啟動tomcat,訪問localhost:8080
https://ithelp.ithome.com.tw/upload/images/20240919/20128084W3JO6gV3Wk.png

HelloServlet

加入servlet-api

調整pom檔,移除用不到的junit,加入前一天提到servlet需要的servlet-api

<dependencies>
  <!-- copy from maven repository https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api/6.0.0 -->
  <dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

創建index.html

首先我們這次的30天挑戰並不會說到jsp,我們先把由maven自動產生的index.jsp刪除,
創建index.html

<body>
    <form action="get" action="HelloServlet">
        請輸入大名 <input type="username"><br>
        <input type="submit" value="Submit">
    </form>
</body>

開發HandleHelloServlet

implements Servlet會產生很多override方法,我們重寫service方法

@Override
public void service(ServletRequest request, ServletResponse response) throws IOException {
    //get parameter from request
    String username = request.getParameter("username");
    //handle parameter
    String helloMessage = "Hello " + username + "!";
    //add message to request
    response.getWriter().write(helloMessage);
}

創建xsd 6.0的部署描述檔

調整web.xml(部署描述檔Deployment Descriptors,簡稱DD檔),由於maven產生的版本比較舊,我們先刪除舊的再透過IDEA重新產生6.0的DD檔
https://ithelp.ithome.com.tw/upload/images/20240919/20128084nA05CCkjC4.png
建立6.0的DD檔
https://ithelp.ithome.com.tw/upload/images/20240919/20128084OhzCcwUbZW.png

web.xml設定Servlet Mapping

url-pattern就是瀏覽器訪問的網址路徑,web container透過這個設定mapping找到對應的Servlet來處理請求

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">
    <servlet>
        <servlet-name>HandleHelloServlet</servlet-name>
        <servlet-class>com.swj.HandleHelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HandleHelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
</web-app>

啟動服務訪問HelloServlet Get請求

我們會發現GET請求會將請求參數連同請求網址由?分隔帶到Server端請求
https://ithelp.ithome.com.tw/upload/images/20240919/20128084A5M2aB7Rzg.png

啟動服務訪問HelloServlet Get請求

我們修改前面index.html中form表單method為post

<body>
    <form action="post" action="HelloServlet">
        請輸入大名 <input type="username"><br>
        <input type="submit" value="Submit">
    </form>
</body>

post請求會把請求數據放在url中
https://ithelp.ithome.com.tw/upload/images/20240919/20128084ul8poWTK2y.png
請求數據放在body中
https://ithelp.ithome.com.tw/upload/images/20240919/201280843l874NCmxz.png

小結

https://ithelp.ithome.com.tw/upload/images/20240919/20128084DZYd1avZDF.png


上一篇
Day03 Basic - Integrate Tomcat in Intellij IDEA
下一篇
Day05 Servlet - URL Pattern and Misc
系列文
從Servlet到Spring MVC36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言