1. 程式人生 > >Servlet的建立、部署與執行

Servlet的建立、部署與執行

一、例項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檔案中

(一)編譯上面的檔案

  1. 首先,將bin資料夾下的servlet-api拷貝到與Hello.java相同的路徑下
  2. 如何在命令列中進行編譯呢?
  3. 在命令列中,通過javac -cp servlet-api.jar Hello.java語句進行編譯,而不是直接javac Hello.java
  4. 因為用到了jar檔案,所以前面加-cp,意思是class  pass,通過-cp變數來指定jar檔案,也就是說,我需要的類都在servlet-api裡面,可以去這裡面找。這裡面可以放多個jar檔案,上面的做法
    指定一個臨時的環境變數不是永久的。當然也可以配置環境變數,這樣的做法是永久的配置一個class   pass環境變數。
  5. 下圖則生成了一個class檔案,如何應用class檔案,將其放到Tomcat中去呢?

(二)將配置出來的class檔案放到Tomcat中去

  1. 在webapps下面,每一個資料夾代表一個網站或者是一種應用,所以可以新建一個first檔案
  2. 怎麼放Hello.class檔案呢?
  3. 因為不是普通的html或者是頁面,如果是普通的html或者是頁面,直接放進去就可以了
  4. 下面講解放置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訪問這個類。這就是配置的過程。