該來的都在路上

該來的都在路上
該來的都在路上
一、 Servlet
1.1、servlet簡介
Servlet(Server Applet)是Java Servlet的簡稱,稱爲小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。其實Servlet就是Java語言實現的一個接口,Servlet運行於支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基於HTTP協議的Web服務器。
1.2實現過程
1.客戶端發送請求至服務器端;
2.服務器將請求信息發送至 Servlet;
3.Servlet 生成響應內容並將其傳給服務器。響應內容動態生成,通常取決於客戶端的請求;
4.服務器將響應返回給客戶端。

1.3servlet九大內置對象

  1. request對象
    該對象封裝了用戶提交的信息,通過調用該對象相應的方法可以獲取封裝的信息, 即使用該對象可以獲取用戶提交信息。 客戶端的請求參數都被封裝到這個對象裏面
    2.response對象
    對客戶的請求做出動態的響應,向客戶端發送數據。
    3.session對象
    1.什麼是session:session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建(web容器創建的,使用者直接使用即可),完成會話期管理。
    從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間反覆連接,反覆刷新一個頁面,服務器應當通過某種辦法知道這是同一個客戶,這就需要session對象。
  2. aplication對象
    1.什麼是application:
    服務器啓動後就產生了這個application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。但是與session不同的是,所有客戶的application對象都是同一個,即所有客戶共享這個內置的application對象。
    2.application對象常用方法:
    (1)public void setAttribute(String key,Object obj): 將參數Object指定的對象obj添加到application對象中,併爲添加的對象指定一個索引關鍵字。(這個在web開發中很創建,可以通過與對象進行轉發,達到數據共享)
    (2)public Object getAttribute(String key): 獲取application對象中含有關鍵字的對象。
  3. out對象
    out 對象是一個輸出流,用來向客戶端輸出數據。out對象用於各種數據的輸出。可以直接輸出到前端頁面中。
  4. page java.lang.Object
    對應this關鍵字。JSP網頁本身
    page對象是當前頁面轉換後的Servlet類的實例。從轉換後的Servlet類的代碼中,可以看到這種關係:
    Object page = this;
    在JSP頁面中,很少使用page對象。
    7.config
    javax.servlet. ServletConfig 的實例,該實例代表該JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事實上, JSP 頁面通常無須配置,也就不存在配置信息。因此,該對象更多地在Servlet 中有效。

  5. exception java.lang.Throwable 的實例
    該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性爲true 時,該對象纔可以使用。常用的方法有getMessageO和printStackTraceO等。

  6. pageContext
    javax.servlet.jsp.PageContext 的實例,對象直譯時可以稱作“頁面上下文”對象,代表的是當前頁面運行的一些屬性,通過此對象可以拿到其他8大對象,使用該對象可以訪問頁面中的共享數據。常用的方法有getServletContextO和getServletConfigO等。

//使用pageContext 設置屬性,該屬性默認在page 範圍內
pageContext. setAttribute ("page" , "hello") ;

//使用request 設置屬性,該屬性默認在request 範圍內
request. setAttribute ("request" , "hello");

//使用pageContext將屬性設置在request 範圍中
pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);

// 使用session將屬性設置在session 範圍中
session.setAttribute("session" , "hellosession"; )

//使用pageContext將屬性設置在session範圍中
pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);

//使用application將屬性設置在application範圍中
application. setAttribute ("app" , "hello") ;

//使用pageContext 將屬性設置在application 範圍中
pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;

1.4 四個作用域
1.application:全局作用範圍,整個應用程序共享,就是在部署文件中的同一個webApp共享,生命週期爲:應用程序啓動到停止。
2.session:會話作用域,當用戶首次訪問時,產生一個新的會話,以後服務器就可以記住這個會話狀態。生命週期:會話超時,或者服務器端強制使會話失效。(一個簡單的應用就是可以動態的獲取登錄後的用戶名稱)
3.request:請求作用域,就是客戶端的一次請求。
4.page:一個JSP頁面。
1.5 servlet簡單案例—用戶登錄,動態獲取用戶名,顯示歡迎信息
1.下載的html頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下載案例</title>
</head>
<body>
<a href="/response/ServletDownload?filename=曾惜-講真的.mp3">曾惜-講真的.mp3</a>
</body>
</html>
2.servlet後臺邏輯

package com.lyg.servlet.download;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

@WebServlet("/ServletDownload")
public class ServletDownload extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取文件名
        String filename = request.getParameter("filename");
        //獲取servletcontext對象
        ServletContext servletContext = getServletContext();
        //設置響應頭
        String mineType = servletContext.getMimeType(filename);
        response.setHeader("content-type",mineType);
        //告訴瀏覽器是打開還是保存,並設置下載後的文件名
        response.setHeader("content-disposition","attachment;filename="+filename);
        String userAgent = request.getHeader("user-agent");
        filename = URLEncoder.encode(filename, "utf-8");
    //創建輸入流,讀入目標文件
    InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/elements/"+filename);
    byte []chars=new byte[1024*8];
    //創建一個ServletOutputSteam 對象
    ServletOutputStream outputStream = response.getOutputStream();
    int len;
    while ((len=inputStream.read(chars))!=-1){
        outputStream.write(chars,0,len);
    }
    inputStream.close();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    this.doPost(request,response);
}

}

二、jsp
2.1 jsp簡介
JSP全名爲Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它 [1] 是由SUN公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML文件(.htm,.html)中插入Java程序段Scriptlet)和JSP標記(tag),從而形成JSP文件,後綴名爲(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其他操作系統上運行。
它實現了Html語法中的java擴展(以 <%, %>形式)。JSP與Servlet一樣,是在服務器端執行的。通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。
JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在於服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基於組件的設計,使基於Web的應用程序的開發變得迅速和容易。 JSP(JavaServer Pages)是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。他的本質上還是一個Servlet。
2.2 page指令
1.包含選項
import 使一個JAVA導入聲明被插入到最終頁面文件。
contentType 規定了生成內容的類型。當生成非HTML內容或者當前字符集character set並非默認字符集時使用。
errorPage 處理HTTP請求時,如果出現異常則顯示該錯誤提示信息頁面。
isErrorPage 如果設置爲TRUE,則表示當前文件是一個錯誤提示頁面。
isThreadSafe 表示最終生成的servlet是否安全線程(threadsafe)。
2.語法
1.<%@ include file="somefile.jsp" %>:將一個頁面內容包含在一個頁面中

  1. <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>:引入標籤庫

3.jsp和servlet綜合應用---登錄案例

  1. 登錄後臺的邏輯
package com.lyg.servlet.login;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

@WebServlet("/LoginDemo02")
public class LoginDemo02 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //設置編碼
        request.setCharacterEncoding("utf-8");
        //獲取參數
        String username = request.getParameter("username");
        String password = request.getParameter("password");final  String URL = "jdbc:mysql://localhost:3306/db1";
        final String USER = "root";
        final String PASSWORD = "12345678";
        String SQL = "select * from userinfo where name = ? and password = ?";
        HttpSession session = request.getSession();//獲取session對象
        //連接數據庫,查詢
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager.getConnection(URL,USER,PASSWORD);
            PreparedStatement preparedStatement = connection.prepareStatement(SQL);
            preparedStatement.setString(1,username);
            preparedStatement.setString(2,password);
            ResultSet resultSet = preparedStatement.executeQuery();
            String db_username=null;
            String db_password =null;
            if (resultSet.next()){
                db_username=resultSet.getString(2);
                db_password=resultSet.getString(3);
            }
            //判斷用戶名和密碼是否正確
            if (username.equals(db_username) && password.equals(db_password)){
                //信息都正確
                //頁面跳轉到success.jsp;
                session.setAttribute("username",username);//存儲用戶名
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }else {
                //用戶名獲取密碼不正確
                //存儲錯誤信息
                request.setAttribute("code_error","用戶名或者密碼錯誤");
                //同一次請求,請求轉發
                request.getRequestDispatcher("/userinfo/index.jsp").forward(request,response);//轉發錯誤信息
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}
  1. 前臺頁面就是個很簡單的form表單,這裏就不演示了。
    最後謝謝各位同仁的觀看,我們共同學習,共同進步~~~~
    !
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章