Servlet的建立、部署與執行
阿新 • • 發佈:2019-01-06
一、例項1
hello是純手工開發,當會純手工開發之後,再進行IDE開發就比較得心應手了
package chapter10; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /*設定好兩個型別之後 獲取引數name 通過name,輸出不同的文字*/ public class Hello extends HttpServlet /* * 自定義的Servlet是HttpServlet類的子類就好 * Servlet必須有包名,包名自己定義 * */ { public void service(HttpServletRequest request,HttpServletResponse response)throws IOException //兩個形參都是介面型別的 { response.setContentType("text/html;charset=GB2312");//通過response設定響應的MIME型別//是text型別的html,中文的編碼格式 PrintWriter out=response.getWriter();//通過getWriter()獲取到out String name=request.getParameter("name");//客戶端穿過一個引數叫name,通過getParameter獲取到賦值給name區域性變數 out.print("<Html><Body>");//輸出的是html,所以首先輸出... if(name==null) { out.println("你需要輸入名字!"); } else if(name.equals("zhangfeng")) { out.print("<h2>您好,歡迎"+name+"老師");//html中有沒有回車有什麼區別? out.println("</h2>"); } else { out.println("<h2>您好,歡迎"+name+"同學</h2>"); } out.println("</body></html>"); } }
實現Servlet介面的物件必須有包名,包名自己定義
但是用命令列編譯的時候,有以下錯誤,顯示......不存在
1、編譯的時候,找不到包和類、介面,那麼包和class檔案在哪呢?用到的HttpServlet類、HttpServletRequest介面、HttpServletResponse介面都放到什麼地方呢?
2、如果能夠通過編譯的話,使用者發出的請求是怎麼來的?請求肯定是實現了介面的類的某一個物件,那麼實現了介面類的什麼地方呢?
3、最終要放到Tomcat中去,因此請求發過來之後,Tomcat要接受使用者請求,然後把使用者資訊打包,打包成某個介面實現類的物件,因此,在Tomcat中肯定有這個介面的實現類。Tomcat提供了實現這兩個介面的類的話,是不是也應該包含別的呢?
4、Tomcat中應該提供好了這些類和介面,所以可以從Tomcat中找一下,在lib檔案中
(一)編譯上面的檔案
- 首先,將bin資料夾下的servlet-api拷貝到與Hello.java相同的路徑下
- 如何在命令列中進行編譯呢?
- 在命令列中,通過javac -cp servlet-api.jar Hello.java語句進行編譯,而不是直接javac Hello.java
- 因為用到了jar檔案,所以前面加-cp,意思是class pass,通過-cp變數來指定jar檔案,也就是說,我需要的類都在servlet-api裡面,可以去這裡面找。這裡面可以放多個jar檔案,上面的做法
- 下圖則生成了一個class檔案,如何應用class檔案,將其放到Tomcat中去呢?
(二)將配置出來的class檔案放到Tomcat中去
- 在webapps下面,每一個資料夾代表一個網站或者是一種應用,所以可以新建一個first檔案
- 怎麼放Hello.class檔案呢?
- 因為不是普通的html或者是頁面,如果是普通的html或者是頁面,直接放進去就可以了
- 下面講解放置class檔案的方法
- E:\Tomcat\apache-tomcat-8.5.35\webapps\first\WEB-INF,先在first檔案下,建立一個WEB-INF資料夾,這個是Tomcat的規定,放Web用的基本資訊
- 為什麼是放到INF中呢?
- 然後WEB-INF資料夾中放什麼呢?相應的class檔案和jar檔案都可以放到那裡面,放置的方法如下
- E:\Tomcat\apache-tomcat-8.5.35\webapps\first\WEB-INF\classes,WEB-INF資料夾下,新建一個classes資料夾,裡面放相應的已經編譯好的class檔案,包括java類,也放到這裡面
- 放class和java類之前,因為類有包名,所以直接放過來是不可以的,所以也要對應包在classes檔案下新建資料夾
- E:\Tomcat\apache-tomcat-8.5.35\webapps\first\WEB-INF\classes\chapter10,建好包之後,把class放進去,這樣就相當於配置好了
- 但是這個時候,只是把class類放到Tomcat中,Tomcat還不認識它
- 每一個web應用中,比如ROOT資料夾下有,點開之後是,這個是為了說明或者配置web應用的
- 所以在first檔案下的WEB-INF檔案中,也放一個xml,程式碼如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>chapter10.Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
- 標記是web-app,結尾也是web-app
- 實際開發的時候,直接將這一部分拷過來就可以
- web-app中放所有的servlet
- 每一個servlet都要配兩部分
- 第一部分是servlet元素,放到web-app下面,,這裡的名字可以自己取,但是取完之後,就可以訪問這個元素了。這裡就是hello對應的class檔案,或者是帶包名的class類名。這裡只是基本的名字和類。
- 這裡配置路徑,這裡指路徑/hello,當通過/hello訪問這個網站first的時候,就訪問hello的servlet,然後,通過hello訪問這個類。這就是配置的過程。
- 之後開啟bin下的startup,輸入網址http://localhost/first/hello即可找到頁面
- 如何傳引數進來呢?http://localhost/first/hello?name=zhangfeng,這樣,就實現了引數的傳遞。
- http://localhost/first/hello?name=zhangsan