Servlet入門

1.什麼Servlet?
Java Servlet 是和平臺無關服務器端的組件,它運行在Servlet容器中。
servlet容器負責servlet和客戶的通信及調用servlet的方法,servlet和客戶的
通信採用“請求/響應”的模式。
servlet可完成如下功能:
1)創建並返回請求的動態HTML頁面
2)創建可嵌入到現在HTML頁面中的部分html頁面
3)與其他服務資源(如數據庫或基於Java應用程序)進行通信

2、搭建Web項目
1)新建一個Dynamic Web Project
2)導入jar包;servlet-api.jar
3)爲什麼導入jar 包?
因爲servlet是一個普通的Java類,如果不導入jar包,web項目認爲servlet是一個普通的java類,
就會發生錯誤。
4)創建servlet:實現一個servlet接口
public class HellowServlet implements Servlet{}
5)配置web.xml:



HellowServlet

HellowServlet

com.huida.servlet.HellowServlet



HellowServlet

/HellowServlet

結果:
3、Servlet的生命週期:
1 )構造器:只被調用一次,只要第一次請求servlet時,創建servlet實例,調用構造器。
2)init:只被調用一次,在創建好實例後立即被調用,用於初始化當前servlet
3)service:被多次調用,每次請求都會掉用servlet方法,實際應用於響應請求的
4)destroy:只被調用一次,在當前servlet所在的web應用被卸載前調用,用於釋放當前servlet所佔用資源。
4、load-on-startup參數:
1):

HellowServlet

HellowServlet

com.huida.servlet.HellowServlet
2
2):load-on-startup:可以指定servlet創建時機,若爲負數,則在第一次請求時被創建,若爲0或者正數,則在當前web應用被servlet容器加載時被創建實例。
5、關於servlet-mapping:
1)同一個servlet-name可以被映射多個url上,即多個servlet-mapping元素的servlet-name子元素的設置值可以使用一個servlet的註冊名。
2)在servlet映射到url中也可以使用*通配符,但是隻有兩種固定的寫法:
格式一: ”*.do(擴展名)”

HellowServlet1

*.do

格式二: “/*”結尾

HellowServlet1

/*

6、初始化參數
1) 配置初始化參數

users
root


password
1230

2
2) 獲取初始化參數
<1> String users = servletConfig.getInitParameter(“users”);
System.out.println(“users:”+users);
String password = servletConfig.getInitParameter(“password”);
System.out.println(“password:”+password);
<2> Enumeration names = servletConfig.getInitParameterNames();
while(names.hasMoreElements()) {
String name = names.nextElement();
String value= servletConfig.getInitParameter(name);
System.out.println(“名字”+name+”密碼”+value);
7、配置當前web應用的初始化參數
1)可以由SerlvetConfig獲取:
<1>
getInitParameter()

代碼:
ServletContext context = servletConfig.getServletContext();
String contextName = context.getInitParameter(“driver”);
System.out.println(“contextName:”+contextName);
? // String driver = servletConfig.getlnitParameter(“driver”);
System.out.println(“driver:”+driver);//?
<2>獲取當前WEB絕對路徑
getRealPath(String path);
代碼:
String realpath = context.getRealPath(“/note.text”);
System.out.println(path);
<3>獲取當前web應用名稱:
getContextPath();
代碼:
String contextPath = servletContext.getContextPath();
System.out.println(contextPath);
2)該對象代表當前web應用:可以認爲SerlvetContext是當前web應用的一大管家。
可以從中獲取web應用的各方面信息。
<1>獲取當前web初始化參數
設置初始化參數:可以爲所有的Servlet所獲取,而Servlet的初始化參數只用
那個Servlet可以獲取


driver
com.mysql.jdbc.Driver

1、如何在servlet中獲取請求的信息:
1)Servlet的service()方法用於應答請求:因爲每次請求都會調用service()的方法
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
System.out.println(“service”);
}
ServletRequest:封裝了請求信息,可以從中獲取到任何的請求信息
ServletResponse:封裝了響應信息,如果想給用戶什麼響應,具體可使用該接口的方法實現。
這兩個接口的實現類都是服務器給予實現的,並在服務器調用service方法時傳入。
2)ServletRequest:封裝了請求信息,可以從中獲取到任何的請求信息
案例:註冊
用戶名
密碼
年齡
性別:(男,女)
興趣:複選框(音樂,足球,吉他)
1)獲取請求參數,有返回值
String name = request.getParameter(“username”);
System.out.println(“name”);
根據請求參數的名字,返回參數值。
若請求參數有多個值(例如checkbox),該方法只能獲取到第一個提交的值。
2)根據請求參數的名字,返回請求參數對應的字符串數組。
String[] like =request.getParameterValues(“like”);
for(String likes:like) {
System.out.println(likes);
3)Enumeration getParameterNames():返回參數名對應的Enumeration對象,
類似於ServletConfig(或ServletContext)的getlnitParameterNames()方法。
4)Map getParameterMap():返回請求參數的鍵值對:key:參數名,value:參數值,
String 數組類型。
2、獲取請求的URL:
1)獲取請求的URI:
String uri = httpServletRequest.getRequestURI();
System.out.println(“uri:”+uri);
2)獲取請求的URL:
StringBuffer url = httpServletRequest.getRequestURL();
System.out.println(“url:”+url);
3)獲取請求方式:
String method =httpServletRequest.getMethod();
System.out.println(method);
4)ServletResponse:封裝了響應信息,如果想給用戶什麼響應,具體可以使用該接口的方法實現
1)*getWrite():返回Printwrite對象。調用該對象的Print()方法,將把print()中的參數直接打印到客戶的瀏覽器上。
2)設置響應的內容類型:response.setContentType(
“application/msword”);
3)void sendRedirect(String location):請求的重定向。(此方法爲HttpServletResponse中定義。)

請求方式:
doGet:獲取由請求URL標識的資源
doPost:向web服務器發送無限長度的數據
doPut:存出一個資源到請求URL
doDelete:刪除由URL標識的資源
doHead:返回URL標識的頭條信息
doOptions:返回服務器支持的http方法
doTrace:返回Trace請求附帶的頭字段
HTTP響應包括響應碼,頭字段和響應體。HTTP協議要求響應碼和所有的頭字段都在任何響應體之前返回。
3、doPut():調用和doPost()相似,並且它允許客戶端把真正的文件存在服務器上,而不僅僅是傳送數據。
4、doDelete():它允許客戶端刪除服務器端的文件或者web頁面。它的使用非常少。
5、doHead():它用於處理客戶端的Head調用,並且返回一個response.當客戶端只需要響應的Header時,它就發出一個Header請求。這種情況下客戶端往往關心響應的長度和響應的MIME類型。
6、doOptions():它用於處理客戶端的Options調用,通過這個調用,客戶端可以獲得此Servlet方法
如果Servlet
7.get和post的區別?
1)使用GET方式傳遞參數:
《1》在瀏覽器地址中輸入某個URL地址或單擊網頁上的一個超鏈接時,瀏覽器發出的http請求消息的請求方方式爲GET。
《2》如果網頁中的表單元的method的屬性設置爲GET瀏覽器提交這個form表單時,生成的http請求消息的請求方式也爲GET。
《3》使用GET請求方式給web服務器傳遞參數格式。
http://localhost:8080/ServeletLiftciyo/loginServlet?
user=asdc&password=123
《4》使用GET方式傳送的數據量一般限制在1KB以下
2)使用POST方式傳遞參數
<1>POST請求方式主要用於web服務器程序提交from表單中的數據:
form表單的method設置爲post
<2>POST方式將各表單字段元素及其數據作爲http消息的實體內容發給web服務器,
傳送的數據量要比使用GET方式傳遞的數據量大的多。
* GET和POST區別?
* GET:請求參數會顯示到地址欄.GET方式有大小的限制.GET方式沒有請求體
* POST:請求參數不會顯示到地址欄.在請求體中.POST沒有大小限制.POST方式有請求體.
* 只有表單設置爲method=”post”纔是post請求.其他的都是get請求

String name = request.getParamter(“username”);
System.out.println(name);
PrintWriter pw = response.getWriter();
pw.print(name);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章