基於servlet網絡編程
1.我們知道了基於http協議的網絡編程模型和基於套接字的網路編程模型(相對於我的博客上寫的),那麽我們將使用更加便捷的servlet網絡編程。
基於http協議的網絡編程,我的博客上面需要我們自己寫客戶端,基於套接字的網絡編程我的博客上面需要我們自己寫客戶端和服務器端,現在我們用servlet編程,不需要我們寫客戶端和服務器端,我們只需要在tomcat容器裏寫我們的處理程序就行,響應請求由tomcat來完成。
2.如何在tomcat上部署項目。打開tomcat文件,找到webapp文件裏面的例子(既然我們需要tomcat來幫助我們響應請求,那麽我們需要遵循tomcat中的規則)
一個web應用程序需要一個web-inf文件。web-inf中有三個文件不能少
除了web-inf,還需要有meta-inf文件(見hostmanager文件夾)
3.我們可以先直接在webapp文件夾下建立一個html文件,然後在瀏覽器端訪問(嘗試一下不用編寫請求和回應請求的程序)
4.建立servlet程序。(servlet編程需要的api是javaee的api,我們可以在網上下載)
1 import javax.servlet.http.HttpServlet; 2 import javax.servlet.http.HttpServlet;import java.io.IOException; 3 import java.io.*; 4 importjavax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 public class httpservlet extends HttpServlet { 7 8 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException{ 9 PrintWriter out =resp.getWriter(); 10 out.println("<html><head><head/><body><h1>hello<h1><body/><html/>");11 out.flush(); 12 out.close(); 13 } 14 15 16 17 18 19 20 }
5.編譯這段代碼我們會發現報錯,找不到類。因為javase的jdk不能滿足javaee的類,我們要找的jar包可以在tomcatlib文件中找到。
6.將這個jar包配置環境
將這個jar包的絕對路徑放入classpath中
將這個jar包復制粘貼到jdk-jre-lib-ext文件夾中
7.再有問題就是自己寫的代碼有錯誤了(這個問題很常見,我經常這樣,以為環境配置錯了,最後發現代碼中少import了包)
8.建立web項目
Web-inf文件是
9.這時從瀏覽器找資源(用於測試一下)(web.xml需要寫內容)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 6 version="4.0" 7 metadata-complete="true"> 8 9 </web-app>
10.瀏覽器中輸入
http://127.0.0.1:8080/myweb/test3.html 測試是否能用
11.找到我們編譯好的class文件,放入我們建好的web項目的classes文件夾下面(tomcat自動幫我們調用)
12.配置web-xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 6 version="4.0" 7 metadata-complete="true"> 8 9 10 11 <servlet> 12 <servlet-name>myservlet</servlet-name> 13 <servlet-class>httpservlet</servlet-class> 14 </servlet> 15 16 17 <servlet-mapping> 18 <servlet-name>myservlet</servlet-name> 19 <url-pattern>/happy</url-pattern> 20 </servlet-mapping> 21 </web-app>
13.則可以通過瀏覽器端訪問http://127.0.0.1:8080/myweb/happy ,就可以訪問到我們在java文件中編寫的html文件
14.那為什麽不直接訪問html文件呢,通過http://127.0.0.1:8080/myweb/test3.html,為什麽要將頁面寫在我們編寫的類裏面呢。因為我們需要在客戶訪問頁面之前做一些判斷,如果將文件直接暴露出來讓任何人都能使用,這就只是一種簡單的垃圾存儲了,沒有任何的意思。所以servlet的意義就在於一種模型,能進行客戶判斷,選擇合適的頁面發送給客戶。Web.xml文件的作用就在於tomcat不可能完全幫助我們來響應客戶的請求,因為它不知道我們給客戶什麽,所以我們需要跟tomcat之間有信息交流,告訴tomcat它需要做什麽,響應什麽樣的請求,還有我們是誰,什麽時候去調用我們自己。
基於servlet網絡編程