02 Servlet生命週期及ServletRequest與ServletResponse

 

一、Servlet生命週期

1.1Servlet的生命週期

Servlet運行依靠servlet容器(tomcat)

Tomcat作用:

1.鏈接

         2.容器(存放文件-web項目)

生命週期分爲:init:初始化;service:處理請求和響應;destroy:銷燬。

Init初始化類似於單例模式,僅初始化一次;

 

1.2配置Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

  <display-name>servlet-01-lifecycle</display-name>

 

  <servlet>

    <servlet-name>TestCycleServlet</servlet-name>

    <servlet-class>cn.gzsxt.servlet.TestCycleServlet</servlet-class>

    <!-- 如果是負數或0 ,由tomcat 自動分配順序; 正整數  從小到大初始化 -->

    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet>

    <servlet-name>TestServlet02</servlet-name>

    <display-name>This is the display name of my J2EE component</display-name>

    <description>This is the description of my J2EE component</description>

    <servlet-class>cn.gzsxt.servlet.TestServlet02</servlet-class>

    <load-on-startup>2</load-on-startup>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>TestCycleServlet</servlet-name>

    <url-pattern>/testCycleServlet.gzsxt</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

    <servlet-name>TestServlet02</servlet-name>

    <url-pattern>/testServlet02.gzsxt</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

</web-app>

 

二、ServletRequest與ServletResponse

2.1ServletRequest

package cn.sxt.serRequest;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TestServletRequest extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   // 請求行信息

                   getResponseLineMgs(request, response);

 

         }

 

         private void getResponseLineMgs(HttpServletRequest request,

                            HttpServletResponse response) throws IOException {

                   // 獲取項目名稱

                   String requestURI = request.getRequestURI();

                   System.out.println("requestURI:\t" + requestURI);

                   // 獲取不含參數的全路徑

                   StringBuffer requestURL = request.getRequestURL();

                   System.out.println("requestURL:\t" + requestURL);

                   // 獲取協議名稱

                   String scheme = request.getScheme();

                   System.out.println("scheme:\t" + scheme);

                   // 獲取web應用名稱

                   String contextPath = request.getContextPath();

                   System.out.println("contextPath:\t" + contextPath);

                   // 設置編碼集  不設置會造成瀏覽器亂碼

                   response.setContentType("text/html;charset=utf-8");

 

                   PrintWriter out = response.getWriter();

 

                   out.print(this.getClass());

 

                   out.println("request測試,請求行信息。");

                   out.flush();

                   out.close();

         }

 

}

編碼集不設置爲造成瀏覽器端產生亂碼

package cn.sxt.serRequest;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TestServletRequest extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                  

                   // 請求鏈接信息

                   getLinkedInfo(request, response);

 

         }

 

         private void getLinkedInfo(HttpServletRequest request,

                            HttpServletResponse response) throws IOException {

                   // 獲取客戶端的地址

                   String remoteAddr = request.getRemoteAddr();

                   System.out.println("remoteAddr: " + remoteAddr);

                   // 獲取客戶端的端口號

                   int remotePort = request.getRemotePort();

                   System.out.println("remotePort: " + remotePort);

                   // 獲取服務器的地址

                   String localAddr = request.getLocalAddr();

                   System.out.println("localAddr: " + localAddr);

 

                   // 獲取服務器的端口號

                   int localPort = request.getLocalPort();

                   System.out.println("localPort: " + localPort);

 

                   // 設置編碼集

                   response.setContentType("text/html;charset=utf-8");

                   // 設置流

                   PrintWriter writer = response.getWriter();

                   writer.println("request測試,鏈接信息。");

                   writer.flush();

                   writer.close();

         }

 

package cn.sxt.serRequest;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TestServletRequest extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   // 請求行信息

                   // getResponseLineMgs(request, response);

                   // 請求鏈接信息

                   //getLinkedInfo(request, response);

                   // 獲取前端提交的數據

                   String parameter = request.getParameter("username");

                   System.out.println("parameter: "+parameter);

                   String parameter1 = request.getParameter("pwd");

                   System.out.println("pwd: "+parameter1);

                   response.setContentType("text/html;charset=utf-8");

                   PrintWriter writer = response.getWriter();

                   writer.println("parameter測試。。。");

                   writer.flush();

                   writer.close();

 

         }

2.2 ServletResponse

使用Response設置head

package cn.sxt.servlet;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class TestResponse extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   response.setContentType("text/html;charset=utf-8");

                   // 設置3s後跳轉至指定頁面

                   response.addHeader("refresh", "3;url=ok.html");

                   PrintWriter out = response.getWriter();

                   out.println("測試 response");

                   out.flush();

                   out.close();

         }

}

2.3 response對象作用域對象存儲數據

package cn.sxt.servlet;

 

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class TestDownload extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                   doPost(request, response);

 

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   // 讀取文件 輸入流

                   InputStream is = this.getServletContext().getResourceAsStream(

                                     "/img/12.jpg");

                   // 輸出流將圖片下載到客戶端

                   ServletOutputStream os = response.getOutputStream();

 

                   // 設置瀏覽器打開文件的方式,打開一個窗口;設置mime類型的一種默認online

                   response.addHeader("content-disposition", "attachment;filename="

                                     + "12.jpg");

 

                   //

                   int temp = 0;

                   byte[] b = new byte[1024];

                   while ((temp = is.read(b)) != -1) {

                            os.write(b, 0, temp);

                   }

 

                   // 關流

                   os.flush();

                   os.close();

                   is.close();

         }

 

}

2.4請求轉發

package cn.sxt.servlet;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class TestDispatcher extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                   // 轉發服務即減少了用字符串拼接html頁面的瑪法

                   // 轉發是服務器的行爲 一次請求和相應

                   RequestDispatcher requestDispatcher = request

                                     .getRequestDispatcher("/main.html");

                   // 加/

                   requestDispatcher.forward(request, response);

 

         }

 

}

 

 

 

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