3 回答

TA貢獻1893條經驗 獲得超10個贊
servlet使用RequestDispatcher到jsp頁面
String url="/EShop.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(req, res);
servlet重定向jsp,并將數據發送到別一個JSP中:
request.setAttubute("messages",aaa);
RequestDispatcher
requestDispatcher=request.getRequestDispatcher("/jsp/testbean.jsp");
requestDispatcher.forward(request,response);
編程接口:
HTTPServlet 使用一個 HTML 表單來發送和接收數據。要創建一個 HTTPServlet,請擴展 HttpServlet 類, 該類是用專門的方法來處理 HTML 表單的 GenericServlet 的一個子類。 HTML 表單是由 <form> 和 </form> 標記定義的。表單中典型地包含輸入字段(如文本輸入字段、復選框、單選按鈕和選擇列表)和用于提交數據的按鈕。當提交信息時,它們還指定服務器應執行哪一個Servlet(或其它的程序)。 HttpServlet 類包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是繼承的。
(1) init() 方法
在 Servlet 的生命期中,僅執行一次 init() 方法。它是在服務器裝入 Servlet 時執行的。 可以配置服務器,以在啟動服務器或客戶機首次訪問 Servlet 時裝入 Servlet。 無論有多少客戶機訪問 Servlet,都不會重復執行 init() 。
缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法來覆蓋它,典型的是管理服務器端資源。 例如,可能編寫一個定制 init() 來只用于一次裝入 GIF 圖像,改進 Servlet 返回 GIF 圖像和含有多個客戶機請求的性能。另一個示例是初始化數據庫連接。缺省的 init() 方法設置了 Servlet 的初始化參數,并用它的 ServletConfig 對象參數來啟動配置, 因此所有覆蓋 init() 方法的 Servlet 應調用 super.init() 以確保仍然執行這些任務。在調用 service() 方法之前,應確保已完成了 init() 方法。
(2) service() 方法
service() 方法是 Servlet 的核心。每當一個客戶請求一個HttpServlet 對象,該對象的service() 方法就要被調用,而且傳遞給這個方法一個"請求"(ServletRequest)對象和一個"響應"(ServletResponse)對象作為參數。 在 HttpServlet 中已存在 service() 方法。缺省的服務功能是調用與 HTTP 請求的方法相應的 do 功能。例如, 如果 HTTP 請求方法為 GET,則缺省情況下就調用 doGet() 。Servlet 應該為 Servlet 支持的 HTTP 方法覆蓋 do 功能。因為 HttpServlet.service() 方法會檢查請求方法是否調用了適當的處理方法,不必要覆蓋 service() 方法。只需覆蓋相應的 do 方法就可以了。
Servlet 的響應可以是下列幾種類型:
一個輸出流,瀏覽器根據它的內容類型(如 text/html)進行解釋。
一個 HTTP 錯誤響應,重定向到另一個 URL、servlet、JSP。
(3) doGet() 方法
當一個客戶通過 HTML 表單發出一個 HTTP GET 請求或直接請求一個 URL 時,doGet() 方法被調用。與 GET 請求相關的參數添加到 URL 的后面,并與這個請求一起發送。當不會修改服務器端的數據時,應該使用 doGet() 方法。
(4) doPost() 方法
當一個客戶通過 HTML 表單發出一個 HTTP POST 請求時,doPost() 方法被調用。與 POST 請求相關的參數作為一個單獨的 HTTP 請求從瀏覽器發送到服務器。當需要修改服務器端的數據時,應該使用 doPost() 方法。
(5) destroy() 方法
destroy() 方法僅執行一次,即在服務器停止且卸裝 Servlet 時執行該方法。典型的,將 Servlet 作為服務器進程的一部分來關閉。缺省的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理服務器端資源。例如,如果 Servlet 在運行時會累計統計數據,則可以編寫一個 destroy() 方法,該方法用于在未裝入 Servlet 時將統計數字保存在文件中。另一個示例是關閉數據庫連接。
當服務器卸裝 Servlet 時,將在所有 service() 方法調用完成后,或在指定的時間間隔過后調用 destroy() 方法。一個 Servlet 在運行 service() 方法時可能會產生其它的線程,因此請確認在調用 destroy() 方法時,這些線程已終止或完成。
(6) getServletConfig() 方法
getServletConfig() 方法返回一個 ServletConfig 對象,該對象用來返回初始化參數和 ServletContext。ServletContext 接口提供有關 servlet 的環境信息。
(7) getServletInfo() 方法
getServletInfo() 方法是一個可選的方法,它提供有關 servlet 的信息,如作者、版本、版權。
當服務器調用 sevlet 的 service()、doGet() 和 doPost() 這三個方法時,均需要 “請求”和“響應”對象作為參數。“請求”對象提供有關請求的信息,而“響應”對象提供了一個將響應信息返回給瀏覽器的一個通信途徑。
javax.servlet 軟件包中的相關類為 ServletResponse 和 ServletRequest,而 javax.servlet.http 軟件包中的相關類為 HttpServletRequest 和 HttpServletResponse。Servlet 通過這些對象與服務器通信并最終與客戶端通信。Servlet 能通過調用"請求"對象的方法獲知客戶端環境,服務器環境的信息和所有由客戶機提供的信息。Servlet 可以調用“響應”對象的方法發送響應,該響應是準備發回客戶端的。

TA貢獻1806條經驗 獲得超8個贊
servlet使用RequestDispatcher到jsp頁面
String url="/EShop.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(req, res);
servlet重定向jsp,并將數據發送到別一個JSP中:
request.setAttubute("messages",aaa);
RequestDispatcher requestDispatcher=request.getRequestDispatcher("/jsp/testbean.jsp");
requestDispatcher.forward(request,response);

TA貢獻1735條經驗 獲得超5個贊
分為 forword:
request.getRequestDispatcher("路徑").forword(request,response);
與 redirect:
response.sendRedirect("路徑");
forword跳轉頁面url地址不會發生變化,刷新頁面會回到地址欄的頁面
redirect是重定向,url地址會發生變化.
forward轉發頁面和轉發到的頁面可以共享request里面的數據.
redirect不能共享數據.
forward一般用于用戶登陸的時候,根據角色轉發到相應的模塊.
redirect一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等.
forward效率高.redirect效率低.
- 3 回答
- 0 關注
- 1047 瀏覽
添加回答
舉報