更新時(shí)間:2021-07-21 11:19:21 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽983次
Service是類GenericServlet中最重要的方法,每次客戶向服務(wù)器發(fā)出請(qǐng)求時(shí),服務(wù)器就會(huì)調(diào)用這個(gè)方法。程序員如果想對(duì)客戶的請(qǐng)求進(jìn)行響應(yīng)的話就必須覆蓋這個(gè)方法,并在這個(gè)方法中加入自己的代碼來(lái)實(shí)現(xiàn)對(duì)客戶的響應(yīng)。Service有兩個(gè)參數(shù)(ServletRequest和ServletResponse),ServletRequest保存了客戶向服務(wù)器發(fā)送的請(qǐng)求,而ServletResponse用來(lái)設(shè)置如何對(duì)客戶進(jìn)行響應(yīng)。
有一個(gè)問(wèn)題我們應(yīng)當(dāng)注意:就是init()方法(Servlet的兩個(gè)生命周期函數(shù)之一,另一個(gè)是destroy())和service()方法的區(qū)別,當(dāng)我們改變?cè)闯绦蚨匦律梢粋€(gè)新的.class文件的時(shí)候,此時(shí)如果再次執(zhí)行該Servlet,會(huì)發(fā)現(xiàn)執(zhí)行的結(jié)果跟沒(méi)做更改的時(shí)候一樣,原因就是因?yàn)橄嗤腟ervlet的init只執(zhí)行一次,所以當(dāng)我們?cè)谡{(diào)試Servlet的時(shí)候要不斷改變文件名和類名,或者重新啟動(dòng)服務(wù)(Tomcat或者JWS等)。就是說(shuō),init()方法僅在服務(wù)器裝載Servlet時(shí)才由服務(wù)器執(zhí)行一次,而每次客戶向服務(wù)器發(fā)請(qǐng)求時(shí),服務(wù)器就會(huì)調(diào)用Service()方法。
其實(shí)若是這三個(gè)方法都在存在的情況下,java只會(huì)執(zhí)行service()方法,而其他的兩種方法不會(huì)被執(zhí)行。若是沒(méi)有service()方法,則是根據(jù)jsp傳入方式選擇對(duì)應(yīng)的方法。比如說(shuō),若是jsp是以Post方式傳入數(shù)據(jù),則是調(diào)用doPost()方法處理數(shù)據(jù),但是一般上在建立一個(gè)繼承HttpServlet類時(shí)都會(huì)重寫doPost()和doGet()方法,而且會(huì)在其中一個(gè)方法中處理數(shù)據(jù),另一個(gè)方法則是直接調(diào)用該方法,比如以下例子:
package com.sysker.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FristSerevlet
*/
@WebServlet("/FristServlet")
public class FristServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FristServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
String name= request.getParameter("name");
String gender=request.getParameter("gender");
String[] colorMap =null;
String national = request.getParameter("national");
PrintWriter out = response.getWriter();
out.println("<html><head>");
out.println("<title>Servlet測(cè)試</title></head>");
out.println("<body>");
out.println("您的姓名:"+name+"<br><hr>");
out.println("您的性別:"+gender+"<br><hr>");
out.println("您喜歡的顏色:<br>");
if(request.getParameterValues("color")!=null){
colorMap=request.getParameterValues("color");
for (String color : colorMap) {
out.print(color+" ");
}
out.println("<br><hr>");
}else{
out.println("您未選擇喜歡的顏色!<br><hr>");
}
out.println("您的國(guó)籍:"+national+"<br>");
out.println("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"Servlet方法的詳解",希望對(duì)大家有幫助,想了解更多可查看Servlet教程。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒(méi)有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743